内存内核参数优化

1、 /proc/sys/vm/dirty_background_ratio

/proc/sys/vm/dirty_background_ratio 参数指定了当文件系统缓存脏数据数量达到了系统内存的百分之多少时就会触发 pdflush/flushkdmflush 等后台回写进程运行,将一定缓存的脏页异步的刷入磁盘。

 

2、 /proc/sys/vm/dirty_ratio

/proc/sys/vm/dirty_ratio参数指定了当前文件系统缓存脏数据数据量达到系统内存的百分之多少时,系统不得不开始处理缓存脏页(因为此时脏数据的数据量以及比较多了,为了避免数据丢失,需要将一定的脏数据刷入磁盘)。如果触发了这个设置,name新的I/O请求将会被阻挡,直到脏数据被写入磁盘。这也是I/O卡顿的原因,也是避免内存中不会被存入过量脏数据的机制。

在参数设置上dirty_ratio 设置的值一定要大于等于 dirty_background_ratio的值。在磁盘写入不是很频繁的场景,适当的增大此值,可以极大的提高文件系统的写性能。但是如果是 持续、恒定的写入场景,应该降低其数值。

 

3、 /proc/sys/vm/dirty_expire_centisecs

 /proc/sys/vm/dirty_expire_centisecs参数表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是(1/100)s。默认值是3000,也就是30s的数据就算旧数据了。对于重载的写操作来说,这个值可以适当缩小,但是如果缩小太多也会导致I/O提高太快,给磁盘造成压力。

 

4、/proc/sys/vm/dirty_writeback_centisecs

/proc/sys/vm/dirty_writeback_centisecs 参数控制内核脏数据刷新进程pdflush的运行间隔。单位是(1/100)s。默认值是500,也就是5s,如果系统是持续的写入动作,那么建议降低数值,这样可以把尖峰的写操作削平成多次写操作;相反,如果系统是短期的尖峰式写操作,并且写入数据不大且内存又比较富裕,那么应该增大此数值

 

5、/proc/sys/vm/vfs_cache_pressure

/proc/sys/vm/vfs_cache_pressure 参数表示内核回收用于directory 和 inode cache 内存的倾向。默认值100 表示 内核将根据pagecache 和swapcache,把directory 和inode cache保持在一个合理的百分比。降低该值100,将导致内核倾向于保留 directory 和inode cache;增加该值,则倾向于回收。此参数一般情况下不需要调整,只有在极端情况下才需要调整。

 

6、/proc/sys/vm/min_free_kbytes

/proc/sys/vm/min_free_kbytes 参数表示强制Linux VM 最低保留多少空闲内存。默认值是90112。

 

7、/proc/sys/vm/nr_pdflush_threads

/proc/sys/vm/nr_pdflush_threads 参数表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内存会自动增加更多的 pdflush进程。

 

8、/proc/sys/vm/overcommit_memory

/proc/sys/vm/overcommit_memory 参数指定了内核针对内存的分配策略,其值可以使0,1,2.其中 0 表示内核将检查是否有足够的可以内存供应应用进程使用;如果有足够的可用内存,内存申请运行;否则内存申请失败,并把错误返回给应用进程。1表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2表示内核允许分配超过所有的物理内存和交换空间总和的内存。

此参数需要根据服务器运行的具体应用来优化。例如,服务器运行的是Redis内存数据库,那么推荐设置为1,如果是web类应用,建议保持默认即可。

 

9、/proc/sys/vm/panic_on_oom

/proc/sys/vm/panic_on_oom参数表示内存不够时 内核是否直接panic。默认值为0,表示当内存耗尽时,内核会触发OOM killer杀掉最耗内存的进程。如果设置为1 表示OOM时系统会panic。

简单介绍一些OOM killer机制。当系统物理内存 和交换空间都被用完时,如果还有进程来申请内存,内核将触发OOM killer。当发生OOM时,系统的行为会冀瑜 cat /proc/sys/vm/panic_on_oom的值决定,这个值为0表示在OOM时系统执行OOM Killer。系统是怎么选择一个进程杀掉呢?选择的标准就是杀掉最少数量的进程,同时释放出最大数量的内存。要达到这个目标,Kernel维护着一份 oom_score数据,它包含各个进程的oom_score。可以在/proc/${pid}/oom_score中查看各个进程的oom_score值(该数值越大越容易被杀掉)。最终的 oom_score值会参照/proc/${pid}/oom_adj 。oom_adj的取值范围是-17~15,-17表示进程在任何时候都不会被kill掉。

 

10 、/proc/sys/vm/swappiness

/proc/sys/vm/swappiness 参数表示使用Swap分区的概率。值为 0 时表示最大程度的使用物理内存。值为100时表示积极使用swap分区。

posted @ 2022-07-26 15:33  小清澈  阅读(660)  评论(0编辑  收藏  举报