2017-11-21 11 views
4

My ElixirアプリはCPUの約50%を使用していますが、実際には<%を使用する必要があります。私は何が高いCPU使用率を引き起こしているのか把握しようとしており、何か問題があります。Elixir/Erlang:CPU使用率の高いソースを見つけるにはどうすればよいですか?

は、リモートコンソールでは、私は

  1. Process.info
  2. 削減数によってプロセスをソートして、プロセスの情報を見てみるとProcess.list
  3. ですべてのプロセスを一覧表示しようとしたメッセージキューによってプロセスをソート
  4. 長さ

メッセージキューはすべて0であるが、いくつかのプロセスでは減少カウントが非常に高い。高減速カウントが

  1. 命名されているとプロセス:file_server_2
  2. ReactPhoenix.ReactIo.Pool

code_server(1)及び(3)の両方の私の他のアプリに存在しています、私はそれが(2)でなければならないように感じる。これは私が立ち往生している場所です。さらに進んで、なぜ(2)CPUを多用しているのか理解することができますか?

ReactPhoenixreact-stdioを使用しています。 topを見ると、react-sdtioはリソースを使用しませんが、ビームは使用します。

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 

私はSTDINは、リソースの問題を引き起こす可能性があることをthis StackOverflow postで見たが、それはここに適用されるかどうかはわかりませんよ。とにかく、どんな助けも大歓迎です!

答えて

12

あなたはetopを試しましたか?

iex(2)> :etop.start 

======================================================================================== 
[email protected]                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

+1

私はprod' 'でそれを利用可能にするために何をしますか? 'iex'に接続して':etop.start'を実行すると、 "**(UndefinedFunctionError)function:etop.start/0は未定義です(モジュール:etopは利用できません)"という結果になります。 – mudasobwa

+1

リンク先の文書によれば、 'etop'を接続するノードを指定することができます:' etop -node testnode @ myhost -setcookie MyCookie' – Kernael

+0

@Kernaelこれが私の質問に対する答えだったら、問題は指定通りエラーメッセージ "module' etop' in not available。 "私はノードを指定することが魔法のようにこのモジュールを利用可能にするとは思っていません。 – mudasobwa

関連する問題