我的 Elixir 应用程序使用了大约 50% 的 CPU,但它实际上应该只使用 <1%。我试图找出导致 CPU 使用率高的原因,但遇到了一些麻烦。
在远程控制台中,我尝试过
- 使用
Process.list
列出所有进程 - 使用
Process.info
查看进程信息 - 按减少数量对流程进行排序
- 按消息队列长度对进程进行排序
消息队列都接近于 0,但某些进程的减少计数非常高。具有高还原计数的过程被命名
- :file_server_2
- ReactPhoenix.ReactIo.Pool
- :代码服务器
(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 可能会导致资源问题,但我不确定这是否适用于此。无论如何,任何帮助将不胜感激!
最佳答案
您尝试过etop
吗?
iex(2)> :etop.start
========================================================================================
nonode@nohost 14:57:45
Load: cpu 0 Memory: total 26754 binary 143
procs 51 processes 8462 code 7201
runq 0 atom 292 ets 392
Pid Name or Initial Func Time Reds Memory MsgQ Current Function
----------------------------------------------------------------------------------------
<0.6.0> erl_prim_loader '-' 458002 109280 0 erl_prim_loader:loop
<0.38.0> code_server '-' 130576 196984 0 code_server:loop/1
<0.33.0> application_controll '-' 58731 831632 0 gen_server:loop/7
<0.88.0> etop_server '-' 58723 109472 0 etop:data_handler/2
<0.53.0> group:server/3 '-' 19364 2917928 0 group:server_loop/3
<0.61.0> disk_log:init/2 '-' 16246 318352 0 disk_log:loop/1
<0.46.0> file_server_2 '-' 3838 18752 0 gen_server:loop/7
<0.51.0> user_drv '-' 3720 13832 0 user_drv:server_loop
<0.0.0> init '-' 2559 34440 0 init:loop/1
<0.37.0> kernel_sup '-' 2093 58600 0 gen_server:loop/7
========================================================================================
关于reactjs - Elixir/Erlang : How to find the source of high CPU usage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47414994/