Анализ производительности сервера Linux NFS


22

Я хотел бы провести некоторый анализ нашего NFS-сервера, чтобы помочь отследить потенциальные узкие места в наших приложениях. Сервер работает под управлением SUSE Enterprise Linux 10.

Вот что я хочу узнать:

  • Какие файлы доступны для каких клиентов
  • Пропускная способность чтения / записи для каждого клиента
  • Накладные расходы, налагаемые другими вызовами RPC
  • Время, затраченное на ожидание других запросов NFS или дискового ввода-вывода для обслуживания клиента

Я уже знаю о статистике, доступной в, /proc/net/rpc/nfsdи фактически я написал сообщение в блоге, описывающее их подробно. То, что я ищу, - это способ углубиться и помочь понять, какие факторы влияют на производительность, которую видит конкретный клиент. Я хочу проанализировать роль сервера NFS в производительности приложения в нашем кластере, чтобы найти способы его оптимальной оптимизации.


Это похоже на то, для чего был написан системный кран. Документы немного дерьмовые, но я думаю, вы могли бы что-то сделать, чтобы провести такой анализ, используя его. sourceware.org/systemtap/examples/keyword-index.html
Cian,

Ответы:


2

Просто идея, попытаться прослушать трафик NFS с Wireshark. Могу сказать, какой пользователь получил доступ к какому файлу:

tshark -R nfs -i eth0

2

Я должен сказать, что все различные * stat утилиты, доступные одной, nfsstat, безусловно, худший! Это дает вам возможность взглянуть на кучу счетчиков, но это все. Если вы посмотрите на них дважды, вы должны попытаться выяснить, насколько изменился каждый счетчик, и если вы хотите узнать скорость изменения, вам нужно разделить число секунд между выборками. Справедливости ради, nfsstat существует много лет назад, когда все было довольно грубо, и теперь никто не хочет менять формат вывода, потому что он, вероятно, сломает много вещей.

Что касается использования collectl для мониторинга nfs, он обеспечивает вывод nfsstat в гораздо более удобном для чтения формате, но, что еще лучше, вы можете позволить ему работать часами или днями и воспроизводить данные, которые вы собрали в фоновом режиме. Что касается запроса о том, что делают процессы, collectl также может собирать данные о процессах, в том числе о том, сколько операций ввода / вывода выполняет каждый процесс, и даже воспроизводить их, показывая лучших пользователей ввода / вывода. Вы также можете использовать верхнюю функцию в режиме реального времени.

Если вы хотите посмотреть диски, тема тоже может сделать сборщик и отобразить все на скоординированном дисплее.

Проверьте это ... -марка


2

collectl (особенно его подсистема NFS ) - очень полезная утилита, которая может быть полезна для вашего анализа, но не соответствует вашему списку требований. Я не знаю ни о какой утилите Linux, которая делает.

(Пожалуйста, позвольте мне добавить это не по теме примечание: есть программное обеспечение, которое соответствует вашим требованиям: аналитика Sun на основе DTrace (pdf) - но, к сожалению, не доступно в Linux. Вы найдете много замечательных примеров в блоге Брендана Грегга, которые иллюстрируют Возможности этого инструмента.)



1

На мой взгляд, это как раз подчеркивает проблему с сегодняшними инструментами. Здесь мы упомянули как минимум 3, включая nfsstat, iostat и iotop. Затем было упоминание о wirehare и nfsreplay. Это действительно похоже на нормальный способ делать вещи? Если не считать Wireshark с, это отдельная категория, вы бы предпочли 1 инструмент?

Для новичков, хотя я нахожу вывод iostat очень полезным, слишком трудно читать со всеми этими .00 в числах. Collectl сообщает точно такие же данные, но гораздо проще отформатировать на глазах. Вы уже знаете, что я думаю о nfsstat, и так как collectl может воспроизводить любые данные, нет необходимости в утилите 'replay'. Что касается «iotop», то в методе collect также могут отображаться процессы, отсортированные по всем данным, связанным с вводом / выводом.

Так что у вас есть все это вместе с отметками времени. Если вам нужен более тонкий интервал мониторинга, вы всегда можете увеличить частоту дискретизации до 0,1 или 0,5 секунды или что-то еще между ними, хотя вы будете генерировать больше накладных расходов, если будете следить за процессами так быстро, но с любой утилитой мониторинга процессов.

И последний бонус - это все, что вы собираете с коллекцией, которую вы можете загрузить в электронную таблицу и легко составить график ИЛИ использовать кольплот, который входит в коллекционные утилиты.

-отметка


1

Вы можете попробовать nfswatchс http://nfswatch.sourceforge.net

Вы можете увидеть пример выходных данных на http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchвроде как top(хотя я не уверен, есть ли пакетный режим). Как только он запустится, вы можете изменить отображение, нажав клавишу (например, «c» для отображения клиентов NFS, использующих ваш сервер NFS).

В моем кратком тестировании, однако, nfswatchпохоже, не работает с NFSv4.


1
Интересное предложение. На самом деле, сам автор говорит, что NFSv4 не поддерживается, и инструмент не обновлялся около 3 лет. Жаль, что это было бы очень полезно!
Тонин

1

У меня нет лучших ответов на данный момент, однако вы можете довольно точно следить за дисковым вводом-выводом

iostat -mx <delay in sec.> <devices>

Это дает очень полезные цифры, в частности средний размер очереди и время ожидания (в мс) для ваших операций ввода-вывода. Он довольно легко показывает, являются ли ваши диски узким местом, и является ли узким местом количество операций ввода-вывода или пропускная способность.

Затем с

netstat -plaute | grep nfs

Вы увидите клиентские соединения и байты, переданные от каждого клиента в режиме реального времени. цикл на нем для непрерывных данных. Было бы довольно легко сделать скрипт, который будет предоставлять непрерывные данные ... Я работаю над этим :)

Теперь, чтобы получить IO для каждого процесса, вы можете использовать отличный iotop . Тем не менее, вы все равно должны найти способ сопоставить процессы nfsd с клиентами.

Что касается того, какие файлы доступны клиенту, я застрял. На самом деле файлы, которые в настоящее время считываются / записываются с клиента NFS, даже не отображаются в выводе lsof.

Просто чтобы расширить netstat, используйте watch -d, чтобы увидеть, как все меняется и сортируется по хосту.

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

Это лучшее решение, которое я нашел на данный момент, чтобы выяснить, какой хост вызывает трафик в NFS. Затем я могу пойти к клиенту, чтобы узнать, к какому файлу он обращается. Спасибо!
Песчу

0

Вы можете проверить nfsreplay. Это может помочь вам понять, что происходит. Также вы можете найти информацию и ссылки здесь полезными

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.