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

相关推荐
baidu_34099882几秒前
JavaScript中函数式编程中不可变性与闭包的关联
jvm·数据库·python
SamDeepThinking2 分钟前
学数据结构到底有什么用
java·后端·面试
djjdjdjdjjdj3 分钟前
c++如何利用std--tie实现多个文件属性字段的快速比较排序【详解】
jvm·数据库·python
Xiu Yan9 分钟前
Java 转 C++ 系列:函数模板
java·开发语言·c++
m0_678485459 分钟前
CSS如何使用Less的Merge功能合并多个属性值_通过逗号或空格组织css参数
jvm·数据库·python
2401_8971905510 分钟前
团队版Navicat专属功能:如何共享数据库架构ER模型_核心机制解析
jvm·数据库·python
m0_6403093012 分钟前
如何利用 Block Tree 避免不必要的子组件重渲染?Vue3 编译黑科技
jvm·数据库·python
LiAo_1996_Y15 分钟前
layui table数据表格分页 layui表格如何开启服务端分页
jvm·数据库·python
LiAo_1996_Y16 分钟前
mysql如何获取最后插入的ID_使用LAST_INSERT_ID函数
jvm·数据库·python
justjinji16 分钟前
告别FPM!Swoole如何让PHP性能飙升10倍?
jvm·数据库·python