Эквивалент pstack в эрланге
Когда зависает система erlang, я хочу знать, что система делает в это время. для программы ac / C++ я могу легко запустить pstack. но я не нашел для этого удобного инструмента в эрланге.
так что мой вопрос:
- что такое эквивалент pstack в эрланге?
На самом деле я хочу проверить трассировку стека выполнения следующего процесса.
"/opt/couchbase/lib/erlang/erts-5.10.4.0.0.1/bin/beam.smp -P 327680 -K true - -root /opt/couchbase/lib/erlang -progname erl --... "
и я запустил новую оболочку erlang и запустил webtool и проверил appmon, однако я не могу найти вышеуказанное приложение. что может вызвать это?
Спасибо
1 ответ
Что касается pstack
эквивалент, вы читали Erlang Profiling из официального руководства? Это дает вам много примеров того, как профилировать ваше приложение и найти, где ваш код застрял.
Еще один полезный инструмент observer
он покажет весь рабочий процесс, использование процессора, стек процессов и много дополнительной информации.
Если вы ничего не видите с этими инструментами, вы можете попробовать с отладчиком Erlang.
Теперь, что касается couchbase, если ваше приложение в данный момент запущено, вы можете подключиться к нему с помощью оболочки Erlang и запустить предыдущие указанные команды и приложения.
Я не знаю, используете ли вы couchbase один или с couchdb, но, если вы хотите использовать observer
или другие инструменты из командной строки, вы можете запустить couchdb
с -i
флаг:
# -i use the interactive Erlang shell
couchdb -i
Если ваше приложение запускается удаленно без графического интерфейса, вы можете использовать etop
это альтернатива CLI observer
, Вы также можете сбросить etop
вывод в файл, если вы не хотите запускать его прямо из оболочки Erlang. IHMO, если вы хотите получить больше информации относительно ввода-вывода или отладки, используйте eprof
, fprof
и другие инструменты профилирования с файлом дампа (см. также eep
инструмент профилирования, простой в использовании).
Другой вариант, если вы используете SSH и хотите увидеть observer
окно, вы можете использовать X11Forwarding с ssh: ssh -X $yourserver
или же ssh -Y $yourserver
и просто беги observer:start().
в вашей оболочке Erlang.