当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

JAVA服务器常用JVM性能参数说明

发表于: 2013-09-05   作者:billmingchen   来源:转载   浏览次数:
摘要: -server HotSpot VM 有两个模式 Server Mode 与 Client Mode 简单地说,Client Mode 启动快,Server Mode 整体性能好。它们使用了不同的 JIT 编译器,Server VM 使用的那一个对代码做了更加多的优化。一般来说,像 Tomcat 这样的 Servlet container 需要长时间运行,启动速度相对来说不是那么的敏感,适合运

-server

HotSpot VM 有两个模式 Server Mode 与 Client Mode

简单地说,Client Mode 启动快,Server Mode 整体性能好。它们使用了不同的 JIT 编译器,Server VM 使用的那一个对代码做了更加多的优化。一般来说,像 Tomcat 这样的 Servlet container 需要长时间运行,启动速度相对来说不是那么的敏感,适合运行在 Server VM 里。tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量,而 GUI 程序对启动速度要求比较高,所以使用 Client VM 较好。

如何指定使用哪个 VM 呢?启动的时候指定 -client 或者 -server 参数即可。如果不写参数默认是哪个?官方说法是自动探测 "server class". 该网页介绍,如果当前机器有两个或以上 CPU,并且有2GB以上内存,那么就认为这个机器是 server-class machine, 默认就会运行 Server VM. 

可以在VisualVM里查看java.vm.name属性

java.vm.name=Java HotSpot(TM) 64-Bit Server VM

 

-Dcom.sun.management.jmxremote=true

启动JMX远程监控

 

-Dcom.sun.management.jmxremote.port=9004

JMX远程监控端口

 

-Dcom.sun.management.jmxremote.ssl=false

不需要SSL

 

-Dcom.sun.management.jmxremote.authenticate=false

不需要认证

 

-XX:+UseParNewGC

对年轻代采用多线程并行回收

 

-Dsun.rmi.dgc.client.gcInterval=3600000

RMI客户端GC发生周期的设定

-Dsun.rmi.dgc.server.gcInterval=3600000

 

RMI服务端GC发生周期的设定

 

-XX:+UseTLAB

是否在线程的栈空间内分配对象,如果你的内存较大的话,并且配置了比较大的线程栈空间,则使用这个参数会使得临时&本地对象的申请和释放比较快。

 

-XX:+UseConcMarkSweepGC

使用CMS GC,可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多, 而每次GC耗时仅为几毫秒。

 

-XX:+CMSClassUnloadingEnabled

在使用UseConcMarkSweepGC策略的前提下,对PermGen进行GC

 

-XX:SoftRefLRUPolicyMSPerMB=0

每兆堆空闲空间中SoftReference的存活时间。

 

-XX:+CMSParallelRemarkEnabled

在使用UseParNewGC 的情况下, 尽量减少 mark 的时间

 

 

-XX:+UseCMSCompactAtFullCollection

打开对年老代的压缩。可能会影响性能,但是可以消除碎片(老年代才会有full gc)

 

-XX:+UseFastAccessorMethods

优化原始类型的getter方法性能。

 

-XX:+UseCMSInitiatingOccupancyOnly

指示年老代的使用率在达到初始化设置的比例后,启动CMS策略 GC收集

 

-XX:CMSInitiatingOccupancyFraction=70

年老代初始化的使用率为70%,达到此数值后,启动CMS策略 GC收集

基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed

 

-XX:LargePageSizeInBytes=128M

设置heap内存的内存页大小。大内存分页至于JVM性能的提升是有好处的。

32位机器一般情况,不建议将页size调得太大,4-64M,是可以接受的(默认是4M)。

64位的大内存机器,可以尝试调大。

 

-XX:CMSFullGCsBeforeCompaction=0

由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。指定进行多少次fullGC之后,进行tenured的内存空间压缩,对 0 的理解认为是每次都会。

 

其他参考URL

 

Java HotSpot VM Options

 

Java 6 JVM参数选项大全(中文版)

 

JAVA虚拟机性能参数调优指导书

 

 

 

 

 

 

 

JAVA服务器常用JVM性能参数说明

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1.介绍 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程
http://lavasoft.blog.51cto.com/62575/25492/ http://hi.baidu.com/boyyf/blog/item/b29f1bc24101f
1.介绍 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程
1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可
1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可
1.介绍 打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)
1.介绍 打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)
1.介绍 Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。该命
1.介绍 Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。该命
jconsole是一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号