當我用jmeter來測試elasticsearch性能的時候,發生過三種性質的內存溢出。
1. index
由於數據流過大,內存使用超過jmeter默認的上限,就溢出了。
用記事本打開jmeter.bat文件,里面修改如下:
set HEAP=-Xms256m -Xmx4g set NEW=-XX:NewSize=128m -XX:MaxNewSize=1024m set NEW指的是每個線程占用的內存set HEAP指的是累積線程占用的內存 set PERM=-XX:PermSize=1024m -XX:MaxPermSize=1024m
2. bulk
由於我當時一次bulk裝了1000條請求,而且還有變參是從磁盤文件上獲取數據的。這個時候,本地磁盤IOPS過大,成為瓶頸,導致內存持續增大,直至突破上限,內存溢出。
所以我要做的,就是減少IOPS,我就把變參一律改為random生成,不再讀磁盤文件,內存達到一個闕值,便不再增長,問題解決。
3. 還有一種就是jmeter工具本身對內存的占用。監聽器越多,內存開銷越大,因為記錄數據都暫時放在內存中的。故而如果發現內存消耗持續增長,可查看下開了多少監聽器,尤其是結果樹、表格查看結果等消耗內存很大。可考慮關閉一些不必要的,我一般僅僅使用summary report和圖形結果。