Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

strace - ваш друг, потому что вы можете получить время, потраченное на каждый системный вызов, плюс вы можете выбрать дескрипторы файлов и системный вызов, который вас интересует. Но вы также можете получить поддержку от ядра: посмотрите на latencytop