Flush-0:n 进程造成严重瓶颈

Flush-0:n 进程造成严重瓶颈

我有一个通过 NFS 共享文件的 LAMP 集群,偶尔当神秘的刷新过程开始出现时,其中一个文件会受到一段时间的困扰。

有人能帮帮我吗?解决此问题的唯一方法是重新启动 - 终止进程只会生成新的进程。

top - 19:43:43 up 104 days,  4:52,  1 user,  load average: 27.15, 56.72, 33.31
Tasks: 301 total,   9 running, 292 sleeping,   0 stopped,   0 zombie
Cpu(s): 15.6%us, 77.0%sy,  0.0%ni,  4.2%id,  2.0%wa,  0.0%hi,  1.2%si,  0.0%st
Mem:   8049708k total,  7060492k used,   989216k free,   157156k buffers
Swap:  4194296k total,   483228k used,  3711068k free,   928768k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                           
840 root      20   0     0    0    0 R 98.0  0.0   6:45.83 flush-0:24                                                                                                        
843 root      20   0     0    0    0 R 97.6  0.0   5:50.32 flush-0:25                                                                                                        
835 root      20   0     0    0    0 R 96.0  0.0   6:42.44 flush-0:22                                                                                                        
836 root      20   0     0    0    0 R 95.0  0.0   6:51.56 flush-0:27                                                                                                        
833 root      20   0     0    0    0 R 94.3  0.0   6:27.21 flush-0:23                                                                                                        
841 root      20   0     0    0    0 R 93.7  0.0   6:46.97 flush-0:26                                                                                                        
2305 apache    20   0  772m  31m  25m S 23.6  0.4   0:07.60 httpd                                                                                                             
2298 apache    20   0  772m  31m  25m S 13.6  0.4   0:08.98 httpd                                                                                                             
26771 apache    20   0  775m  47m  41m S 10.3  0.6   4:07.97 httpd                                                                                                             
2315 apache    20   0  770m  29m  25m S  9.0  0.4   0:07.44 httpd                                                                                                             
24370 memcache  20   0  457m 123m  608 S  8.6  1.6  66:20.28 memcached                                                                                                         
1191 apache    20   0  770m  30m  26m S  8.3  0.4   0:13.54 httpd                                                                                                             
2253 apache    20   0  771m  32m  27m S  8.3  0.4   0:11.75 httpd                                                                                                             
3476 varnish   20   0 52.9g 2.0g  20m S  8.0 25.6   0:15.30 varnishd                                                                                                          
17234 apache    20   0  775m  50m  45m S  7.0  0.6   9:22.09 httpd                                                                                                             
23161 apache    20   0  780m  54m  43m S  7.0  0.7   6:33.40 httpd

谢谢

答案1

您的系统正在承受磁盘写入请求的负荷,并且您的配置“肮脏比率”并不适合您的环境。

您可以为虚拟内存设置两个管理参数:

这些是dirty_background_ratiodirty_ratio位于/proc/sys/vm/

这些参数代表内存的百分比。

如果您设置一个较低的值,dirty_ratio您可能会获得更多的磁盘负载,但会减少用于脏内存管理的 RAM 消耗。

dirty_background_ratio导致系统停止向磁盘写入脏数据的最小剩余内存百分比。这意味着您必须在要写入(刷新过程)的脏块大小和系统在写入过程中停止的最小内存之间找到最佳折衷。

实现良好绩效的关系可以是:

dirty_ratio 90%
dirty_background_ratio 5%

平均比率:

dirty_ratio 40~50%
dirty_background_ratio 10~20%

造成系统不平衡的原因可能有多种,其中最常见的原因是 RAM 不足以管理已安装的内存,其他时候可能仅仅是由于服务器上安装的内存性能下降,原因包括通风不良或进料不正确。

尽管大多数问题都是软件错误,但人们并不知道,这些错误中的许多都是由于与所安装服务相关的硬件配置不当造成的。尤其是在租用机器的情况下。


为了帮助那些不太熟悉 Linux 机器的人,上面提到的参数可以这样替换:

永久模式:(
这两个命令只运行一次,否则用您最喜欢的编辑器编辑此文件)

# echo "vm.dirty_ratio = 40" >> /etc/sysctl.conf
# echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf

时间模式:

# echo "40" > /proc/sys/vm/dirty_ratio
# echo "10" > /proc/sys/vm/dirty_background_ratio

您可以在以下位置找到有关这些设置的更多信息此链接

答案2

我发现以下有类似讨论的链接:

0005972:Top 和 uptime 显示错误的平均负载值 - CentOS Bug Tracker

最后一篇文章中写道:

The high load average issue is resolved in a newer version of the hpvsa driver (1.2.4-7) that is now released by HP. Contact HP Support to obtain a copy of the new driver.

答案3

EnableMMAP Off您的 Apache 配置文件中是否有?

如果您对位于 NFS 挂载文件系统上的文件进行内存映射,而另一台 NFS 客户端计算机上的进程删除或截断该文件,则您的进程在下次尝试访问映射文件内容时可能会出现总线错误。

对于适用这两个因素的安装,您应该使用 EnableMMAP off 来禁用交付文件的内存映射。

我不确定这些是否是症状,但值得一试

答案4

如果你有一个 ext4 文件系统,请检查此错误对 ext4 分区的写入速度很慢 - 信息:任务 flush-253:7:2137 被阻止超过 120 秒。最近的内核已经修复了这个问题RHSA-2011-1530当然,您也可以从 Centos 获得。

相关内容