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

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

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

Я хочу узнать следующее:

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

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

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

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

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

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

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

Просто идея, попробуйте прослушать трафик nfs с помощью wirehark. Могу сказать вам, какой пользователь к какому файлу обращался:

tshark -R nfs -i eth0

Проверьте nfsstat. Он не показывает все, что вы хотите, но, по крайней мере, хорошее подмножество.

http://linux.die.net/man/8/nfsstat

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

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

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

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

-отметка

Вы можете попробовать 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.

На данный момент у меня нет лучших ответов, однако вы можете довольно точно отслеживать ввод-вывод диска с помощью

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

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

Затем с

netstat -plaute | grep nfs

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

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

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

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

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

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