我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题。每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。后来上网查了一下资料,通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。
下面是相关参数的调整:
一、2.6内核下
/proc/sys/vm/dirty_ratio
这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio
这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_background_ratio
/proc/sys/vm/dirty_writeback_centisecs
这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:
echo "100" > /proc/sys/vm/dirty_writeback_centisecs
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:
echo "1000" > /proc/sys/vm/dirty_writeback_centisecs
/proc/sys/vm/dirty_expire_centisecs
这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
echo "100" > /proc/sys/vm/dirty_expire_centisecs
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。
6) /proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache
缺省设置:100
7) /proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)
8) /proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。
缺省设置:2(只读)
9) /proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
缺省设置:0
10) /proc/sys/vm/overcommit_ratio
该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)
11) /proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)
12) /proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。
二、2.4内核下
通过修改文件/proc/sys/vm/bdflush实现。文件中的九个参数含义如下:
nfract:dirty缓冲在缓冲区中的最大百分比。超过这个值将bdflush进程刷新硬盘。当可用内存比较少的情况下,将引发大量的磁盘I/O。为了均衡磁盘I/O,可以保持一个比较低的值。
Ndirty:bdflush进程一次写入磁盘的最大dirty缓冲块数量。这个值比较大将导致I/O急剧增加,如果这个比较小,bdflush进程执行不够从而可能导致内存的瓶颈。
Dummy2 :未使用
Dummy3:未使用
Interval:kupdated工作和刷新的最小频率,默认值是5秒。最小值是0秒最大值是600秒。
Age_buffer:缓冲数据写到磁盘之前操作系统等待的最大时间。默认值是30秒,最小值是1秒最大值是6000秒。
Nfract_sync:dirty缓存激活bdflush进程同步的百分比。默认值是60%。
Nfract_stop:dirty缓存停止bdflush进程的百分比。默认值是20%。
Dummy5:未使用
比如在一个写操作频繁的数据库服务器上设置:
10 500 0 0 50 30 10 0 0
下面是相关参数的调整:
一、2.6内核下
/proc/sys/vm/dirty_ratio
这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio
这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_background_ratio
/proc/sys/vm/dirty_writeback_centisecs
这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:
echo "100" > /proc/sys/vm/dirty_writeback_centisecs
如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:
echo "1000" > /proc/sys/vm/dirty_writeback_centisecs
/proc/sys/vm/dirty_expire_centisecs
这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
echo "100" > /proc/sys/vm/dirty_expire_centisecs
当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。
6) /proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache
缺省设置:100
7) /proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)
8) /proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。
缺省设置:2(只读)
9) /proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
缺省设置:0
10) /proc/sys/vm/overcommit_ratio
该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)
11) /proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)
12) /proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。
二、2.4内核下
通过修改文件/proc/sys/vm/bdflush实现。文件中的九个参数含义如下:
nfract:dirty缓冲在缓冲区中的最大百分比。超过这个值将bdflush进程刷新硬盘。当可用内存比较少的情况下,将引发大量的磁盘I/O。为了均衡磁盘I/O,可以保持一个比较低的值。
Ndirty:bdflush进程一次写入磁盘的最大dirty缓冲块数量。这个值比较大将导致I/O急剧增加,如果这个比较小,bdflush进程执行不够从而可能导致内存的瓶颈。
Dummy2 :未使用
Dummy3:未使用
Interval:kupdated工作和刷新的最小频率,默认值是5秒。最小值是0秒最大值是600秒。
Age_buffer:缓冲数据写到磁盘之前操作系统等待的最大时间。默认值是30秒,最小值是1秒最大值是6000秒。
Nfract_sync:dirty缓存激活bdflush进程同步的百分比。默认值是60%。
Nfract_stop:dirty缓存停止bdflush进程的百分比。默认值是20%。
Dummy5:未使用
比如在一个写操作频繁的数据库服务器上设置:
10 500 0 0 50 30 10 0 0
发表评论
-
crond需要重启么?
2011-06-11 12:20 1224今天一同事说把A机器的/var/spool/cron/admi ... -
GDB信号的处理和启动配置文件(转载)
2011-05-22 21:57 2203信号的处理 程序是和网络相关的,调试期间经常地收到SIGPIP ... -
信号量基础知识
2011-05-10 18:40 985linux 中信号相关的一个结构体 struct sigact ... -
asprintf
2011-05-08 21:49 2326sprintf() 的整个介面长的样子的是: int ... -
获取用户输入的问题(清除stdin)
2011-05-08 21:37 1907需求: 从终端获取用户输入的用户名和密码(有效 ... -
Linux下的UDP/TCP端口映射(netcat and socat)
2011-05-07 20:42 9665说起来有点土,事到如今 ... -
linux任务管理
2011-05-07 20:32 680disown是bash内部命令,nohup是外部命令 diso ... -
boost multi_index_container
2011-04-27 21:18 1524本章介绍的主题是multi_i ... -
变量相关命令(env,export,set,read, array, declare
2011-04-26 21:38 1001系统的预设参数文件:/ ... -
stl priority_queue
2011-04-26 21:20 601简单的使用示例。 view plaincopy to cli ... -
linux backlog
2011-04-25 15:13 1492在linux中,/proc/sys/net/core/so ... -
linux backlog
2011-04-25 15:13 730在linux中,/proc/sys/net/core/so ... -
stl hash_map
2011-04-23 19:57 749#include <cstdlib> #incl ... -
linux串口登陆
2011-04-23 09:31 1478在这个互连网高速发展的时代, 企业内网络设备的安全和运行稳定也 ... -
linux rename
2011-04-21 09:38 707Linux中rename命令的用法 刚学习linux的时候, ... -
stl heap
2011-04-17 10:01 767make_heap 原型: #include <a ... -
expand and upexpand
2011-04-09 13:33 707expand: NAME expand - co ... -
内核模块相关命令:lsmod,depmod,modprobe
2011-03-28 13:24 1108lsmod 功能:列出内核已载入模块的状态 用法:lsmod ... -
通过先unlink()后close()创建安全的临时文件
2011-03-15 14:26 883使用POSIX(Portable Operating Syst ... -
parted操作磁盘
2011-03-12 16:15 807除了fdisk命令,在linux下还有一个功能也非常强大的磁盘 ...
相关推荐
Linux上的DB2内存和文件缓存性能调优Linux上的DB2内存和文件缓存性能调优
1.5.3 缓存资源 1.5.4 如何选择和使用Entity Bean 1.5.5 其他的一些小技巧 第二章 应用服务器调优 2.1 JVM调优 2.1.1 垃圾收集和堆大小 2.1.2 jRockit调优 2.2 Server调优 2.2.1 尽量使用本地I/O库 2.2.2 调整默认...
了解大型服务进化路线,编码技巧,学习Linux,性能调优。Docker/ k8s助力,监控,日志主要技术: SpringBoot + JPA + Antd Mybatis-plus + Antd + Vue3 。项目信息通过下面的链接可快速体验。后台管理模块(toB) ...
Weblogic Portal应用环境调优,本文介绍如下: 一、 修改操作系统文件句柄大小 1 二、 调整JVM启动内存 1 三、 关闭默认搜索引擎 1 四、 数据库连接池调整最佳实践 2 五、 调整TCP接受预备连接数 4 六、 修改日志...
1、服务器参数调优: 网络内核参数调优,文件系统参数调优,I/O调优 2、编译调优 3、配置调优:包括运行模式调优,模块调优 4、使用缓存代理 5、 使用集群方案
内存屏障、内存映射、同步机制、GDB基本功能、CPU缓存、...描述符、虚拟内存机制、RCU机制、ARM架构、高速缓存、页面回收、数据同步、回写机制、页交换、 软硬中断区别、等待队列、字符设备驱动、系统调用、内存碎片。
《Memcached内存分析、调优、集群.pptx》 《NET版分布式缓存Memcached测试实例.docx》 《Memcached管理及_.NET_开发.doc》 《memcached-win32-1.4.4-14.zip》 《安装Memcached及Memcached配置.doc》 《Linux...
由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...
7. 缓存: - Redis - Memcached 8. 消息队列: - RabbitMQ - Kafka 9. 性能优化: - JVM调优 - Tomcat调优 - 数据库调优 10. 安全: - XSS、CSRF、SQL注入等常见安全漏洞 - Spring Security安全...
了解大型服务进化路线,编码技巧,学习Linux,性能调优。Docker / k8s助力,监控,日志主要技术: SpringBoot + JPA + Antd Mybatis-plus + Antd + Vue3 。 项目信息 通过下面的链接可快速体验。 后台管理模块(toB...
TongWeb常见问题处理,用于运维的问题处理,便于解决应用部署时遇到的各种问题
动态调整高速缓存大小、自动生成统计信息、完善的查询优化程序、并行查询处理和实例化视图等功能使 SQL Anywhere 成为那些没有现场数据库管理员的企业的理想之选。通过提供联机分析处理(On-Line Analytical ...
JVM性能调优监控工具 设计模式 消息中间件 RocketMQ 概念 RocketMQ 特性 RocketMQ 集群 RocketMQ 事务 RocketMQ 常见问题 数据库 Redis 基本数据结构 进阶使用 持久化 集群 分布式锁 Client API 常见问题 ZooKeeper ...
偏向锁:sparkles:Java IOJVM垃圾收集CMSG1ZGC元空间字节码操作JVM 调优分布式分布式算法PaxosRaftBFT分布式锁Redis 分布式锁分布式事务MySQL查询语句基本原理innodb 存储引擎:sparkles:缓存Redis底层原理开源框架...
实现数字化运营技术特点: (1)实现单点登录(2)密码加密,HTTPS数据传输加密(3)采用Redis缓存,并逐步定时更新缓存(4)Linux上编写守护进程保持服务端程序运行(5)采用MVC模式,RESTful风格(6)数据库备份,...
曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、...
写一个jdbc的访问oracle的列子.mp4 │ Java面试题34.jdbc中preparedStatement比Statement的好处.mp4 │ Java面试题35.数据库连接池的作用.mp4 │ Java面试题36.HTML.mp4 │ Java面试题37.简单介绍了一下Ajax.mp4 │ ...
本书是为对配置管理Nginx服务器感兴趣的读者准备的,适用于以前没有接触过Nginx,或者对Nginx有一些了解并希望能够进一步深入学习的专业系统工程师、个人网站站长及Linux/Unix从业人员。 作者简介 张宴,就职...
持久层框架技术 ORM概念、Hibernate核心API、Hibernate实体映射技术、Hibernate关系映射技巧、HQL查询、OSCache及Hibernate缓存技术; 掌握JQuery核心API;了解JQuery基本设计原则;了解多种JQuery插件;掌握DWR的...
│ │ JVM调优实战.doc │ │ Tomcat7优化.docx │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 │ 07-使用Jedis连接集群操作.avi │ ...