1. 程式人生 > >openfire記憶體問題解決方法彙總

openfire記憶體問題解決方法彙總

問題描述:openfire部署到伺服器上啟動後執行正常,使用者連線正常,記憶體佔用幾十兆,但執行十天左右後使用者就再也連不上Openfire了,而此時到工作管理員上檢視,openfire佔用的記憶體已達到280多兆,openfire佔用記憶體一直在增加,等達到極限後就掛了。查找了很多資料,問題定位在記憶體溢位和記憶體洩露,具體解決方案如下:

1、給openfire的JVM分配更多的記憶體空間。

OpenFire的JVM預設情況下使用64M記憶體
這在將OpenFire作為服務執行的情況下肯定不夠用
我們需要修改引數.使其能夠佔用伺服器的更多記憶體資源

Windows:
在openfire的bin目錄下建立openfired.vmoptions(作為應用程式執行)或者openfire-service.vmoptions(作為服務執行)
內容新增
-Xms512m
-Xmx512m

-XX:SurvivorRatio=7

-XX:PermSize=256m

-XX:MaxPermSize=256m

指定了最大記憶體512M,其中永久記憶體256M ,在控制檯中看到openfire可用記憶體確實變大了(記憶體大小可自己根據實際需要進行設定)

Linux:
修改/etc/sysconfig/opfire檔案
去掉註釋
OPENFIRE_OPTS=”-Xmx512m”

2、openfire吃記憶體只吃不吐,最後把自己活活撐死。經過查資料設定了一個引數最後解決:

在openfire的系統屬性裡新增如下引數。

xmpp.pep.enabled = false

這個是關閉openfire的PEP功能,PEP到底是啥功能目前不清楚,以後查到後再補進來。

3、檢查自己寫的openfire外掛或操作資料庫時有沒有及時關閉流或連線,以免造成記憶體溢位(編碼規範)。

目前優化後的效果還在進一步觀察中,本文作為學習筆記記錄一下,後面有需要還會進行相應補充。

以上方案的整理參考以下文章:

openfire問題解決彙總:

------------------------------------------------------------------------------2015-9-7---------------------------------------------------------------------------------------------------

今日個人重大發現:

這幾日一直在解決openfire記憶體溢位問題,上面我提到要主動給openfire分配記憶體空間,我就寫了一個配置檔案openfired.vmoptions,但這個配置檔案只對openfired.exe程序起作用,實際上openfire有兩個程序,另一個就是openfire.exe,也是主程序,他們兩個的區別就是多兩個"d"。今天發現記憶體溢位的竟然是openfire.exe,我就嘗試再寫了一個與openfire.exe對應的配置檔案openfired.vmoptions,結果真的起作用了。

給openfire分配記憶體空間時建立的兩個檔案

效果圖:

如果自身程式程式碼沒問題的話openfire記憶體溢位的問題就可以通過這種方式解決了。不過遇到記憶體溢位問題時還是要仔細檢查自己寫的程式碼是否有問題。希望這篇文章能給遇到相同問題的朋友以參考和幫助,有問題歡迎共同探討。