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

相关推荐
♡喜欢做梦2 分钟前
MyBatis操作数据库(进阶):动态SQL
java·数据库·sql·java-ee·mybatis
lusasky5 分钟前
com.itextpdf堆外内存(Off-Heap Memory)泄露
java
.豆鲨包5 分钟前
【Android】深入理解Window和WindowManager
android·java
Dylan的码园5 分钟前
ArrayList与顺序表
java·数据结构·链表
Boop_wu6 分钟前
[Java EE] 文件操作(系统文件和字节流字符流)
java·java-ee
Aevget6 分钟前
「Java EE开发指南」如何在MyEclipse中开发EJB 2 Session Bean?(二)
java·ide·java-ee·开发工具·myeclipse
带刺的坐椅6 分钟前
Solon AI 开发学习11 - chat - 工具调用与定制(Tool Call)
java·ai·llm·solon
SongYuLong的博客8 分钟前
C++基于jsoncpp开源库json数据操作
开发语言·c++·json
sheji341610 分钟前
【开题答辩全过程】以 基于JavaWeb的高校实验实训教学平台为例,包含答辩的问题和答案
java·spring boot
Predestination王瀞潞11 分钟前
安装了Anaconda在系统终端却无法使用python命令
linux·开发语言·python