jvm调优

java.lang.OutOfMemoryError:GC overhead limit exceeded

萝らか妹 提交于 2019-11-27 07:26:05
在调测程序时报 java.lang.OutOfMemoryError:GC overhead limit exceeded 错误 错误原因:在用程序进行数据切割时报了该错误。由于在本地执行数据切割测试的时候,数据量较小,并没有发生异常, 可以正常执行。由于在现网的数据库的数据量较大,在切割一张数据库表数据时,数据量有四千多万条,程序执行的逻辑是 先将其查询出来放入集合当中,然后批量插入,由于数据量太大,new了一个集合容纳不了,就会报内存溢出的错误。在网上 查了以后,列出一下的解决方案: 第一个方法:分批次查询,分批次入库,将集合的数据量固定在一万条左右,每次操作一万条数据,分批次操作 第二个方法:设置虚拟机内存大小,方法如下: 解决办法: 1、增加参数,-XX:-UseGCOverheadLimit 2、增加heap大小 在catalina.bat最前面加入set JAVA_OPTS=-Xms512m -Xmx1024m 解释一下各个参数: -Xms1024M:初始化堆内存大小(注意,不加M的话单位是KB) -Xmx1029M:最大堆内存大小 -XX:PermSize=256M:初始化类加载内存池大小 -XX:MaxPermSize=256M:最大类加载内存池大小 -XX:MaxNewSize=256M:tomcat对自身堆栈的新的最大的分配;当tomcat内存不足时,调用此分配

如何合理的规划一次jvm性能调优

旧巷老猫 提交于 2019-11-27 05:53:49
这是jvm优化系列第三篇: jvm优化——垃圾回收 jvm优化——监控工具 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响。但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松。为了更好的理解本篇所介绍的内容。你需要已经了解和遵循以下内容: 1、已了解jvm 垃圾收集器 2、已了解jvm 性能监控常用工具 3、能够读懂gc日志 4、确信不为了调优而调优,jvm调优不能解决一切性能问题 这些内容在之前的两篇文章已经介绍过了,如果有不了解的可以去点击上述连接进行回顾,如果对这些不了解不建议读本篇文章。 本篇文章基于jvm性能调优,结合jvm的各项参数对应用程序调优,主要内容有以下几个方面: 1、jvm调优的一般流程 2、jvm调优所要关注的几个性能指标 3、jvm调优需要掌握的一些原则 4、调优策略&示例 一、性能调优的层次 为了提升系统性能,我们需要对系统的各个角度和层次来进行优化,以下是需要优化的几个层次。 从上面我们可以看到,除了jvm调优以外,还有其他几个层面需要来处理,所以针对系统的调优不是只有jvm调优一项,而是需要针对系统来整体调优,才能提升系统的性能。本篇只针对jvm调优来讲解,其他几个方面,后续再介绍。 在进行jvm调优之前,我们假设项目的架构调优和代码调优已经进行过或者是针对当前项目是最优的

Java之JVM监控工具分享

我怕爱的太早我们不能终老 提交于 2019-11-26 22:17:57
Java之JVM监控工具分享 JVM的基本知识常用的也就是 类加载机制 , 内存区域、分配、OOM , GC , JVM参数调优 几个链接自己看: 内存区域&类加载机制 分配策略&垃圾回收算法、收集器 今天结合代码讲一讲常用的java自带工具讲解,这些命令一般都是jdk/lib/tools.jar中。用来监控诊断我们的Java环境。 官方说明: https://docs.oracle.com/en/java/javase/11/tools/ 1. jps 显示当前用户的所有java进程的PID 以及主类名 jps : 显示当前用户的所有java进程的PID 以及主类名 jps -v : 打印传递给 Java 虚拟机的参数(如-XX:+UnlockExperimentalVMOptions -XX:+UseZGC) jps -m : 打印传递给主类的参数 jps -l : 打印模块名以及包名 默认开启(UsePerfData),若加上-XX:-UsePerfData 则无法找到进程。 2. jstack 功能 jstack不仅会打印 线程 的栈轨迹、线程状态(BLOCKED)、持有的锁(locked…)以及正在请求的锁(waiting to lock …),而且还会分析出具体的 死锁 。 jstack pid : 查看线程情况 jstack -F pid : 正常输出不被响应时