在遷移JMeter到別的機器上時,運行JMeter(我的版本為JMeter2.13)報錯如下:
java.lang.OutOfMemoryError: PermGen space
先來瞭解下,什麼是PermGen 。***************************
PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存地區,
這塊記憶體主要是被JVM存放Class和Meta資訊的,Class在被Loader時就會被放到PermGen space中,
它和存放類執行個體(Instance)的Heap地區不同,GC(Garbage Collection)不會在主程式運行期對
PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,
這種錯誤常見在web伺服器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超過了jvm預設的大小(4M)那麼就會產生此錯誤資訊了。
解決方案: 手動設定MaxPermSize大小
網上的解決方案,我的問題未解決。**************************************
在JMeter.bat 中修改: set HEAP=-Xms512m -Xmx1024m set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% set TENURING=-XX:MaxTenuringThreshold=2 set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000 set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m 個人修改,問題解決****************************************
我發現自己的JMeter啟動中的perm相關如下:
if %current_minor% LEQ "8" (
rem Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
set PERM=-XX:PermSize=64m -XX:MaxPermSize=128m
)
故推測可能是該設定沒有生效的緣故(畢竟是 在if裡面的設定)
所以,直接在外面加了這句話,然後啟動OK。
set PERM=-XX:PermSize=64m -XX:MaxPermSize=128m