JVM 内存泄漏
什么是内存泄漏
内存泄漏一般可以理解为系统资源在错误使用的情况下,导致使用完毕的资源无法回收(或没有回收),从而可能导致资源被耗尽引起系统错误。内存泄漏对系统危害比较大,因为他可以直接导致系统的崩溃。
内存泄漏和系统超负荷两者是有区别的,虽然可能导致的最终结果是一样的。
内存泄漏是用完的资源没有回收引起错误,而系统超负荷则是系统确实没有那么多资源可以分配了。
内存泄漏可以通过软件调优解决,单系统超负荷则需要通过更新硬件来解决
内存泄漏的表现
-
内存快被占满,但还没占满,处于临界点,这时候不会有报错,但会影响性能
-
日志里明确产生OOM等提示(可通过tail命令查看catalina.out文件)如下图所示,回落点(我常说是屁股)连起来基本水平说明正常回收,相反则可能是回收不彻底,有风险。
-
常见的内存泄漏1.堆内存泄露发生在堆内存的泄露,查看内存示意图,趋势为上涨;明确发生内存泄漏时日志中可看出报错:信息: Stopping service CatalinaException in thread "main" java.lang.OutOfMemoryError: Java heap space2.持久代内存泄漏(非堆)报错信息:ava.lang.OutOfMemoryError:permGen space参见JVM参数调优之非堆参数,XX:PermSize,XX:MaxPermSize3.栈溢出报错信息:ava.lang.stack over flower error或stack size too small-Xss 线程栈大小,默认值1M,一般不用改。如果要改,建议不要超过2M4.系统内存不足(不属于JVM内存泄漏范畴)报错信息:java.lang.OutOfMemoryError: unable to create new native thread
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗