溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題

發(fā)布時(shí)間:2022-01-14 15:23:57 來(lái)源:億速云 閱讀:133 作者:iii 欄目:服務(wù)器

這篇文章主要講解了“如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題”吧!

Ruby語(yǔ)言當(dāng)中最為常見(jiàn)的就是內(nèi)存使用問(wèn)題,這一點(diǎn)在其它基于JVM的語(yǔ)言中亦頗為普遍(是的,Java,說(shuō)的就是你)。事實(shí)上,Ruby的垃圾回收(簡(jiǎn)稱GC)機(jī)制與Java非常接近。如果使用不當(dāng),其會(huì)帶來(lái)巨大的麻煩(正如下圖所示)。在這類情況下,GC會(huì)停止運(yùn)作,同時(shí)消耗服務(wù)器的整體CPU資源,甚至導(dǎo)致服務(wù)器重啟。

如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題

Unicorn與Ruby內(nèi)存泄露導(dǎo)致服務(wù)器宕機(jī)。

如何解決?

一、定期重啟您的Ruby

如果大家使用的是高人氣Unicorn  Web服務(wù)器,那么內(nèi)存問(wèn)題可能會(huì)更加嚴(yán)重——這是因?yàn)閁nicorn采用fork機(jī)制。在fork過(guò)程中,其會(huì)對(duì)全部父內(nèi)存內(nèi)容進(jìn)行復(fù)制(簡(jiǎn)稱CoW)。因此,大家可能需要使用“Unicorn  Worker Killer”  gem以監(jiān)控服務(wù)器并在內(nèi)存達(dá)到新高點(diǎn)或者請(qǐng)求數(shù)量增加至一定水平時(shí)進(jìn)行重啟。由于該gem支持隨機(jī)化,因此服務(wù)器本身很可能并不會(huì)受到影響。

二、安裝此 killer:

如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題

、調(diào)整內(nèi)存

如果大家使用的是Ruby 2.X版本,則可通過(guò)配置Unicorn更好地使用CoW機(jī)制。

config/unicorn.rb

1)worker_processes: 1x 計(jì)算核心

2)timeout: 工作請(qǐng)求超時(shí),應(yīng)設(shè)定在15到30秒?yún)^(qū)間

3)preload_app: 啟用CoW,但要求在fork上管理連接/斷開(kāi)

四)認(rèn)真考慮GC配置

動(dòng)態(tài)語(yǔ)言存在著一定短板,然而正確的設(shè)計(jì)卻能幫助其始終在線且順暢運(yùn)行。

感謝各位的閱讀,以上就是“如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何解決Ruby當(dāng)中常見(jiàn)的內(nèi)存使用問(wèn)題這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI