Ruby語言傍邊最為常見的就是內存利用問題,這一點在其它基于JVM的語言中亦頗為普遍(是的,Java,說的就是你)。事實上,,Ruby的垃圾接納(簡稱GC)機制與Java很是靠近。假如利用不妥,其會帶來龐大的貧苦(正如下圖所示)。在這類環(huán)境下,GC會遏制運作,同時耗損處事器的整體CPU資源,甚至導致處事器重啟。
Unicorn與Ruby內存泄露導致處事器宕機。
如何辦理?
一、按期重啟您的Ruby
假如各人利用的是高人氣Unicorn Web處事器,那么內存問題大概會越發(fā)嚴重——這是因為Unicorn回收fork機制。在fork進程中,其會對全部父內存內容舉辦復制(簡稱CoW)。因此,各人大概需要利用“Unicorn Worker Killer” gem以監(jiān)控處事器并在內存到達新高點可能請求數(shù)量增加至必然程度時舉辦重啟。由于該gem支持隨機化,因此處事器自己很大概并不會受到影響。
二、安裝此 killer:
三、調解內存
假如各人利用的是Ruby 2.X版本,則可通過設置Unicorn更好地利用CoW機制。config/unicorn.rb
1)worker_processes: 1x 計較焦點
2)timeout: 事情請求超時,應設定在15到30秒區(qū)間
3)preload_app: 啟用CoW,但要求在fork上打點毗連/斷開
四、當真思量GC設置
總結:動態(tài)語言存在著必然短板,然而正確的設計卻能輔佐其始終在線且順暢運行。