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

相关推荐
txzrxz2 小时前
c++深度搜索讲解及例题
开发语言·c++·深度搜索·例题讲解
yu85939582 小时前
时延估计的互相关算法(MATLAB实现)
开发语言·算法·matlab
m0_677904842 小时前
K8s学习
java·学习·kubernetes
ou.cs2 小时前
c# SemaphoreSlim保姆级教程
开发语言·网络·c#
|_⊙2 小时前
红黑树 (C++)
开发语言·c++·学习
Fate_I_C3 小时前
Kotlin 内部类和嵌套类
java·开发语言·kotlin
昵称暂无13 小时前
低代码平台深度测评:OutSystems vs Mendix谁更胜一筹
开发语言·低代码
We་ct3 小时前
JS手撕:函数进阶 & 设计模式解析
开发语言·前端·javascript·设计模式·面试·前端框架
宸津-代码粉碎机3 小时前
Spring Boot 4.0 实战技巧全解析
java·大数据·spring boot·后端·python
Makoto_Kimur3 小时前
Java Scanner 的 ACM 常用输入模板
java·数据结构·算法