Как узнать, чего ждет процесс Linux?
-
03-07-2019 - |
Вопрос
Я пытаюсь отследить причину проблем с производительностью в приложении, которое я отлаживаю под Linux.Различные задействованные процессы, кажется, тратят много времени на блокировку запросов ввода-вывода, и мне было интересно, знает ли кто-нибудь какие-нибудь трюки Linux, которые позволяют вам увидеть почему конкретный процесс заблокирован/какой ресурс он ждет?Есть ли что-нибудь полезное в /proc
например?
Решение
Какой бы это ни был процесс, вы используете top
проверить состояние.Тогда вы могли бы запустить его через ферма или страйк.Там должно быть подробно описано, что происходит.Если это невозможно, зацепите это вплоть до БДБ.Такие инструменты, как йостат может показать вам в общих чертах, что происходит (например,если диск является узким местом).
Другие советы
Вы можете использовать strace
команду, чтобы увидеть, что задумал ваш процесс.Возможно, вам также будет полезно запустить lsof
в вашем процессе, чтобы увидеть, какие файлы и сокеты он использует.
strace — ваш друг, потому что вы можете узнать время, потраченное на каждый системный вызов, а также выбрать интересующие вас дескрипторы файлов и системные вызовы.Но вы также можете получить поддержку от ядра:посмотри на латентностьтоп