Flush-0:n 进程导致大量瓶颈

Tom*_*Tom 8 performance nfs centos io bottleneck

我有一个 LAMP 集群,它通过 NFS 共享文件,当神秘的刷新进程开始出现时,其中一个偶尔会被攻击一段时间。

谁能帮我?解决这个问题的唯一方法是重新启动 - 杀死进程只会产生新的进程。

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
Run Code Online (Sandbox Code Playgroud)

谢谢

RTO*_*kit 9

您的系统因磁盘写入请求而过载,并且您的配置“脏比率”不是您环境的最佳选择。

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

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

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

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

dirty_background_ratio是百分比微小残留存储器,这引起在从系统中的磁盘写脏数据的停止。这意味着您必须在要写入的脏块维度(刷新过程)和系统将在写入过程中停止的最小内存之间找到最佳折衷方案。

良好表现的关系可能是:

dirty_ratio 90%
dirty_background_ratio 5%
Run Code Online (Sandbox Code Playgroud)

平均比率:

dirty_ratio 40~50%
dirty_background_ratio 10~20%
Run Code Online (Sandbox Code Playgroud)

系统中出现这种不平衡的原因可能有多种,其中最常见的原因是 RAM 量不足,无法在其他时间管理已安装的内存,这可能仅仅是由于服务器上安装的内存性能下降,其原因范围从差通风不正确的喂养。

尽管大多数问题都以软件错误的形式出现,但其中许多错误是由于与安装的服务相关的硬件配置不当造成的。特别是在租用机器的情况下。


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

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

# echo "vm.dirty_ratio = 40" >> /etc/sysctl.conf
# echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

临时模式:

# echo "40" > /proc/sys/vm/dirty_ratio
# echo "10" > /proc/sys/vm/dirty_background_ratio
Run Code Online (Sandbox Code Playgroud)

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