1.jvm調優分類
1.1JVM預調優:
根據業務場景,注重吞吐量還是注重響應時間;
提升硬件性能,最簡單,但是成本最高。
1.2程序卡頓:
1.3OOM:
2.秒殺場景JVM調優:每秒2000並發量。采用負載均衡,平均每台服務器每秒500並發量。
場景一:大量的請求訪問到服務器,造成JVM的新生代瞬間產生大量對象,占用大量內存,當survivor區域內的對象占到空間的一半兒時,直接將對象放入Old區。
那么許多朝生夕死的對象,就會進入到Old區。Old區進行FullGC時,采用標記整理的方式,比較耗時,所以,大量朝生夕死的對象進來到Old區后,比較耗費性能。
解決方案:增大新生代內存,使Survivor區內存不被占用太滿而導致對象直接進入Old區。這樣,朝生夕死的對象就不會直接進入Old區,這樣就減少了FullGC的次數,提升了
效率。
縮小棧的內存,一般256k就夠。
3.CPU占用過高100%的調優思路:
兩種情況:線程死鎖和GC頻繁。
解決思路;Top命令查看占用CPU高的進程;用jstack輸出線程信息;定位占用CPU高的線程;定位具體代碼;
4.JVM調優實例
場景一:采用jdk線程池,設置了相應參數,但是請求數過多,導致線程池中阻塞隊列中的對象過多,導致內存溢出,報OOM錯誤。報limit exceed錯誤。Old區全是阻塞隊列的對象,但是GC不能將其回收,所以報這個錯誤。
場景二:static變量里,存入了過多的無關對象,造成了內存泄漏,從而發生了OOM。
連接(IO等)未關閉;
5.當已經發生OOM,需要排查時,就要用到dump堆日志文件了。
排查dump日志,用MAT工具。
內存泄漏如何排查:1.采用MAT工具分析。
