当一个erlang系统挂起时,我想知道系统在那段时间做了什么。对于c / c ++程序,我可以轻松运行pstack。但是我在erlang中没有为此找到一个方便的工具。
所以我的问题是:
实际上我想检查以下过程的运行堆栈跟踪。
" /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 shell并启动webtool并检查appmon但是我无法找到上述应用程序。可能导致这种情况的原因是什么?
由于
答案 0 :(得分:1)
关于pstack
等效内容,您是否已阅读官方指南中的Erlang Profiling?它为您提供了很多关于如何分析应用程序并找到代码卡在哪里的示例。
另一个有用的工具是observer
,它将显示所有工作流程,CPU使用情况,进程堆栈以及更多信息。
如果您没有看到使用这些工具的任何内容,可以尝试使用Erlang debugger。
现在关于couchbase,如果您的应用程序当前正在运行,您可以使用Erlang shell连接到它并启动之前引用的命令和应用程序。
我不知道您是单独使用couchbase还是使用couchdb,但是,如果您想在命令行中使用observer
或其他工具,则可以couchdb
使用{{} 1}}标志:
-i
如果您的应用程序在没有GUI的情况下远程运行,您可以使用etop
,它是# -i use the interactive Erlang shell
couchdb -i
的CLI替代方案。如果您不想直接从Erlang shell运行它,也可以将observer
输出转储到文件中。 IHMO,如果您想了解有关I / O或调试的更多信息,请使用etop
,eprof
和其他分析工具和转储文件(另请参阅eep
分析工具,易于使用)。< / p>
另一种选择,如果您使用SSH并希望查看fprof
窗口,则可以将X11Forwarding与ssh:observer
或ssh -X $yourserver
一起使用,然后只运行{{1在你的Erlang shell中。