2

当 Erlang 系统挂起时,我想知道系统在此期间在做什么。对于 ac/c++ 程序,我可以轻松地运行 pstack,但是我在 Erlang 中没有找到用于此目的的方便工具。

  1. Erlang 中的 pstack 等价物是什么?

  2. 实际上我想检查以下进程的运行堆栈跟踪。

    "/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 但是我找不到上面的应用程序。什么可能导致这种情况?

谢谢

4

1 回答 1

2

关于pstack等价物,您是否阅读过官方指南中的Erlang Profiling ?它为您提供了很多示例,说明如何分析您的应用程序并找到您的代码卡在哪里。

另一个有用的工具是observer它将显示所有工作进程、CPU 使用率、进程堆栈和更多信息。

如果您在这些工具中看不到任何东西,您可以尝试使用Erlang 调试器

现在关于 couchbase,如果您的应用程序当前正在运行,您可以使用Erlang shell连接到它并启动之前引用的命令和应用程序。

我不知道你是单独使用couchbase还是和couchdb一起使用,但是,如果你想observer从命令行使用或其他工具,你可以从couchdbflag-i开始:

# -i use the interactive Erlang shell
couchdb -i

如果您的应用程序在没有 GUI 的情况下远程运行,您可以使用etop,它是observer. etop如果您不想直接从 Erlang shell 运行它,也可以将输出转储到文件中。IHMO,如果您想了解有关 I/O 或调试的更多信息,请使用eprof以及fprof其他带有转储文件的分析工具(另请参阅eep分析工具,易于使用)。

另一种选择是,如果您使用 SSH 并想查看observer窗口,您可以使用X11Forwarding和 ssh:ssh -X $yourserverssh -Y $yourserver简单地observer:start().在您的 Erlang shell 中运行。

于 2016-10-29T18:28:56.000 回答