我有一个 Ubuntu (12.04) NFS 服务器,即使没有运行任何东西,它的负载也很高(大于 10)。
具体来说,存储由 iSCSI 设备提供,我在该设备上有 5 个逻辑卷 (LVM) 和一些 ext4 分区。即使所有服务都停止,并且没有导出(即没有客户端流量),负载也为 10。运行 iostat 显示始终会写入一个特定的映射设备 (/dev/dm-1)(如果我解释输出)正确):
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 0.00 0.00 0.00 0 0
sdb 342.00 0.00 9.21 0 9
dm-0 0.00 0.00 0.00 0 0
dm-1 615.00 0.00 11.71 0 11
(sdb 是 iSCSI 设备出现的位置,dm-n 是各个逻辑卷)。我实际上已经停止了(几乎)所有其他正在运行的服务,并且我可以很有信心地说,当我启动 NFS 服务器时,负载就会上升,而当我停止它时,负载就会下降。到底是怎么回事?如何查看正在写入磁盘的内容? (我尝试了 lsof 但没有显示任何进程)。
补充内容按要求添加信息。
正常运行时间说:
18:27:15 up 1 day, 9:59, 2 users, load average: 14.22, 12.42, 11.55
虚拟机状态说:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 1 960 865924 51604 23204424 0 0 43 4 7 20 0 2 86 12
统计数据说:
Linux 3.2.0-26-generic-pae (leitrim) 12/25/2012 _i686_ (8 CPU)
06:33:53 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
06:33:53 PM all 0.08 0.04 0.96 11.62 0.00 0.88 0.00 0.00 86.43
dstat -cdD sdb -ng 60 3
----total-cpu-usage---- --dsk/sdb-- -net/total- ---paging--
usr sys idl wai hiq siq| read writ| recv send| in out
0 1 86 12 0 1| 324k 8729k| 0 0 | 1B 8B
0 1 87 12 0 1| 17k 8953k|8064k 9652k| 0 0
0 1 86 12 0 1|1229B 9081k|8010k 9796k| 0 68B
0 1 89 10 0 1|3209B 8364k|7703k 9014k| 0 0
rpc信息
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4 local /run/rpcbind.sock portmapper superuser
100000 3 local /run/rpcbind.sock portmapper superuser
100024 1 udp 0.0.0.0.172.13 status 116
100024 1 tcp 0.0.0.0.229.210 status 116
100024 1 udp6 ::.137.98 status 116
100024 1 tcp6 ::.175.197 status 116
100021 1 udp 0.0.0.0.171.56 nlockmgr superuser
100021 3 udp 0.0.0.0.171.56 nlockmgr superuser
100021 4 udp 0.0.0.0.171.56 nlockmgr superuser
100021 1 tcp 0.0.0.0.153.54 nlockmgr superuser
100021 3 tcp 0.0.0.0.153.54 nlockmgr superuser
100021 4 tcp 0.0.0.0.153.54 nlockmgr superuser
100021 1 udp6 ::.206.206 nlockmgr superuser
100021 3 udp6 ::.206.206 nlockmgr superuser
100021 4 udp6 ::.206.206 nlockmgr superuser
100021 1 tcp6 ::.132.23 nlockmgr superuser
100021 3 tcp6 ::.132.23 nlockmgr superuser
100021 4 tcp6 ::.132.23 nlockmgr superuser
100003 2 tcp 0.0.0.0.8.1 nfs superuser
100003 3 tcp 0.0.0.0.8.1 nfs superuser
100227 2 tcp 0.0.0.0.8.1 - superuser
100227 3 tcp 0.0.0.0.8.1 - superuser
100003 2 udp 0.0.0.0.8.1 nfs superuser
100003 3 udp 0.0.0.0.8.1 nfs superuser
100227 2 udp 0.0.0.0.8.1 - superuser
100227 3 udp 0.0.0.0.8.1 - superuser
100003 2 tcp6 ::.8.1 nfs superuser
100003 3 tcp6 ::.8.1 nfs superuser
100227 2 tcp6 ::.8.1 - superuser
100227 3 tcp6 ::.8.1 - superuser
100003 2 udp6 ::.8.1 nfs superuser
100003 3 udp6 ::.8.1 nfs superuser
100227 2 udp6 ::.8.1 - superuser
100227 3 udp6 ::.8.1 - superuser
100005 1 udp 0.0.0.0.154.132 mountd superuser
100005 1 tcp 0.0.0.0.217.173 mountd superuser
100005 1 udp6 ::.165.76 mountd superuser
100005 1 tcp6 ::.141.19 mountd superuser
100005 2 udp 0.0.0.0.183.55 mountd superuser
100005 2 tcp 0.0.0.0.214.84 mountd superuser
100005 2 udp6 ::.233.222 mountd superuser
100005 2 tcp6 ::.211.16 mountd superuser
100005 3 udp 0.0.0.0.188.56 mountd superuser
100005 3 tcp 0.0.0.0.158.62 mountd superuser
100005 3 udp6 ::.152.158 mountd superuser
100005 3 tcp6 ::.201.200 mountd superuser
答案1
经过更多调查后,我可以至少部分地回答我自己的问题:
- 写入其中一台设备是由 NFS 客户端之一上疯狂运行的进程引起的。我通过一次关闭一个客户端来实现这一目标。最好有一个命令来查看哪个客户端正在写入 NFS 服务器,但如果有的话我找不到它。