一次JVM内存调优过程
项目中,有个同事写的JOB,使用到查询数据库大量历史协议数据(大概300W左右),由于对存放数据的list或map没有做“用完即时声明释放”。
导致此Jar部署在windows service后,进程的内存资源一直居高不下,而且多次执行后,JVM内存终于增长超过最大JVM内存设置max=3GB,
从而导致程序报错“内存溢出OutOfMemoryException”提示。
解决思路如下:
1. 修改代码中:大数据的list和map的用完之后,增加声明释放资源代码:list.clear()和list =null;
2. 修改jvm命令:增加jvm管理GC回收策略的参数,如:-Xmx2048m -XX:MaxGCPauseMillis=100 -XX:+UseParallelOldGC -XX:+UseParallelGC
然后,删除之前注册的windows service (寄宿jar的java程序),重新注册和启动jar的windows service服务,测试结果发现:
此JOB的jvm内存使用就会自动在list和map使用完毕之后,快速回收占用的内存资源。
并且不管多次运行JOB,也不会提示内存溢出的异常。
图1:修改前,每次执行完JOB,其进程的内存资源一直没有释放,如下图
略
图2:修改后,每次执行完JOB,其进程的内存资源会快速释放,如下图

一次JVM内存调优过程的更多相关文章
- 我进行jvm内存调优的一些记录
jvm内存调优的一些记录 java内存调优的方法和过程 可以使用 jmap -heap pid号 查看,例如pid是9300,执行的结果可能是这样的. root@ubuntu:~# jmap -hea ...
- JVM内存调优原则及几种JVM内存调优方法
转载,如需帮助,请联系wlgchun@163.com https://blog.csdn.net/LeegooWang/article/details/88696195 如何对JVM进行内存调优? ...
- JVM内存调优
JVM性能调优有很多设置,这个参考JVM参数即可. 主要调优的目的: 控制GC的行为.GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为 控制JVM堆栈大 ...
- 【总结】性能调优:JVM内存调优相关文章
[总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优
- JAVA系列之JVM内存调优
一.前提 JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响.在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解.同时,在 ...
- JVM 内存调优 与 实际案例
堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...
- tomcat jvm 内存调优 适用于 JDK 6 & 7
参考:https://blog.csdn.net/m0_37327416/article/details/76185051 1.jvm内存管理机制: 1)堆(Heap)和非堆(Non-heap)内存 ...
- java_opts 参数与JVM内存调优
Linux修改catalina.sh文件 如: JAVA_OPTS=”-server -Dfile.encoding=UTF-8 -Xms=512m -Xmx1024m -XX:PermSize=12 ...
- tomcat增加内存 JVM内存调优
tomcat总是卡死,查看日志catalina.out 发现疯狂报错 如下,提示内存溢出 java.lang.OutOfMemoryError: Java heap space 此外常见的内存溢出有以 ...
随机推荐
- Android Tab与TabHost
这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项目,注意,不要生成mai ...
- js API列表
// 主要是ES的API和一小部分浏览器的API. // 新加入标准的API有可能是浏览器事实上早已实现的. // ECMAScript目前是每年都会发布新版本(目前已经相对稳定,每年都会又增 ...
- 路飞学城知识点3缓存知识点之一Djang自带的缓存
缓存是暂时把数据放到哪儿的意思,用于提高查询的访问速度用的,mysql等关系型数据库通常用作备份,数据库进行增删改操作一段时间内存同步到缓存(非关系型数据库中) 缓存与内存的区别: 通常把数据放到内存 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)
复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...
- Git访问TFS出现权限不足(Using Personal Access Tokens to access Visual Studio Online)
使用GIT克隆TFS服务器上的代码到本地时出现错误如下: fatal: Authentication failed for 'https://***.visualstudio.com/***Proje ...
- 二、WPF datagrid 行变色
public void Color(){ DataGridRow row1 = (DataGridRow)this.dgSource.ItemContainerGenerator.ContainerF ...
- Linux入门-4 Linux下获取帮助
help MAN INFO doc help <command> -h或<command> --help whatis <cmd> MAN man <comm ...
- Axure RP 8 V1.6 授权码
原文链接:https://blog.csdn.net/love_xiaozhao/article/details/81085500 可使用的: Axure RP 8.1.0.3377—-亲测可用Lic ...
- 运维监控---企业级Zabbix详解_【all】
基础LNMP环境搭建 Linux 下LNMP环境搭建 下载Zabbix 链接:https://pan.baidu.com/s/1n36esVyYAKstwnFopbV2sg 密码:izll 创建zab ...
- Android启动外部应用的方法
1.根据package的名称获取应用的Launch Intent Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage ...