JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续

1、先贴出服务最后打印出来的日志,意思就是给虚拟机分配的内存被用完了,没有可用的内存了,服务运行不了了,被动停服了。详细的日志记录在了/home/user/zx/tomcat/apache-tomcat-8.5.82/bin/hs_err_pid147951.log文件里。

bash 复制代码
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fded5df1000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 12288 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/user/zx/tomcat/apache-tomcat-8.5.82/bin/hs_err_pid147951.log

2、找到hs_err_pid147951.log文件打开来看,发现有三万多条阻塞线程(大部分内存溢出问题因该都是线程导致的),这就说明有死循环在不断的生产线程。

3、使用命令ps -ef | grep java找到服务的pid。

4、使用命令top -Hp pid列出线程信息。可以看到线程数一直在增加。

5、找到其中一个,使用jstack pid打开堆栈信息,仔细查看里面的内容就会找到生产线程的地方。

6、找到生产线程的地方将其优化。问题解决。

相关推荐
yyt36304584110 小时前
spring单例bean线程安全问题讨论
java·spring
weixin_6495556710 小时前
C语言程序设计第四版(何钦铭、颜晖)第十一章指针进阶之奇数值结点链表
c语言·开发语言·链表
书到用时方恨少!10 小时前
Python os 模块使用指南:系统交互的瑞士军刀
开发语言·python
我是大猴子10 小时前
事务失效的几种情况以及是为什么(详解)
java·开发语言
武藤一雄11 小时前
C#:nameof 运算符全指南
开发语言·microsoft·c#·.net·.netcore
wertyuytrewm11 小时前
Java面试——Java基础
java·jvm·面试
czlczl2002092511 小时前
RAG实现思路流程
java·jvm
带娃的IT创业者11 小时前
WeClaw_40_系统监控与日志体系:多层次日志架构与Trace追踪
java·开发语言·python·架构·系统监控·日志系统·链路追踪
Y0011123611 小时前
JDBC原理
java·开发语言·数据库·jdbc
程序员侠客行11 小时前
Tomcat 从陌生到熟悉
java·tomcat·web