Проблема 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 способом, который отличается от непрерывного вывода других инструментов (например, флаг -ost 10 iostat).

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

3 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам