Как узнать, что ожидает процесс Linux?

17

Я пытаюсь отследить причину узких мест производительности в приложении, которое я отлаживаю под Linux. Похоже, что различные процессы тратят много времени на блокирование запросов ввода-вывода, и мне было интересно, знают ли кто-нибудь какие-либо хитрости Linux, которые позволяют вам видеть , почему заблокирован определенный процесс / какой ресурс он в ожидании? Есть ли что-нибудь полезное в /proc , например?

    
задан andygeers 29.04.2009 в 11:31
источник

3 ответа

13

Каким бы ни был процесс, вы используете top для проверки состояния. Затем вы можете запустить его через ферму или strace . Это должно детализировать, что происходит. Если это невозможно, подключите it до gdb . Такие инструменты, как iostat , могут показать вам, что происходит (например, если диск является узким местом).

    
ответ дан Till 29.04.2009 в 11:39
8

Вы можете использовать команду strace , чтобы узнать, что делает ваш процесс. Вам также может быть полезно запустить lsof в вашем процессе, чтобы посмотреть, какие файлы и сокеты он использует.     

ответ дан sigjuice 29.04.2009 в 11:39
6

strace - ваш друг, потому что вы можете получить время, потраченное на каждый системный вызов, плюс вы можете выбрать дескрипторы файлов и системный вызов, который вас интересует. Но вы также можете получить поддержку от ядра: посмотрите на < a href="http://www.latencytop.org/"> latencytop

    
ответ дан shodanex 29.04.2009 в 12:06