Назад | Перейти на главную страницу

Узнать, что на самом деле делают процессы 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 но это не дает мне много полезной информации о том, что на самом деле происходит.

Изменить - Дополнительные материалы, проверенные на основе комментариев / ответов:

Делать lsof -p 2774 на каждом из PID отображается следующее:

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

А 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) в файл захвата, затем вы можете открыть этот файл на ПК с помощью Wireshark и проанализировать его более подробно - в последний раз, когда у меня была похожая проблема, это была куча вычислительных заданий от того же пользователя, у которого превышена дисковая квота, а клиенты (18 разных машин) снова и снова пытались записать, что очень сильно увеличивало нагрузку на старый сервер NFS.

Пара инструментов для вас:

  • lsof показывает вам открытые дескрипторы файлов
  • iotop показывает статистику ввода-вывода по процессам в верхней части
  • nethogs показывает сетевой трафик для каждого процесса
  • strace позволяет вам видеть, что делает процесс

Еще один полезный инструмент - strace - он показывает все системные вызовы (доступ к файлам и т. Д.), Которые выполняет процесс (и его разветвленные потомки). Например:

[корень @ localhost ~] # strace -f -p 2770

(но ожидайте много вывода)