9.6. OOM案例汇总
OOM产生的原因多种多样,例如,有些程序未必产生OOM,但是会不断FGC,或是CPU飙高但内存回收特别少。出现OOM的场景进行记录,如下所示:
【案例1】硬件升级系统反而卡顿的问题,如调优实战小节中的调优实战1。
【案例2】线程池不当运用产生OOM问题,如调优实战小节中的调优实战2。
【案例3】jira问题,详细信息见附件。该问题导致的现象是系统出现FGC很频繁,实际系统不断重启。解决方案是更换垃圾回收器G1,换用更大的内存。
【案例4】tomcat中的http问题,详细信息见附件。该问题出现的原因是网管将http-header-size参数设置的过大,导致在连接http时,http对象头就会占用大量的空间,导致空间不足。
【案例5】 lambda表达式导致方法区溢出问题。
【案例6】直接内存溢出问题,该问题很少见,例如《深入理解Java虚拟机》P59,使用Unsafe分配直接内存,或者使用NIO的问题。
【案例7】栈溢出问题,-Xss设定太小。
【案例8】比较一下这两段程序的异同,分析哪一个是更优的写法:
Object o = null;
for(int i