reactjs - Elixir/Erlang : How to find the source of high CPU usage?

标签 reactjs erlang elixir cpu-usage stdio

我的 Elixir 应用程序使用了大约 50% 的 CPU,但它实际上应该只使用 <1%。我试图找出导致 CPU 使用率高的原因,但遇到了一些麻烦。

在远程控制台中,我尝试过

  1. 使用Process.list列出所有进程
  2. 使用Process.info查看进程信息
  3. 按减少数量对流程进行排序
  4. 按消息队列长度对进程进行排序

消息队列都接近于 0,但某些进程的减少计数非常高。具有高还原计数的过程被命名

  1. :file_server_2
  2. ReactPhoenix.ReactIo.Pool
  3. :代码服务器

(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   
========================================================================================

http://erlang.org/doc/man/etop.html

关于reactjs - Elixir/Erlang : How to find the source of high CPU usage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47414994/

相关文章:

javascript - Next.js getServerSideProps 在本地、PR 预览和生产中使用/api

reactjs - redux saga 返回 SagaTestError : put expectation unmet when checking api call

deployment - Elixir:使用 edeliver 构建和部署伞形应用

ffmpeg - Elixir 长时间运行的后台任务无法完成,有时会崩溃

reactjs - 使用异步操作时 React-Redux 组件测试失败

javascript - 如何在Rails路由器之上使用React Router(不使用react-rails gem)?

erlang - 在 Erlang 中显示特定于连接的 cookie

erlang - 基本 Erlang - 守卫等中函数调用的替代方案

ios - MUCLight 离线消息获取 XMPP

functional-programming - 递归和尾调用优化示例