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

Проблема с netstat: не удается направить вывод из netstat -c в монтирование nfs

Укороченная версия:

Netstat работает нормально, кроме случаев, когда я перенаправляю вывод в файл в NFS.

не работает: netstat -c > /nfs/mount/file

работает: netstat > /nfs/mount/file

работает: netstat -c

работает: netstat -c > /tmp/file

Симптомы: пустой файл, сообщений об ошибках нет.

Это использует bash в Ubuntu 10.10

Более длинная версия: я работаю над проектом, который требует, чтобы мы собирали статистику iostat и netstat со всех узлов небольшого кластера (~ 32 узла) во время выполнения теста. Мы написали сценарии для запуска экземпляров iostat и netstat с соответствующими флагами на каждом узле, при этом каждый процесс записывает в файл в каталоге, хранящемся в общей папке NFS (каждое имя файла включает имя хоста, с которого было написано).

Скрипты iostat работают нормально, но мы наблюдаем проблему со скриптом netstat.

По какой-то причине, если я запускаю процесс netstat с флагом -c, обозначающим непрерывный вывод каждую секунду, и перенаправляю его в файл в каталоге NFS, создается пустой файл, и в него никогда не записывается никакой вывод.

Если я сделаю то же самое на сервере, который предоставляет хранилище NFS, записывая в тот же каталог (за исключением того, что в данном случае это локальное хранилище), тогда все будет работать нормально. Кроме того, если я пишу в локальную файловую систему на хосте, где возникают проблемы (например, /tmp/foo.txt), тогда все также в порядке.

Также стоит отметить, что если я просто запускаю netstat без флага -c и перенаправляю его в файл, хранящийся в NFS, это тоже работает.

Итак, похоже, есть что-то непонятное с флагом непрерывного вывода netstat, который взаимодействует с NFS способом, который отличается от других инструментов непрерывного вывода (например, флаг iostat "-t 10").

Все хосты в этой настройке работают под управлением ubuntu 10.10.

strace показывает, что мой netstat -c тратит много времени на разрешение имен хостов перед выводом результата - возможно, попробуйте netstat -nc > /nfs/foo или подождите дольше, прежде чем убить его. Я не думаю, что это имеет какое-то отношение к NFS - у меня такая же долгая задержка при перенаправлении на /tmp/foo

Для определенных конфигураций NFS задержка синхронизации может быть довольно большой, и кажется, что netstat не сбрасывает свой вывод после SIGKILL.

Завершение процесса через 15 секунд или около того привело к пустому файлу, как вы описали. Я долго ждал (пошел за кофе), а когда вернулся netstat записал в файл.

Можете ли вы проверить это поведение?

Как насчет этого?

script -f -c "netstat -c" /nfs/mount/file > /dev/null

Я думаю, это может сработать, хотя у меня нет удобного сервера NFS, чтобы это проверить.