标签:lang 泄漏 回收 报错 内存 JVM
什么是内存泄漏
内存泄漏一般可以理解为系统资源在错误使用的情况下,导致使用完毕的资源无法回收(或没有回收),从而可能导致资源被耗尽引起系统错误。内存泄漏对系统危害比较大,因为他可以直接导致系统的崩溃。
内存泄漏和系统超负荷两者是有区别的,虽然可能导致的最终结果是一样的。
内存泄漏是用完的资源没有回收引起错误,而系统超负荷则是系统确实没有那么多资源可以分配了。
内存泄漏可以通过软件调优解决,单系统超负荷则需要通过更新硬件来解决
内存泄漏的表现
-
内存快被占满,但还没占满,处于临界点,这时候不会有报错,但会影响性能
-
日志里明确产生OOM等提示(可通过tail命令查看catalina.out文件)如下图所示,回落点(我常说是屁股)连起来基本水平说明正常回收,相反则可能是回收不彻底,有风险。
-
常见的内存泄漏
1.堆内存泄露
发生在堆内存的泄露,查看内存示意图,趋势为上涨;明确发生内存泄漏时日志中可看出报错:
信息: Stopping service Catalina
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
2.持久代内存泄漏(非堆)
报错信息:ava.lang.OutOfMemoryError:permGen space
参见JVM参数调优之非堆参数,XX:PermSize,XX:MaxPermSize
3.栈溢出
报错信息:ava.lang.stack over flower error
或stack size too small
-Xss 线程栈大小,默认值1M,一般不用改。如果要改,建议不要超过2M
4.系统内存不足(不属于JVM内存泄漏范畴)
报错信息:java.lang.OutOfMemoryError: unable to create new native thread
标签:lang,
泄漏,
回收,
报错,
内存,
JVM
From: https://www.cnblogs.com/xjtest/p/17801636.html