У меня есть сценарий bash, который находится в работоспособном состоянии со 100% использованием процессора в пространстве пользователя. Есть ли способ, которым я могу более внимательно изучить причину проблемы, не убивая процесс, например, выполнить трассировку стека?
2 ответа
Посмотрите на ваш процесс с помощью strace
:
strace -p <pid_of_your_process>
Запустите скрипт как sh -x yourscript
. Это напечатает все команды, которые он выполняет, и вы можете увидеть, где он застрял.
Затем вы можете в конечном итоге добавить strace
к команде, которая замедляет процесс проверки его вызовов к системным функциям. Это генерирует множество выходных данных для stderr. Вы можете перенаправить в файл журнала, например, strace yourprogram 2> log
Другая возможность, которая на самом деле включает в себя знание о вызываемых программах, - это подключение к запущенным процессам с использованием gdb
. Вы можете найти, какой процесс занимает 100% top
. Подключиться к запущенной программе с
gdb program 1234 (where 1234 is the `pid` of `program`)