记一次服务器IO过高处理进程51CTO博客 - 凯发娱乐

记一次服务器IO过高处理进程51CTO博客

2019年03月29日15时32分03秒 | 作者: 忆文 | 标签: 进程,处理,内存 | 浏览: 1270

记一次服务器IO过高处理进程

 

 

一、布景

    在一次上线晋级后,发现两台tomcat服务器的IOwait一向超越100ms,顶峰时乃至超越300ms,查看服务器发现CPU负载,内存的运用率都不高。问题或许出现在硬盘读写,而且那块硬盘除了写日志外,没有其他的IO操作。终究发现是运用打印的日志信息太多,导致磁盘IO负载过高。

 

 

二、寻求处理进程

经过查找材料发现,Linux是用pdflush进程把数据从缓存页写入硬盘的,那么经过修正pdflush的一些参数应该能够改进IO负载问题。

 

pdflush的行为受/proc/sys/vm中的参数的操控

pdflush写入硬盘看两个参数:

1 数据在页缓存中是否超出30秒,假如是,标记为脏页缓存,写入磁盘;

2 脏页缓存是否到达作业内存的10%;

 

pdflush的榜首件事是读取

/proc/sys/vm/dirty_expire_centiseconds(default 3000)

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开端考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也便是 30 秒的数据就算旧了,将会改写磁盘。关于特别重载的写操作来说,这个值恰当缩小也是好的,但也不能缩小太多,由于缩小太多也会导致IO进步太快。

当然,假如你的体系内存比较大,而且写入形式是间歇式的,而且每次写入的数据不大(比方几十M),那么这个值仍是大些的好。

 

 

第二件事是判别内存是否到了要写入硬盘的限额,由参数决议:

/proc/sys/vm/dirty_ratio (default 20)

操控文件体系的写缓冲区的巨细,单位是百分比,表明占体系内存的百分比,表明当写缓冲运用到体系内存多少的时分,开端向磁盘写出数据。增大之会运用更多体系内存用于磁盘写缓冲,也能够极大进步体系的写功能。可是,当你需求继续、安稳的写入场合时,应该下降其数值。


/proc/sys/vm/dirty_background_ratio(default 10)

操控文件体系的pdflush进程,在何时改写磁盘。单位是百分比,表明体系内存的百分比,保存过期页缓存(脏页缓存)的最大值。是以MmeFree+Cached-Mapped的值为基准的,当超越最大值则缓存页写入磁盘。pdflush用于将内存中的内容和文件体系进行同步,比方说,当一个文件在内存中进行修正,pdflush担任将它写回硬盘。每逢内存中的废物页(dirty page)超越10%的时分,pdflush就会将这些页面备份回硬盘。增大之会运用更多体系内存用于磁盘写缓冲,也能够极大进步体系的写功能。可是,当你需求继续、安稳的写入场合时,应该下降其数值:


/proc/sys/vm/dirty_writeback_centisecs(default 500)

操控内核的脏数据改写进程pdflush的运转距离。单位是 1/100 秒。缺省数值是500,也便是 5 秒。假如你的体系是继续地写入动作,那么实际上仍是下降这个数值比较好,这样能够把尖峰的写操作削平成屡次写操作。

 

关于有高度写入操作的体系

dirty_background_ratio:         首要调整参数。假如需求把缓存继续的而不是一会儿很多的写入硬盘,下降这个值。

dirty_ratio:    第二调整参数。

 

假如有很多的写操作,为防止I/O的长期等候,能够设置:

$ echo 5 >/proc/sys/vm/dirty_background_ratio
$ echo 10 > /proc/sys/vm/dirty_ratio

 

 

别的文件体系数据缓冲需求频频的内存分配。加大保存内存的值能提高体系速度和安稳。小于8G的内存,保存内存为64M,大于8G的设置为256M

$ echo 65536 >/proc/sys/vm/min_free_kbytes



三、终究处理方案

修正后作用显着的参数:/proc/sys/vm/dirty_expire_centiseconds (default 3000)

 

默许是30秒,时刻有点长,我把它改成10秒

echo 1000 >/proc/sys/vm/dirty_expire_centisecs

 

修正完后,IOwait时刻立马下降,均匀40ms~50ms,是本来的1/3~1/4

困扰已久的IO问题得以处理!

 

以下是我的修正参数完好列表:

echo 5 > /proc/sys/vm/dirty_ratio
echo 2 >/proc/sys/vm/dirty_background_ratio
echo 100 >/proc/sys/vm/dirty_writeback_centisecs
echo 262144 >/proc/sys/vm/min_free_kbytes
echo 1000 >/proc/sys/vm/dirty_expire_centisecs


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章