Я хотел бы провести некоторый анализ нашего сервера 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. Он не показывает все, что вы хотите, но, по крайней мере, хорошее подмножество.
На мой взгляд, это как раз подчеркивает проблему сегодняшних инструментов. Здесь мы упоминаем как минимум 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. Это может помочь вам понять, что происходит. Также вы можете найти информацию и ссылки Вот полезный