JVM优化常用命令

14 篇文章 0 订阅
  • jps

列出正在运行的虚拟机进程

jps
  • top

列出线程CPU或内存占用

top
top -Hp pid  //列出pid全部线程
  • jstat

监视虚拟机运行状态信息

jstat -gc pid 5000   //每隔5s打印gc情况
  • jmap
jmap -heap pid   //输出jvm内存情况
jmap -histo:live pid | more  //查看堆内存中的对象数量和大小
jmap -dump:format=b,file=xxx pid  //生成堆存储快照,使用mat等工具分析
  • jstack

生成虚拟机当前时刻的线程快照,帮助定位线程出现长时间停顿的原因

jstack -l 30386 >> /xx/logs/xxx.log   //导出线程情况
jstack pid |grep -A 200 nid   //查询具体线程情况
printf "%x\n" pid   //10进制转16进制
一些JVM参数

4.1.设定堆内存大小

  • -Xms:启动JVM时的堆内存空间。

  • -Xmx:堆内存最大限制。

  • -Xmn:设置年轻代大小整个堆大小=年轻代大小 + 年老代大小 + 持久代大小,Sun官方推荐配置为整个堆的3/8

  • -XX:PermSize=128M设置持久代大小

  • -XX:MaxPermSize=128M设置持久代最大值,此值可以设置与-XX:PermSize相同,防止持久代内存伸缩,持久代设置很重要,一般预留其使用空间的1/3.

4.2.设定新生代大小。

  • -XX:NewRatio:新生代和老年代的占比。

  • -XX:NewSize:新生代空间。

  • -XX:SurvivorRatio:伊甸园空间和幸存者空间的占比。

  • -XX:MaxTenuringThreshold:对象进入老年代的年龄阈值。

4.3.设定垃圾回收器

  • -XX:+UseSerialGC 开启串行收集器

  • -XX:+UseParallelGC开启年轻代并行收集器,JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

  • -XX:+UseParallelOldGC开启老年代并行收集器

  • -XX:+UseConcMarkSweepGC开启老年代并发收集器(简称CMS),可以和UseParallelGC一起使用

  • -XX:CMSInitiatingOccupancyFraction=70老年代内存使用比例到多少激活CMS收集器,这个数值的设置有很大技巧基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn否则会出现“Concurrent Mode Failure”,promotionfailed,官方建议数值为68

  • -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩

4.4.其他

  • -Xss: 设置每个线程的堆栈大小,设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,这个参数对性能的影响比较大的

  • -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论,linux64的java6默认值是15

  • -XX:ParallelGCThreads=设置并行垃圾回收的线程数。此值可以设置与机器处理器数量相等(逻辑cpu数),这个不确定是物理、还是逻辑使用默认就好

  • -XX:MaxGCPauseMillis=指定垃圾回收时的最长暂停时间,单位毫秒,如果指定了此值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值,设定此值可能会减少应用的吞吐量

  • -XX:GCTimeRatio=设定吞吐量为垃圾回收时间与非垃圾回收时间的比值,公式为1/(1+N)。例如,-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收。默认情况为99,即1%的时间用于垃圾回收

  • -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开

  • -XX:+DisableExplicitGC:禁止 java 程序中的 full gc, 如System.gc() 的调用. 最好加上, 防止程序在代码里误用了对性能造成冲击

  • -XX:+PrintGCDetails 打应垃圾收集的情况

  • -XX:+PrintGCTimeStamps 打应垃圾收集的情况

  • -XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用

  • -XX:+PrintGCApplicationStoppedTime 打应垃圾收集时 , 系统的停顿时间

  • -XX:+PrintGC 打印GC情况

  • -XX:PrintHeapAtGC:打印GC前后的详细堆栈信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值