node.js記憶體泄露問題記錄

來源:互聯網
上載者:User

標籤:pre   選擇   佔用   step   zip   沒有   壓縮   span   定時器   





先說一下。事情的來龍去脈。


公司開發一款遊戲棋牌遊戲,服務端的開發是IO密集型,開發的時候,考慮過使用python,java,node.js。
終於選擇了node.js(node.js宣傳的殺手功能。非同步IO,node.js另外一個分支叫io.js),事情也就由此而起。


由於第一次做手機遊戲。對移動網路的預計不足。選擇了json作為通訊資料轉送格式。上線後玩家就頻繁掉線(通訊資料量太大,移動網路hold不住),
於是想了一個解決方式,把json資料用zip壓縮一下,事情好像就萬事大吉了(儘管也有不少玩家反應掉線問題,但事情狀況已經好非常多了)。
開始的時候呢。我們的玩家並不多。cpu的使用率並不高。系統一切正常,後來玩家越來越多,就出現了一個問題服務端開發長出現的問題記憶體泄露。
每過幾天后,玩家的記憶體就漲上去了。記憶體泄露對於我們的系統來說,也說不上太嚴重。每過幾天重新啟動一次就能夠了。






step1.開始分析我們的代碼。看那些代碼可能導致記憶體泄露,由於記憶體泄露發生在我們的網關進程中。代碼量是比較少的,
研究了好些時間,期間也懷疑了好多事情,但寫的測試代碼都無法證實。

問題就這麼拖下去了,寫一個定時器指令碼,在某個時刻重新啟動網關進程。


step2.事情就這麼放下,每過一段時間,想起這個問題,又糾結一番。開始做第二個項目了(第二個項目使用mqtt。
以及參照protobuf自己寫的一套編解碼代碼,攻克了json資料太大的問題)。項目並不成功,使用者眼下使用者不多,系統沒有發生記憶體泄露的問題。




step3. 同事突然想起,會不會是由於zip壓縮json資料佔用了cpu,我們設想的業務是IO密集型。如今看來就是CPU密集型了。cpu密集,然後node.j的GC工作出現了問題?。





node.js記憶體泄露問題記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.