У меня большая многопользовательская система, NFS монтирует большой кусок общего хранилища. Я могу определить источник всего моего сетевого трафика - сузив его до определенного хоста - благодаря nfsstat
.
Однако мне все еще трудно отследить который пользователей делают это - их несколько сотен, и нет ни одного очевидный виновные в списке процессов. (Обычно я начинаю с поиска экземпляров find
)
Но у нас определенно получается 2,5 тыс. Операций ввода-вывода в секунду, и это вызывает проблемы с ресурсами на хосте.
Может ли кто-нибудь предложить мне способы определения виновных процессов / пользователей?
Box - это RedHat Linux, общающийся с файловым агентом NetApp.
Может быть, хороший совет - узнать, сколько открытых файлов NFS у пользователя (со стороны клиента).
я хотел бы использовать lsof -N
. Этот лайнер может вам помочь:
for user in $(who|awk '{print $1}'|sort -n|uniq); do echo $user ; lsof -N -u $user -a |wc -l; done
Предполагая, что действительно есть виновник (один пользователь), ответственный за большую часть 2,5 тыс. Операций ввода-вывода в секунду:
Я бы начал с top
- при этом вы должны увидеть одного или нескольких пользователей и процессов, выделяющихся среди активных процессов на поле, в основном спящих, но довольно часто в состоянии готовности - я бы нажал i
(чтобы скрыть неактивные процессы), затем нажмите и удерживайте пробел для очень быстрого обновления.
Я бы выделил пользователей, которые появляются чаще, и отображал их процессы только в top
для более стабильного просмотра.
Если вы видите много процессов от одного и того же пользователя (например, сложная сборка, выполняемая на NFS) - проверьте дерево процессов для этого пользователя, чтобы подтвердить pstree -ps <user>
. Может быть трудно доказать, что такой сбор процессов является причиной, кроме запуска / остановки его и наблюдения за корреляциями в изменениях активности на стороне netapp.
Если виноват один процесс, я бы ожидал, что он будет постоянно присутствовать в top
вывод. В дополнении к find
Я также ищу:
Но это также может быть что-то совершенно нестандартное, вы не найдете его «по названию».
Также возможно, что скорость является коллективным эффектом такого количества пользователей (хранится ли на сервере NFS их домашние каталоги и / или общие разделы проекта?) - мало что вы можете с этим поделать - может быть, пора расширить хранилище NFS?
Есть отличный инструмент wirehark. В терминальной версии tshark вы можете найти клиент и uid:
$ tshark -i any -Y 'rpc.msgtyp == 0' -f 'port 2049' -Tfields -e frame.time -e ip.src -e nfs.main_opcode -e rpc.auth.uid
Вы получите такой результат:
Jun 23, 2015 11:41:13.306857000 aaa.bbb.ccc.ddd 9 0
с меткой времени, IP клиента, операцией nfs и uid. Соберите данные за несколько минут, а затем вы сможете использовать свои любимые инструменты, чтобы найти лучших пользователей:
$ cat nfs-capture.txt | sort -n -k 7 | uniq -c