最近新版本发布后,在运行一段时间后程序突然无响应了,观察监控,发现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堆内存使用率持续上升如何排查相关推荐

  1. java中的vm自变量_java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求 ...

  2. java 内存情况_java查看jvm内存使用情况

    java查看jvm内存使用情况 (2012-03-22 15:50:54) 标签: jvm 内存 虚拟机 分配 it java.lang.Runtime类提供了查看当前JVM内存的使用情况.每个jav ...

  3. C++中运行一个程序的内存分配情况及qt中的内存管理机制

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...

  4. 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)

    大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...

  5. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  6. java 内存模型面试_Java面试- JVM 内存模型讲解

    经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...

  7. java 获取内存使用情况_Java内存使用情况查看工具

    Java通过jvm自己管理内存,同时Java提供了一些命令行工具,用于查看内存使用情况. 这里主要介绍一下jstat.jmap命令以及相关工具. 一.jstat查看 gc实时执行情况 jstat命令命 ...

  8. java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)

    高cpu占用 1.top命令:Linux命令.可以查看实时的CPU使用情况.也可以查看最近一段时间的CPU使用情况. 2.PS命令:Linux命令.强大的进程状态监控命令.可以查看进程以及进程中线程的 ...

  9. java 全局变量 内存不回收_JAVA知识梳理:内存管理与垃圾回收机制

    相对于C,C++来说,java程序员最幸运的事就是不用进行内存控制,很少会出现内存溢出的异常.但是这也不是绝对的,当出现oom的时候,如果不了解虚拟机是如何使用内存的,排查错误将会成为一项艰难的任务. ...

最新文章

  1. 专注文本处理,达观数据完成B轮融资,累计融资超2亿元
  2. JavaScript中的递归
  3. Mysql:is not allowed to connect to this MySQL server
  4. MongoDB常见面试题及答案模板
  5. python方差特征选择_使用scikitlearn进行方差分析的特征选择和交叉验证
  6. 网络行业协会责令十大流氓软件整改(继续踩他们一脚)
  7. SAP License:SAP系统上线数据导入的几个注意事项
  8. 单页面路由工程使用微信分享及二次分享解决方案
  9. linux Sprintf中文乱码,Linux下printf、fprintf、sprintf的区别
  10. java多线程--容器类和其他工具类
  11. DBUtil使用步骤
  12. 等级保护第三级安全扩展要求笔记(2019)
  13. 抽象类和接口的异同点
  14. Lua Busted 单元测试简介(Windows 环境)
  15. 新浪微博模拟登录分析(含验证码)
  16. Matlab中regress函数各参数解释
  17. 字体反爬,下载 .woff 文件
  18. js判断浏览器是否为IE
  19. XMAN【我真的好菜-同pizza师傅修炼笔记四】hackcon-app.exe
  20. 强一致性、弱一致性、顺序一致性、最终一致性概述

热门文章

  1. 在线Excel转SQL工具
  2. 这里网 唐兴通 讲座,
  3. 小鼠的活体成像肿瘤模型的建立
  4. Excel中,多个数值在同一个单元格中,如何运用公式求和?
  5. 论一个优秀的测试攻城狮的基本素质
  6. 【DD应用系统 V1.15.12.20230111版本】【软件库系统/应用商场/应用商店】
  7. 基于Linux系统实现西门子PLC的数据采集
  8. google的文档在线预览
  9. React Native错误之 null is not an object (evaluating ‘_RNGestureHandlerModule.default.Direction)-坑
  10. Javascript--逻辑运算符