共計 849 個字符,預計需要花費 3 分鐘才能閱讀完成。
這篇文章主要講解了“如何解決 Ruby 當中常見的內存使用問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“如何解決 Ruby 當中常見的內存使用問題”吧!
Ruby 語言當中最為常見的就是內存使用問題,這一點在其它基于 JVM 的語言中亦頗為普遍 (是的,Java,說的就是你)。事實上,Ruby 的垃圾回收(簡稱 GC) 機制與 Java 非常接近。如果使用不當,其會帶來巨大的麻煩(正如下圖所示)。在這類情況下,GC 會停止運作,同時消耗服務器的整體 CPU 資源,甚至導致服務器重啟。
Unicorn 與 Ruby 內存泄露導致服務器宕機。
如何解決?
一、定期重啟您的 Ruby
如果大家使用的是高人氣 Unicorn Web 服務器,那么內存問題可能會更加嚴重 mdash; mdash; 這是因為 Unicorn 采用 fork 機制。在 fork 過程中,其會對全部父內存內容進行復制(簡稱 CoW)。因此,大家可能需要使用“Unicorn Worker Killer” gem 以監控服務器并在內存達到新高點或者請求數量增加至一定水平時進行重啟。由于該 gem 支持隨機化,因此服務器本身很可能并不會受到影響。
二、安裝此 killer:
三、調整內存
如果大家使用的是 Ruby 2.X 版本,則可通過配置 Unicorn 更好地使用 CoW 機制。
config/unicorn.rb
1)worker_processes: 1x 計算核心
2)timeout: 工作請求超時,應設定在 15 到 30 秒區間
3)preload_app: 啟用 CoW,但要求在 fork 上管理連接 / 斷開
四)認真考慮 GC 配置
動態語言存在著一定短板,然而正確的設計卻能幫助其始終在線且順暢運行。
感謝各位的閱讀,以上就是“如何解決 Ruby 當中常見的內存使用問題”的內容了,經過本文的學習后,相信大家對如何解決 Ruby 當中常見的內存使用問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!