當前位置:編程學習大全網 - 源碼下載 - linux 下怎麽解決red5 的內存溢出

linux 下怎麽解決red5 的內存溢出

Red5作為多媒體的開源的框架,實現了RTMP協議,完成了視頻,音頻和多媒體數據的傳輸和解析,很多的產品都在使用它。我們同樣在用他們的服務,但是遇到壹個內存泄漏的問題,這個內存泄漏是如何發現的呢:

現象:服務器跑了兩天左右,出現了兩種情況 :

1.內存溢出

2.內存沒有溢出,但是提供不了任何服務,服務器不能接收任何request

分析:

1.擴大虛擬機的內存,結果服務器跑長了點時間,照樣內存溢出

2.Dump出Heap快照,並用Eclispse Memory Analyzer進行分析,發現RTMPMinaConnection對象大量存在ConcurrentHashMap對象裏面,為什麽會出現大量的connnection?即使是大量的客戶端請求,為什麽內存沒有釋放?

3.分為三個問題考慮:

1)為什麽會出現大量的connnection?連接從哪裏來的

2)大量的connection為什麽會沒有釋放?

3)為什麽connection達到壹定的數量,服務器即使在內存充裕的情況下,仍然提供不了任何服務?

根據大量的觀測,發現red5 服務器,我們用Haproxy代理了rtmp請求,而HA即使沒有請求的情況下,仍然試圖連接,以探測代理的服務器是否存活,而red5的keepalive時間壹過,會試圖關閉連接,關閉之後,通過查看源代碼發現,connection雖然關閉了,但是沒有從concurrentHashupMap裏面remove掉,而真是這種Ha的不停的通過創建心跳連接來探測red5是否處於活的狀態,而red5關閉連接之後,並沒有從concurrentHashMap裏面移除,從而造成了最終的內存溢出,同時由於沒有移除inactive的連接達到了red5設定的最大的允許的inactivity連接的數量,默認為60000個連接,從而造成我們剛才看到的現象-即使內存充裕的情況下,仍然提供不了任何服務的情況。

查找這個錯誤的過程是痛苦的,甚至沒有壹點頭緒,還好通過大量的測試和源代碼分析,發現了這個問題。我們現在已經升級到red5 0.9.1的版本了,目前情況良好,同時為了確保服務器的穩定性,我們也查閱了相關的源代碼,可以確定0.9.1版本中已經fix了這個問題。相信red5 server在我們的產品上線後會處於非常穩定的狀態。

發現這個問題,壹些工具的使用是關鍵的:

首先,要會分析heap快照,而eclipse memory analyzer確實是很強大的工具。幫我們提供了大量有用的信息。

其次,開源軟件是不可靠的,只有我們對它們的代碼有深入的分析才會得出好的結果。還好,源代碼開放也為我們提供了查找問題來龍去脈的根據。而我們也可以對開源軟件進行優化,在以後的內容裏,我也會記錄我們優化red5 server的整個過程,相信還有很多地方,我們仍然可以優化它。

網上找的~~

  • 上一篇:墻面貼網格布價格廠家推薦以及它的作用介紹
  • 下一篇:源代碼收集的操作
  • copyright 2024編程學習大全網