Monitoring
找出 NFSD 程序實際上在做什麼?
當我
top
在我們的一台伺服器上查看時,有很多 nfsd 程序消耗 CPU:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2769 root 20 0 0 0 0 R 20 0.0 2073:14 nfsd 2774 root 20 0 0 0 0 S 19 0.0 2058:44 nfsd 2767 root 20 0 0 0 0 S 18 0.0 2092:54 nfsd 2768 root 20 0 0 0 0 S 18 0.0 2076:56 nfsd 2771 root 20 0 0 0 0 S 17 0.0 2094:25 nfsd 2773 root 20 0 0 0 0 S 14 0.0 2091:34 nfsd 2772 root 20 0 0 0 0 S 14 0.0 2083:43 nfsd 2770 root 20 0 0 0 0 S 12 0.0 2077:59 nfsd
我如何找出這些實際在做什麼?我可以查看每個 PID 正在訪問的文件列表或更多資訊嗎?
我們在
Ubuntu Server 12.04
。我試過
nfsstat
了,但它並沒有給我太多關於實際情況的有用資訊。編輯 - 根據評論/答案嘗試的其他內容:
對每個 PID執行
lsof -p 2774
操作顯示以下內容:COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nfsd 2774 root cwd DIR 8,1 4096 2 / nfsd 2774 root rtd DIR 8,1 4096 2 / nfsd 2774 root txt unknown /proc/2774/exe
這是否意味著沒有文件被訪問?
當我嘗試使用
strace -f -p 2774
它查看程序時,會出現以下錯誤:attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
A
tcpdump | grep nfs
在我們的兩台伺服器之間通過 nfs 顯示大量活動,但據我所知,它們不應該如此。很多條目,例如:13:56:41.120020 IP 192.168.0.20.nfs > 192.168.0.21.729: Flags [.], ack 4282288820, win 32833, options [nop,nop,TS val 627282027 ecr 263985319,nop,nop,sack 3 {4282317780:4282319228}{4282297508:4282298956}{4282290268:4282291716}], len
在這種情況下,我經常發現擷取 NFS 流量非常有用(例如,使用 tcpdump 或 Wireshark)並查看它以查看高負載是否存在特定原因。
例如,您可以使用以下內容:
tcpdump -w filename.cap "port 2049"
僅將 NFS 流量(在埠 2049 上)保存到擷取文件中,然後您可以在 PC 上使用 Wireshark 打開該文件並對其進行更詳細的分析——上次我遇到類似問題時,這是一堆計算工作來自超過磁碟配額的同一使用者,並且客戶端(18 台不同的機器)一遍又一遍地嘗試寫入,從而使舊 NFS 伺服器上的負載變得非常高。