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

相关推荐
冰暮流星18 小时前
javascript创建数组的方式
开发语言·javascript·ecmascript
星火开发设计18 小时前
模板特化:为特定类型定制模板实现
java·开发语言·前端·c++·知识
大鹏说大话18 小时前
线上服务重启后无法加载 Nacos 配置?常见原因与排查指南
开发语言
凤年徐18 小时前
优选算法——双指针专题 3.快乐数 4.盛水最多的容器
开发语言·数据结构·c++·算法
阿里嘎多学长18 小时前
2026-02-14 GitHub 热点项目精选
开发语言·程序员·github·代码托管
wzqllwy18 小时前
Java实战-性能
java
csbysj202018 小时前
Scala 文件 I/O
开发语言
古城小栈18 小时前
Rust 中的 内存对齐
开发语言·后端·rust
愿你天黑有灯下雨有伞18 小时前
Java 集合详解:ArrayList、LinkedList、HashMap、TreeMap、HashSet 等核心类对比分析
java·开发语言
知识即是力量ol18 小时前
口语八股——Redis 面试实战指南(二):缓存篇、分布式锁篇
java·redis·缓存·面试·分布式锁·八股