我有一个通过 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_ratio
可dirty_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 获得。