Linux: отслеживание вывода существующего процесса

Обратите внимание, что это на самом деле не плохо, если система выгружает память к подкачке и использует память для буферов вместо этого. Это, вероятно, указывает на две вещи:

  • у Вас действительно есть много под управлением приложений (~500 МБ), которые не используются много
  • Вы используете другие приложения, что чтение-запись много данных, больше, чем 1 ГБ RAM, которую Вы имеете. Система пытается улучшить производительность для этих приложений путем буферизации данных жесткого диска в памяти для более быстрого доступа

Да, может казаться, что у Вас только есть ~600 МБ используемой памяти. То, что заставляет систему подкачивать, вероятно, не чрезмерно память исчерпывающее приложение, а очень ввод-вывод тяжелая еле тянущая рабочая нагрузка. Можно ли определить, какой процесс делает весь ввод-вывод? Для чего Вы используете сервер?

1
09.10.2013, 22:27
2 ответа

Можно использовать эту команду для наблюдения вывода рабочего процесса:

tail -f /proc/$PID/fd/1
3
27.01.2020, 23:29
  • 1
    Это агрегировало весь вывод? Что, если процесс производит в несколько файлов? (интересный, +1) –  SAFX 09.10.2013, 22:32
  • 2
    Это для захвата stdout/stderr только. –  anubhava 09.10.2013, 22:33
  • 3
    Для перенаправления stdout/stderr уже рабочего процесса, см.: serverfault.com/questions/213119 / … –  anubhava 09.10.2013, 22:34
  • 4
    , Это работает, только если вывод перенаправляется в файл. Это не работает, если дескриптор указывает на терминал /dev/pts/4, и я не потрудился звонить tail -f на дескрипторе, который указывает на /dev/null –   09.10.2013, 22:37
  • 5
    Проверьте ссылку, которую я предоставил. Используя gdb можно перенаправить stdout/stderr рабочего процесса к любому другому месту, которое Вы хотите. –  anubhava 09.10.2013, 22:42

Возможно, можно попробовать

lsof | grep $PID

Или

ps aux | grep $PID
0
27.01.2020, 23:29

Теги

Похожие вопросы