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、找到生产线程的地方将其优化。问题解决。

相关推荐
凡人的AI工具箱27 分钟前
40分钟学 Go 语言高并发:【实战】并发安全的配置管理器(功能扩展)
开发语言·后端·安全·架构·golang
柯34932 分钟前
GC垃圾回收
java·jvm·垃圾回收
王佑辉35 分钟前
【jvm】执行引擎是做什么
jvm
redemption_21 小时前
SpringMVC-03-HelloSpring
java
vvw&1 小时前
使用同一个链接,如何实现PC打开是web应用,手机打开是一个H5应用
开发语言·前端·javascript·智能手机·面试题·每日一道前端面试题
平头哥在等你1 小时前
C语言简答题答案
java·c语言·jvm
LKID体1 小时前
【python图解】数据结构之字典和集合
java·服务器·前端
黑客Ela2 小时前
网络安全加解密原理
开发语言·php
MATLAB代码顾问2 小时前
MATLAB实现多种群遗传算法(multiple population GA,MPGA)
开发语言·matlab
HUT_Tyne2652 小时前
力扣--LCR 154.复杂链表的复制
java·leetcode·链表