Ruby作為伺服器端應用已經成熟了
JavaEye網站在過去的Ruby on rails實踐當中,曾經被Ruby的記憶體洩露問題深深的困擾過,並且自己編寫了監控Ruby程式洩露的監控指令碼來解決這個問題。造成Ruby記憶體管理不善的原因主要來自於兩個方面:
一是Ruby GC的實現本身存在很多問題,關於這一點,以前已經多次討論,隨著MBARI記憶體補丁的釋出,已經基本解決。特別是隨著[url=http://www.rubyenterpriseedition.com/]Ruby Enterprise Edition[/url]整合MBARI補丁,以及不斷完善Ruby實現,已經讓Ruby可以作為一個穩定的後臺服務的實現了。
二是一些記憶體處理有問題的Ruby本地擴充套件庫造成的記憶體洩露,這種情況就必須儘量避免使用第三方庫,即使要用,也要保證它的穩定性。比方說JavaEye最早使用RMagic處理圖片,之後改成了mini_magick,JavaEye曾經一直使用hpricot來處理html tag和部落格匯入,也經常造成記憶體洩露,最近把hpricot全部替換成nokogiri以後解決了記憶體洩露。
在這裡特別值得一提的是REE([url=http://www.rubyenterpriseedition.com/]Ruby Enterprise Edition[/url]),隨著REE1.8.7版本釋出,REE不但可以提供ruby穩定的記憶體使用,而且經過GC引數的調整,可以最大化ruby服務端處理效能,非常值得推薦使用。
JavaEye網站在去掉hpricot,使用最新版本REE之後,記憶體洩露問題已經徹底消失。目前JavaEye網站使用的是rails2.3.4版本,fastcgi程式啟動以後使用了230MB記憶體,經過一段時間執行之後,可以穩定在210MB長期執行,效能也相當不俗。
因此現在可以認為,Ruby作為伺服器端應用已經到了成熟期了,完全可以放心在大型應用系統當中使用了,特別是Ruby也可以用來作為一個不需要高效能處理的long-term後臺服務了。
最後簡單說說REE的安裝:
1、下載:http://www.rubyenterpriseedition.com/download.html
2、REE提供了編譯好的二進位制版本,不過我喜歡自己編譯,編譯的步驟可以看文件:[url=http://www.rubyenterpriseedition.com/documentation.html#_manual_installation_for_experts]REE Documentation[/url]
3、編譯和標準Ruby是一樣的,但是REE提供了Google tcmalloc庫,可以提高Ruby分配記憶體的效率,編譯tcmalloc稍稍麻煩一點:
然後檢測一下是否連結了tcmalloc庫:
一是Ruby GC的實現本身存在很多問題,關於這一點,以前已經多次討論,隨著MBARI記憶體補丁的釋出,已經基本解決。特別是隨著[url=http://www.rubyenterpriseedition.com/]Ruby Enterprise Edition[/url]整合MBARI補丁,以及不斷完善Ruby實現,已經讓Ruby可以作為一個穩定的後臺服務的實現了。
二是一些記憶體處理有問題的Ruby本地擴充套件庫造成的記憶體洩露,這種情況就必須儘量避免使用第三方庫,即使要用,也要保證它的穩定性。比方說JavaEye最早使用RMagic處理圖片,之後改成了mini_magick,JavaEye曾經一直使用hpricot來處理html tag和部落格匯入,也經常造成記憶體洩露,最近把hpricot全部替換成nokogiri以後解決了記憶體洩露。
在這裡特別值得一提的是REE([url=http://www.rubyenterpriseedition.com/]Ruby Enterprise Edition[/url]),隨著REE1.8.7版本釋出,REE不但可以提供ruby穩定的記憶體使用,而且經過GC引數的調整,可以最大化ruby服務端處理效能,非常值得推薦使用。
JavaEye網站在去掉hpricot,使用最新版本REE之後,記憶體洩露問題已經徹底消失。目前JavaEye網站使用的是rails2.3.4版本,fastcgi程式啟動以後使用了230MB記憶體,經過一段時間執行之後,可以穩定在210MB長期執行,效能也相當不俗。
因此現在可以認為,Ruby作為伺服器端應用已經到了成熟期了,完全可以放心在大型應用系統當中使用了,特別是Ruby也可以用來作為一個不需要高效能處理的long-term後臺服務了。
最後簡單說說REE的安裝:
1、下載:http://www.rubyenterpriseedition.com/download.html
2、REE提供了編譯好的二進位制版本,不過我喜歡自己編譯,編譯的步驟可以看文件:[url=http://www.rubyenterpriseedition.com/documentation.html#_manual_installation_for_experts]REE Documentation[/url]
3、編譯和標準Ruby是一樣的,但是REE提供了Google tcmalloc庫,可以提高Ruby分配記憶體的效率,編譯tcmalloc稍稍麻煩一點:
cd ruby-enterprise-x.x.x/source/distro/google-perftools-*
./configure --prefix=/usr/local --disable-dependency-tracking
make libtcmalloc_minimal.la
rm -f /usr/local/lib/libtcmalloc_minimal*.so*
cp -Rpf .libs/libtcmalloc_minimal*.so* /usr/local/lib/
編譯ruby的時候修改Makefile檔案,尋找 LIBS,新增$(PRELIBS)
LIBS = $(PRELIBS) -ldl -lcrypt -lm $(EXTLIBS)
make PRELIBS="-Wl,-rpath,/usr/local/lib -L/usr/local/lib -ltcmalloc_minimal"
然後檢測一下是否連結了tcmalloc庫:
ldd ruby
應該可以找到如下資訊:
libtcmalloc_minimal.so.0 => /usr/local/lib/libtcmalloc_minimal.so.0 (0x00002b748b51c000)
相關文章
- 用 Git 作為聊天應用的後端Git後端
- 一週雲事|雲已經成為大部分的關鍵應用程式的基礎
- 為什麼 Flutter 已經為企業應用程式開發做好了準備Flutter
- 你如何看待,“國內ChatGPT還沒成熟,但ChatGPT的付費模式已經成熟了?”ChatGPT模式
- 數字中國已經成為中國數字經濟的時代符號符號
- SOA已進入實施期 管理與應用成為實施重點
- git撤銷已經提交到遠端伺服器的commitGit伺服器MIT
- 電子遊戲已經成為一種新的文學形式遊戲
- 英國衛報:遊戲已經取代音樂成為年輕人文化主流遊戲
- 為什麼我推薦Nginx作為後端伺服器代理Nginx後端伺服器
- RUBY實踐—Ruby Report之Ruport簡單應用
- 中國遊戲發行商,或許已經成為了全球的No.1遊戲
- DataGuard備庫刪除已經應用的日誌
- bootstrap作為mixin庫的應用模式boot模式
- 後端應用分層經驗總結後端
- "Hadoop-as-a-Service"已經成為雲資料分析的主流趨勢Hadoop
- Kafka已經成為一個成熟的ETL CDC資料管道平臺Kafka
- 軟體工程--總作業(已經完成)軟體工程
- win10 安裝程式顯示“為了對電腦進行保護,已經阻止此應用” 管理員已阻止你執行此應用Win10
- Web 應用伺服器端渲染入門指南Web伺服器
- 如何將智慧園區移動應用成為超級應用?
- Android應用總量已經達到70萬款Android
- MapReduce如何作為Yarn應用程式執行?Yarn
- Comscore:社交媒體已經成為亞馬遜Prime Day的重要參與渠道亞馬遜
- Kubernetes 已經成為雲原生時代的安卓,這就夠了嗎?安卓
- 詳解:CoreDNS作為kubernetes後端的DNS伺服器DNS後端伺服器
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- distimo:移動應用經濟遊戲為王遊戲
- 無伺服器會成為企業應用開發的下一個大事情嗎?伺服器
- 配置 IDEA 遠端連線應用伺服器Idea伺服器
- socket.io 客戶端與伺服器應用客戶端伺服器
- Unix伺服器是否已經過時了?伺服器
- Androlib:Android Market已經超過14萬個應用Android
- 虧得起才能賺到錢,網賺遊戲已經成為資本的遊戲遊戲
- Web 應用客戶端渲染和伺服器端渲染的比較Web客戶端伺服器
- ruby on rails 伺服器配置AI伺服器
- eMart:71%的印度網路營銷人員認為移動營銷已經成為業務核心
- Linux作業系統12則經典應用技巧Linux作業系統