我有一個Elixir/Phoenix在生產中運行,過了一段時間,其中一個beam.smp進程達到100%的CPU負載(有時超過一個進程)。我不知道有任何觸發器造成這種情況。我如何知道發生了什麼?Production Elixir/Phoenix應用程序中的CPU CPU
編輯:
我在服務器上運行iex並連接到鳳凰節點。比我跑ETOP和得到這個輸出:
Load: cpu 100 Memory: total 69429 binary 10568
procs 303 processes 16656 code 20194
runq 1 atom 727 ets 7205
Pid Name or Initial Func Time Reds Memory MsgQ Current Function
----------------------------------------------------------------------------------------
<19947.645.0> cowboy_protocol:init '-'90164000 88736 0 'Elixir.MyApp.Error
<19947.902.0> cowboy_protocol:init '-'88696000 88744 0 'Elixir.MyApp.Error
<19947.242.0> 'Elixir.Redix.Connec '-' 11697 24704 0 gen_server:loop/6
<19947.240.0> Elixir.Exq '-' 10284 24664 0 gen_server:loop/6
<19947.236.0> Elixir.Exq.Redis.Cli '-' 9597 34520 0 gen_server:loop/6
<19947.1695.0> etop_txt:init/1 '-' 6258 230504 0 etop:update/1
<19947.245.0> Elixir.Exq.Scheduler '-' 4831 24664 0 gen_server:loop/6
<19947.241.0> 'Elixir.Redix.Connec '-' 2339 8856 0 gen_server:loop/6
<19947.426.0> Elixir.MyApp.Presen '-' 262 143160 0 gen_server:loop/6
<19947.238.0> Elixir.Exq.Stats '-' 105 42344 0 gen_server:loop/6
========================================================================================
這兩個cowboy_protocol:init
條目引起的問題。但是爲什麼......以及如何停止/防止/調試它?
我找到了原因。我有一個模板,其中有一個帶有url的圖像標籤,不再存在的圖像,我忘了更新標籤。但是這怎麼會導致這樣的事情?! –
它看起來像對不存在的圖像的每個請求都會導致這種情況。這不可能是正常的... –
您是否將etop輸出中列出的功能看作「當前功能」?模塊名稱的開頭以「MyApp」作爲前綴,所以我認爲它是您的代碼。這很可能是發生錯誤的功能。 – michalmuskala