首页 > 技术文章 > JVM调优实战

hongyuansu 2020-10-24 22:53 原文

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工具分析。

            

 

推荐阅读