Узнайте то, что на самом деле делают процессы NFSD?

Когда я просматриваю top на одном из наших серверов существует много процессов nfsd, использующих ЦП:

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 на каждом из PIDs показывает следующее:

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
1
задан 19 November 2014 в 16:01
3 ответа

В такой ситуации я часто находил очень полезным захватить трафик NFS (например, с помощью tcpdump или Wireshark) и взглянуть на него, чтобы увидеть, есть ли конкретная причина для высокого load.

Например, вы можете использовать что-то вроде:

tcpdump -w filename.cap "port 2049"

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

2
ответ дан 3 December 2019 в 17:43

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

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

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

[root @ localhost ~] # strace -f -p 2770

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

0
ответ дан 3 December 2019 в 17:43

Теги

Похожие вопросы