Я пытаюсь отследить причину узких мест производительности в приложении, которое я отлаживаю под Linux. Различные задействованные процессы, кажется, тратят много времени на блокировку запросов ввода-вывода, и мне интересно, знает ли кто-нибудь какие-нибудь хитрости Linux, которые позволяют вам увидеть, почему конкретный процесс заблокирован/какой ресурс он использует. в ожидании? Есть ли что-нибудь полезное, например, в /proc
?
Как узнать, чего ждет процесс Linux?
Ответы (3)
Каким бы ни был процесс, вы используете top
для проверки состояния. Затем вы можете запустить его через truss или strace. Это должно подробно описать, что происходит. Если это невозможно, подключите его к gdb. Такие инструменты, как iostat, могут показать вам в целом, что происходит (например, если диск является узким местом). .
Вы можете использовать команду strace
, чтобы увидеть, чем занимается ваш процесс. Вам также может быть полезно запустить lsof
в вашем процессе, чтобы увидеть, какие файлы и сокеты он использует.
strace — ваш друг, потому что вы можете узнать время, потраченное на каждый системный вызов, а также выбрать интересующие вас файловые дескрипторы и системные вызовы. Но вы также можете получить поддержку от ядра: взгляните на latencytop