zoukankan      html  css  js  c++  java
  • 一次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,其进程的内存资源会快速释放,如下图

  • 相关阅读:
    EF+MVC+Bootstrap 项目实践 Day7
    JS---数组
    OS---华硕笔记本从U盘启动安装系统
    PHP--分页类
    PHP--数据库操作类
    OS---net start mysql 发生系统错误5
    MYSQL---远程连接mysql数据库提示:ERROR 1130的解决办法
    CSS-小谈LV,HA!
    MYSQL---设置存储引擎
    MYSQL---存储引擎
  • 原文地址:https://www.cnblogs.com/itshare/p/9210028.html
Copyright © 2011-2022 走看看