jvm内存增长问题排查简例
jvm内存增长问题排查
排查个jvm 内存占用持续增加的问题,纪录一下,引以为戒。
运维发现应用jvm内存占用在发布后回落,然后持续增高,,dump后分析一下:

占内存的大部分是这种名字相似的bean,哪里会产生这么多相同类产生的bean呢?
应用使用了动态语言groovy,请求走逻辑时,动态拿到脚本执行。
其中核心代码就是groovy脚本转成spring ioc 管理的bean,需要注入依赖其他bean:
public <T> T getScriptedObject(String scriptName, String scriptSource, Class<T> cls) {
if (StringUtils.isEmpty(scriptSource))
throw new RuntimeException("服务脚本" + scriptName + "为空");
GroovyObject goo = null;
Class clz = null;
try {
clz = groovyClassLoader.parseClass(scriptSource);
goo = (GroovyObject) clz.newInstance();
if (null != beanFactory) {
beanFactory.autowireBeanProperties(goo, 1, true);
}
} catch (UnsatisfiedDependencyException ex) {
// ex.printStackTrace();
} catch (Exception ex) {
logger.error("脚本{}异常:{}", scriptName, ex);
throw new RuntimeException(ex);
}
if (cls.isAssignableFrom(goo.getClass())) {
return (T) goo;
} else {
throw new RuntimeException("脚本" + scriptName + "错误");
}
}
这个产生bean的代码一定是多例了:
beanFactory.autowireBeanProperties(goo, 1, true);
果然:
解决方案就是在外层加一个缓存的map,来保证单例,如此就会失去脚本无发布便捷修改逻辑的优势,所以要做一个清除map的功能,可以手动触发,也可以定时触发。
问题解决了,原因就是开发的时候没有很好的理解spring api内部实现。
--------------------------
感谢一路有你~
jvm内存增长问题排查简例的更多相关文章
- jvm内存增长问题排查
jvm内存增长问题排查 排查个jvm 内存占用持续增加的问题,纪录一下,引以为戒. 运维发现应用jvm内存占用在发布后回落,然后持续增高,,dump后分析一下: 占内存的大部分是这种名字相似的bean ...
- jvm 内存溢出问题排查方法
如果你做TCP通讯或者map集合操作,并发处理等功能时,很容易出现 Java 内存溢出的问题.本篇文章,带领大家深入jvm,分析并找出jvm内存溢出的代码. jvm中除了程序计数器,其他的区域都有可能 ...
- JVM - 内存溢出问题排查相关命令jcmd jmap
jcmd http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jcmd.html jcmd-l 列出正在执行的JAVA进程ID ...
- 一次完整的JVM堆外内存泄漏故障排查记录
前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...
- 排查JVM内存泄漏的命令
1. jps 使用 jps -l -m 获取到当前jvm进程的pid,通过上述命令获取到了服务的进程号 jps(JVM Process Status Tool):显示指定系统内所有的HotSpot虚拟 ...
- 【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!
前言 CPU 是时分的,操作系统里面有很多线程,每个线程的运行时间由CPU决定,CPU会分给每一个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,就是100%,我们应该意识到 ...
- 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...
- JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
开心一刻 明明是个小 bug,但就是死活修不好,我特么心态崩了...... 前言 后文会从 Windows.Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前 ...
- 【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大
Arthas是啥 当我们系统遇到JVM或者内存溢出等问题的时候,如何对我们的程序进行有效的监控和排查,就发现了几个比较常用的工具,比如JDK自带的 jconsole.jvisualvm还有一个最好用的 ...
随机推荐
- 十、 持久层框架(MyBatis)
一.基于MyBatis动态SQL语句 1.if标签 实体类Product的字段比较多的时候,为了应付各个字段的查询,那么就需要写多条SQL语句,这样就变得难以维护. 此时,就可以使用MyBatis动态 ...
- java 大数处理
头文件:import java.util.*; import java.math.*; Scanner cin = Scanner (System.in);//读入 while(cin.hasNext ...
- 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...
- Java 类名.class与类名.this 的区别?
“类名.this”的语法在Java语言中叫做“qualified this”.相关规定在这里:Chapter 15. Expressions - Qualified this这个语法的主要用途是:在内 ...
- Flexbox 布局的最简单表单 (转)
作者: 阮一峰 弹性布局(Flexbox)逐渐流行,越来越多人使用,因为它写 CSS 布局真是太方便了. 三年前,我写过 Flexbox 的介绍(上,下),但是有些地方写得不清楚.今天,我看到一篇教程 ...
- python requests 的cookie 操作
结论: 1.requests模块的请求和响应分别有cookie对象. 可以通过此对象设置和获取cookie. 2.通过在requests.get,requests.post等方法请求中传入cookie ...
- el表达式原样输出,不被解析
今天遇到了,在jar包都有的前提下EL表达式原样输出,不被解析,原因是: page指令中确少 isELIgnored="false" 加上就好了 <%@ page langu ...
- Cracking The Coding Interview3.3
//Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in re ...
- error MSB8008: 指定的平台工具集(V120)未安装或无效。
打开项目属性->配置属性->右面,平台工作集,选为v10 如下图
- C++基础知识:动态类型识别
1.动态类型指的是基类指针所指向的对象的实际类型 2.C++中的多态根据实际的对象类型调用对应的虚函数(1)可以在基类中定义虚函数返回具体的类型信息(2)所有的派生类都必须实现类型相关的虚函数(3)每 ...
