我的Elixir应用程序使用了大约50%的CPU,但它实际上应该只使用<1%。我试图找出是什么原因导致高CPU使用率,我有一些麻烦。
在一个远程控制台里,我试着
1.列出所有带有Process.list
的进程
1.使用Process.info
查看进程信息
1.按减少计数对进程进行排序
1.按消息队列长度对进程进行排序
消息队列都接近于0,但某些进程的减少计数非常高。具有高约简计数的进程被命名为
1.:file_server_2
- ReactPhoenix.ReactIo.Pool
1.:code_server
(1)和(3)都存在于我的其他应用程序中,所以我觉得一定是(2)。我被困在这里了。我怎样才能更进一步,找出为什么(2)使用了这么多CPU?
我知道ReactPhoenix使用react-stdio。看看top
,react-sdtio不使用任何资源,但beam使用。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 87 53.2 1.2 2822012 99212 ? Sl Nov20 580:03 /app/erts-9.1/bin/beam.smp -Bd -- -root /app -progname app/releases/0.0.1/hello.sh -- -home /root -- -noshell -noshell -noinput -boot /app/
root 13873 0.0 0.0 4460 792 ? Rs 13:54 0:00 /bin/sh -c deps/react_phoenix/node_modules/.bin/react-stdio
字符串
我在this StackOverflow post中看到stdin会导致资源问题,但我不确定这是否适用于这里。无论如何,任何帮助将不胜感激!
2条答案
按热度按时间eulz3vhy1#
你试过
etop
吗?字符串
http://erlang.org/doc/man/etop.html
mzmfm0qo2#
我有机会使用WombatOAM。对我来说,它在寻找瓶颈方面很有用。有一个免费的试用选项可用。希望你走运。
https://www.erlang-solutions.com/capabilities/wombatoam/