Java 8內存分析


添加參數啟動java進程:

java -jar -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps demo-0.0.1-SNAPSHOT.jar

java -jar -Xms64m -Xmx64m -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps demo-0.0.1-SNAPSHOT.jar

 

這里使用CMS垃圾收集器, 並在console里打印GC日志:

也可以在啟動參數里加上

-Xloggc:./gclogs

把GC日志輸出到文件里

 

據說各項含義如下:

 

查看gc信息:

jstat -gcutil <pid>1000 100

 目前一切正常

 

用Jmeter進行壓力測試, 上500個用戶, 每個1秒請求一次后, 老生代直接被占滿了:

 

神奇的是這個時候再用瀏覽器訪問我的spring boot 8000的地址, 有時候還是可以打開, 要知道我設置了最大連接數也是200, 而spring boot內置的tomcat默認線程數也是200, 這意味着200個請求進來就可以處理, 多一個都會丟棄.  

 

而設置最大連接數為1000的話, 壓力消失后老生代會穩定在85%左右, 而這些, 是不是就是泄露的內存了? 要不然為什么壓力消失后也很久不恢復?:

最大連接為320時, 老生代占用也很快長滿, 壓力消失后, 穩定在78%左右:

 

可以使用如下語句查看連接情況:

netstat –nat | grep 8083

 

通過如下命令,可以看到該進程內有多少個線程;其中,nlwp含義是number of light-weight process。

ps –o nlwp 27989

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM