Проблема 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
выписал в файл.
Можете ли вы проверить это поведение?