java 堆内存使用情况_java语言:JVM堆内存使用率持续上升如何排查
最近新版本发布后,在运行一段时间后程序突然无响应了,观察监控,发现JVM堆内存占用在某个时间点突然飙升,最终导致应用无响,希望对大家学习java语言有所帮助。
重启Tomcat后,应用恢复正常,并且后续时间没有发生内存上涨问题。
分析这个JVM内存曲线,他是直线上升的,以前遇到过类似的场景,会导致这种直线(匀速)上升的,一般是一个死循环导致的,如果是普通请求资源泄露的话,上升曲线不会这么平稳,会和请求量有一定的关系。
死循环导致这个线程的资源无法释放,随着循环次数的增多,累积的对象越来越多,最终导致堆内存耗尽。
那要如何定位到具体的死循环位置呢?这个是个难题。之前遇到类似的问题是通过dump生产环境的JVM内存来分析,耗时耗力。结合之前的经验,这次我直接去nginx日志搜索响应码为504的请求,果不其然,在内存飙升时间点附近,有一个被响应504的请求。
504是什么响应码呢?这个响应码比较少遇到,指的是网关超时 (Gateway timeout)。当一个请求到Tomcat后,Tomcat如果陷入死循环,那么这个请求自然无法得到响应,nginx等待响应超时,响应给用户504。
504响应时间点和内存飙升时间点对的上,那么大概率就是这个接口导致的,详细分析这个接口的代码,发现了在特殊参数的情况下,会进入死循环,修改后问题解决。
总结:
观察JVM内存曲线,是否是匀速上升
搜索Nginx响应码为504的日志,查看日志时间是否和内存上升时间点匹配
分析Nginx响应码为504的请求,确认是否存在死循环逻辑
希望这篇文章可以帮助到你,总之同学们,it资讯尽在职坐标。
java 堆内存使用情况_java语言:JVM堆内存使用率持续上升如何排查相关推荐
- java中的vm自变量_java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求 ...
- java 内存情况_java查看jvm内存使用情况
java查看jvm内存使用情况 (2012-03-22 15:50:54) 标签: jvm 内存 虚拟机 分配 it java.lang.Runtime类提供了查看当前JVM内存的使用情况.每个jav ...
- C++中运行一个程序的内存分配情况及qt中的内存管理机制
一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...
- 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)
大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...
- java jvm内存模型_Java(JVM)内存模型– Java中的内存管理
java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...
- java 内存模型面试_Java面试- JVM 内存模型讲解
经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...
- java 获取内存使用情况_Java内存使用情况查看工具
Java通过jvm自己管理内存,同时Java提供了一些命令行工具,用于查看内存使用情况. 这里主要介绍一下jstat.jmap命令以及相关工具. 一.jstat查看 gc实时执行情况 jstat命令命 ...
- java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)
高cpu占用 1.top命令:Linux命令.可以查看实时的CPU使用情况.也可以查看最近一段时间的CPU使用情况. 2.PS命令:Linux命令.强大的进程状态监控命令.可以查看进程以及进程中线程的 ...
- java 全局变量 内存不回收_JAVA知识梳理:内存管理与垃圾回收机制
相对于C,C++来说,java程序员最幸运的事就是不用进行内存控制,很少会出现内存溢出的异常.但是这也不是绝对的,当出现oom的时候,如果不了解虚拟机是如何使用内存的,排查错误将会成为一项艰难的任务. ...
最新文章
- 专注文本处理,达观数据完成B轮融资,累计融资超2亿元
- JavaScript中的递归
- Mysql:is not allowed to connect to this MySQL server
- MongoDB常见面试题及答案模板
- python方差特征选择_使用scikitlearn进行方差分析的特征选择和交叉验证
- 网络行业协会责令十大流氓软件整改(继续踩他们一脚)
- SAP License:SAP系统上线数据导入的几个注意事项
- 单页面路由工程使用微信分享及二次分享解决方案
- linux Sprintf中文乱码,Linux下printf、fprintf、sprintf的区别
- java多线程--容器类和其他工具类
- DBUtil使用步骤
- 等级保护第三级安全扩展要求笔记(2019)
- 抽象类和接口的异同点
- Lua Busted 单元测试简介(Windows 环境)
- 新浪微博模拟登录分析(含验证码)
- Matlab中regress函数各参数解释
- 字体反爬,下载 .woff 文件
- js判断浏览器是否为IE
- XMAN【我真的好菜-同pizza师傅修炼笔记四】hackcon-app.exe
- 强一致性、弱一致性、顺序一致性、最终一致性概述
热门文章
- 在线Excel转SQL工具
- 这里网 唐兴通 讲座,
- 小鼠的活体成像肿瘤模型的建立
- Excel中,多个数值在同一个单元格中,如何运用公式求和?
- 论一个优秀的测试攻城狮的基本素质
- 【DD应用系统 V1.15.12.20230111版本】【软件库系统/应用商场/应用商店】
- 基于Linux系统实现西门子PLC的数据采集
- google的文档在线预览
- React Native错误之 null is not an object (evaluating ‘_RNGestureHandlerModule.default.Direction)-坑
- Javascript--逻辑运算符