今天我注意到我的服务器变得非常慢。我通过 top 命令检查,结果如下:
top - 21:49:32 up 25 days, 9:13, 1 user, load average: 1238.23, 825.34, 502.3
Tasks: 1815 total, 145 running, 1666 sleeping, 0 stopped, 4 zombie
Cpu(s): 1.3%us, 98.0%sy, 0.0%ni, 0.0%id, 0.4%wa, 0.0%hi, 0.4%si, 0.0%st
Mem: 12290984k total, 12252988k used, 37996k free, 30756k buffers
Swap: 1052248k total, 428116k used, 624132k free, 981528k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3129 root 5 -20 0 0 0 R 77.8 0.0 34:10.25 loop0
2281 nobody 18 0 163m 11m 3128 R 55.6 0.1 0:02.93 httpd
2021 nobody 19 0 162m 11m 3552 R 44.9 0.1 0:03.07 httpd
561 nobody 18 0 163m 11m 3172 R 44.4 0.1 0:02.03 httpd
2085 nobody 17 0 163m 11m 3176 R 41.4 0.1 0:03.22 httpd
1116 nobody 18 0 162m 11m 3168 R 37.2 0.1 0:02.38 httpd
31809 nobody 18 0 163m 12m 3500 R 36.2 0.1 0:02.10 httpd
1906 nobody 17 0 161m 9364 1936 R 35.7 0.1 0:13.15 httpd
31979 nobody 17 0 162m 11m 3404 R 30.7 0.1 0:04.41 httpd
32610 nobody 18 0 161m 9688 2344 R 29.9 0.1 0:11.07 httpd
2326 nobody 17 0 162m 11m 3428 R 28.7 0.1 0:02.18 httpd
565 root 20 -5 0 0 0 R 27.4 0.0 4:29.02 kswapd0
2183 nobody 19 0 162m 11m 3100 R 26.4 0.1 0:02.55 httpd
1998 nobody 17 0 162m 10m 2484 R 24.7 0.1 0:10.76 httpd
28515 nobody 16 0 169m 16m 5416 R 23.4 0.1 0:02.75 httpd
2056 nobody 19 0 166m 14m 5776 R 22.2 0.1 0:02.95 httpd
32379 nobody 16 0 164m 12m 4376 R 20.7 0.1 0:01.52 httpd
我想知道哪里出了问题。我认为这与 /tmp 目录有关
root@server [~]# mount
/dev/sda2 on / type ext3 (rw,usrquota)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/usr/tmpDSK on /tmp type ext3 (rw,noexec,nosuid,loop=/dev/loop0)
/tmp on /var/tmp type none (rw,noexec,nosuid,bind)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
root@server [~]# losetup -a
/dev/loop0: [0802]:103095300 (/usr/tmpDSK)
答案1
输出中的这一行mount
是相关的:
/usr/tmpDSK on /tmp type ext3 (rw,noexec,nosuid,loop=/dev/loop0)
这表明您的/tmp
文件系统正在使用回送挂载,这就是进程loop0
出现的原因。这是一种不寻常的配置,可能不是理想的配置。这确实意味着如果数据尚未在缓存中,则所有访问/tmp
都必须由进程处理。loop0
顶部的输出显示平均负载过高,为 1238.23,但您(仅)有 145 个进程处于运行状态。如果这两个数字稳定,则表明您有超过 1000 个进程被阻塞以等待 I/O。loop0
仅从显示的输出无法确定这些阻塞进程中有多少正在等待执行某些工作。
考虑到已使用内存量很大,而空闲内存、缓冲区和缓存内存量却很少,我断定该系统内存压力很大。令人惊讶的是,它还没有用完所有的交换空间。
我会为该服务器添加更多 RAM。并且我会停止使用 的环回/tmp
。如果由于/
磁盘空间不足而设置了环回设备并且/usr
有空间可以共享,那么有更好的方法来使用 中的部分空间/usr
。/tmp
您可以创建一个/usr/local/tmp
目录并将其绑定挂载到/tmp
。绑定挂载没有需要环回设备的开销。
答案2
您运行的任务数量过多,这不仅仅是环回设备问题。您需要简化设置,以满足您所需的负载。您在 25 天内就有 4 个僵尸进程……这不健康。