避免FullGC:

  1.通过调整堆中新生代和幸存代大小,避免因为幸存代不足而让Minor GC后的对象进入老年代。每次Minor GC都有对象进入老年代会造成数次MinorGC后FullGC.

  2.减少永久区浪费,JVM进程启动完毕后,永久区变化不大了,这时可以参看Perm是否有剩余空间,节省Perm区的空间分给新生代用。

缩短单次MinorGC所用时间:选择合理的GC算法,并进行GC算法参数调整。比如 低交互性可使用Parallel Scavenge(这种不会尽可能缩短GC时间)

1.tomcat调优

(1) 查看gc统计结果

[hotspot@bogon ~]$ jstat -gcutil  | column -t
S0     S1    E      O      P      YGC  YGCT    FGC  FGCT   GCT
      1.728  62.650

从结果看出,虽然经历了838次MinorGC,但仅发生了1次 FullGC,成功避免了FullGC

(2)查看JVM参数

[hotspot@bogon ~]$ jinfo -flags
Attaching to process ID , please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 23.5-b02

-Djava.util.logging.config.file=/home/hotspot/tomcat7_8082/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms500m -Xmx800m -XX:PermSize=256M -XX:MaxPermSize=300M \
-Djava.endorsed.dirs=/home/hotspot/tomcat7_8082/endorsed -Dcatalina.base=/home/hotspot/tomcat7_8082 -Dcatalina.home=/home/hotspot/tomcat7_8082 -Djava.io.tmpdir=/home/hotspot/tomcat7_8082/temp

2.tomcat调优

[hotspot@bogon ~]$ jinfo -flags
Attaching to process ID , please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 23.5-b02

-Djava.util.logging.config. -XX:MaxGCPauseMillis= -XX:InitiatingHeapOccupancyPercent= -XX:SurvivorRatio= -XX:PermSize=250M -XX:MaxPermSize=400M \
-Djava.rmi.server. -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false \
-Djava.endorsed.dirs=/home/hotspot/tomcat7b/endorsed -Dcatalina.base=/home/hotspot/tomcat7b -Dcatalina.home=/home/hotspot/tomcat7b -Djava.io.tmpdir=/home/hotspot/tomcat7b/temp [hotspot@bogon ~]$ jstat -gcutil 5s S0 S1 E O P YGC YGCT FGC FGCT GCT 0.000 247.260

从jstat的结果看出,FGC没有发生过。

3.ecilpse调优

jdk 1.7.0_17  | win10 64bit | cpu 3.0 | ram 8g | hd 1t

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
#### 该行以下为调优参数 ####
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+DisableExplicitGC -Xmn550m -XX:SurvivorRatio=6 -Xms1024m -Xmx1024m -XX:MaxPermSize=400m -XX:PermSize=300M -XX:MaxTenuringThreshold=12 -Declipse.p2.max.threads=20

-XX:+DisableExplicitGC : 禁止在程序在使用System.gc() 这个方法会引发FullGC,为了让关闭后的窗体不再占用堆内存, eclipse程序中自动调用了System.gc()

-XX:MaxTenuringThreshold=12:让需要进入老年代的对象尽快进入

调优结果:startup:6s loadup:12s openPomXml:3s

JVM 调优总结的更多相关文章

  1. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎 ...

  2. jvm系列(六):jvm调优-从eclipse开始

    jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...

  3. JVM调优总结:调优方法

    JVM调优总结:调优方法 2012-01-10 14:35 和你在一起 和你在一起的博客 字号:T | T 下面文章将讲解JVM的调优工具以及如何去调优等等问题,还有一些异常问题的处理.详细请看下文. ...

  4. [转]JVM调优总结:一些概念

    JVM调优总结:一些概念 原文出处: pengjiaheng 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变 ...

  5. JVM调优-Java垃圾回收之分代回收

    为什么要进行分代回收? JVM使用分代回收测试,是因为:不同的对象,生命周期是不一样的.因此不同生命周期的对象采用不同的收集方式. 可以提高垃圾回收的效率. Java程序运行过程中,会产生大量的对象, ...

  6. JVM调优浅谈

    1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...

  7. [转] JVM 调优系列 & 高并发Java系列

    1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html 2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com ...

  8. JVM调优总结(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  9. JVM调优总结10-调优方法

    JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...

  10. JVM调优总结 + jstat 分析(转)

    [转] JVM调优总结 + jstat 分析 JVM调优总结 + jstat 分析 jstat -gccause pid 1 每格1毫秒输出结果jstat -gccause pid 2000 每格2秒 ...

随机推荐

  1. webpack 多页应用架构系列实战

    阅读目录 1.webpack配置了解 2.webpack CommonsChunkPlugin公共代码剥离 3.了解ProvidePlugin的用途 回到顶部 1.webpack配置了解 webpac ...

  2. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  3. Struts2入门项目开发小步骤

    Step1: Struts2的获取和添加到项目中: 在官方网站:http://struts.apache.org 获取Struts的其中一个版本. 在开发项目之前,需要添加struts2的类库支持,也 ...

  4. 【nodejs】nodejs 的linux安装(转)

    (一) 编译好的文件 简单说就是解压后,在bin文件夹中已经存在node以及npm,如果你进入到对应文件的中执行命令行一点问题都没有,不过不是全局的,所以将这个设置为全局就好了. ./node -v ...

  5. 【CSS】整屏大背景

    1. 利用div的层次,设置底层div充满屏幕,并给div设置背景图 <div id="Layer1" style="position:absolute;top:0 ...

  6. 读Zepto源码之Deferred模块

    Deferred 模块也不是必备的模块,但是 ajax 模块中,要用到 promise 风格,必需引入 Deferred 模块.Deferred 也用到了上一篇文章<读Zepto源码之Callb ...

  7. 如何关闭浏览器的HSTS功能

    在安装配置 SSL 证书时,可以使用一种能使数据传输更加安全的Web安全协议,即在服务器端上开启 HSTS (HTTP Strict Transport Security).它告诉浏览器只能通过HTT ...

  8. CSS3伪类实现动画旋转效果

    一个简单的动画效果demo,keyframes为关键帧,图片贴在代码下方.利用了伪类实现css3动画效果,初学者可以看一下,恩.<!doctype html> <html lang= ...

  9. 经验分享:极速化 CocoaPods

    Cocopods 本身是一个优秀的 iOS 开发的包管理工具,涵盖了 7k+ 的开源组件,包管理库是托管在 Github.由于众所周知的原因它的速度日渐缓慢,有时会频繁报如下错误: 1 2 3 4 $ ...

  10. MySQL中索引的基础知识

    本文是关于MySQL中索引的基础知识.主要讲了索引的意义与原理.创建与删除的操作.并未涉及到索引的数据结构.高性能策略等. 一.概述 1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能. 数 ...