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

相关推荐
阿蒙Amon几秒前
C#常用类库-详解NModbus4
开发语言·c#
丁劲犇1 分钟前
在Trae Solo模式下用Qt HttpServer和Concurrent升级MCP服务器绘制6G互联网覆盖区域
服务器·开发语言·qt·ai·6g·mcp·trae
Aawy1202 分钟前
C++中的状态模式高级应用
开发语言·c++·算法
笨笨马甲3 分钟前
Qt MODBUS协议
开发语言·qt
LFly_ice4 分钟前
C# Web 开发从入门到实践
开发语言·前端·c#
穗余6 分钟前
java大模型应用开发里的SseEmitter和websocket区别
java·开发语言·人工智能·websocket
好家伙VCC6 分钟前
# 发散创新:用 Rust构建高并发虚拟世界引擎核心模块在当今游戏开发与元宇宙构建中,**虚拟世界的性能瓶颈往往不是图形渲染,而是底
java·开发语言·python·rust·图形渲染
Liu628888 分钟前
C++中的状态模式
开发语言·c++·算法
smchaopiao8 分钟前
使用C语言打印几何图形:从三角形到菱形
c语言·开发语言·算法
爱滑雪的码农9 分钟前
Java基础六:条件语句与switch case
java·开发语言