JVM 工具

  • jvm 调试工具
    • gc时间查看 jstat -gcutil pid 
    • jvm  堆内存使用情况 
    • jvm线程调试
  • jvm线上部署
    • 响应时间优先:
    • 吞吐量优先
    • 参数配置
  • 参考资料

 

 

jvm 调试工具

  1. gc时间查看 jstat -gcutil pid 

     

     S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    0.00  85.38  39.77  27.86  59.94     83    0.444     4    0.657    1.101

    S0:Heap上的Survivor space 0段 已使用空间的百分比

    S1:Heap上的Survivor space 1段已使用的空间百分比

    E:Heap上Eden space已使用的空间百分比

    O:Heap上的Old space段已使用的空间百分比

    P:Perm space已使用的空间百分比

     

  2. jvm  堆内存使用情况 

    • jmap -live:histo pid  查看jvm中生存的类对象,按照实例数和占用空间大小排序
    • jmap -heap pid 查看jvm 内存占用情况

       

  3. jvm线程调试

 

ps -mp pid -o THREAD,tid,time

nid 转16进制  printf "%x\n" tid

显示jvm每个线程cpu使用率,如果jvm占用cpu过高,据此查看 查出对应的线程ID号。然后根据jstack -F pid 或 jstack pid查看jvm运行的线程,根据thread id找到对应的线程,可以找到占用cpu的代码。

 

jvm线上部署

响应时间优先:

年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:

  1. 并发垃圾收集信息

  2. 持久代并发收集次数

  3. 传统GC信息

  4. 花在年轻代和年老代回收上的时间比例

减少年轻代和年老代花费的时间,一般会提高应用的效率

吞吐量优先

一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。

      参考资料:jvm调优案例及参数详解  

参数配置

  • args="-J-server -Xms10000M -Xmx10000M -Xmn4800M -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:SurvivorRatio=2 -XX:TargetS
    urvivorRatio=50 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSMaxAbortablePrecleanT
    ime=5000 -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djmagick.systemclassloader=false -DXCE_USE_DBCP -DPASSPORT_CREATE_CLUSTER"
    args="-J-server -Xms10000M -Xmx10000M -Xmn4800M -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:SurvivorRatio=2 -XX:TargetS
    urvivorRatio=50 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSMaxAbortablePrecleanT
    ime=5000 -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djmagick.systemclassloader=false -DXCE_USE_DBCP -DPASSPORT_CREATE_CLUSTER"

你可能感兴趣的:(jvm)