内存溢出常见报错原因

StackOverFlowError :方法地柜调用,栈内存溢出。

OutOfMemoryError:Java heap space 大量对象创建撑爆堆区,堆内存溢出。

OutOfMemoryError:GC overhead limit exceeded 大量对象创建爱你且无法回收,GC时间占用超过98%并且回收不到2%的内存,频繁GC且GC无效果。

OutOfMemoryError:Direct buffer memory 使用直接内存不在GC管辖范围,直接内存不够分配程序就会崩溃

OutOfMemoryError:unable to creat new native thread 应用进程创建线程数超过系统承载极限。

linux系统一般默认允许单个进程创建不超过1024个线程。

OutOfMemoryError:Metaspace 大量类被加载,元数据区溢出。

排查思路:

第一步:检查错误日志,查看OutOfMemory错误前是否有其他异常或者错误

第二步:查看服务器内存、程序占用内存情况

第三步:使用内存查看工具动态查看程序内存使用情况

第四步:对代码进行走查和分析,找出可能发生内存溢出的位置,重点排查一下几点:

1、检查对数据库查询中是否有一次获取全部数据的查询。如一次取十万条记录以上到内存,就可能引起内存溢出。

2、检查代码中是否有死循环或者递归调用。

3、检查是否有大循环重复产生新对象实例。

4、检查list、map等集合对象是否有使用完成后,未清除的问题。List MAP等集合对象会始终存有对象的引用,使得这些对象不能被GC回收。

你可能感兴趣的:(java基础,java,jvm,linux)