zoukankan      html  css  js  c++  java
  • 虚拟机性能监控与故障处理工具

    JDK 监控和故障处理工具总结

    1. HotSpot虚拟机的垃圾收集器(图中两个收集器之间有连线,说明它们可以配合使用)

    HotSpot

    • Serial收集器:新生代收集器,使用停止复制算法,使用一个线程进行GC,串行,其它工作线程暂停。使用-XX:+UseSerialGC可以使用Serial+Serial Old模式运行进行内存回收(这也是虚拟机在Client模式下运行的默认值)
    • ParNew收集器:新生代收集器,使用停止复制算法,Serial收集器的多线程版,用多个线程进行GC,并行,其它工作线程暂停,关注缩短垃圾收集时间。使用-XX:+UseParNewGC开关来控制使用ParNew+Serial Old收集器组合收集内存;使用-XX:ParallelGCThreads来设置执行内存回收的线程数。
    • Parallel Scavenge 收集器:新生代收集器,使用停止复制算法,关注CPU吞吐量,即运行用户代码的时间/总时间,比如:JVM运行100分钟,其中运行用户代码99分钟,垃 圾收集1分钟,则吞吐量是99%,这种收集器能最高效率的利用CPU,适合运行后台运算(关注缩短垃圾收集时间的收集器,如CMS,等待时间很少,所以适 合用户交互,提高用户体验)。使用-XX:+UseParallelGC开关控制使用Parallel Scavenge+Serial Old收集器组合回收垃圾(这也是在Server模式下的默认值);使用-XX:GCTimeRatio来设置用户执行时间占总时间的比例,默认99,即1%的时间用来进行垃圾回收。使用-XX:MaxGCPauseMillis设置GC的最大停顿时间(这个参数只对Parallel Scavenge有效),用开关参数-XX:+UseAdaptiveSizePolicy可以进行动态控制,如自动调整Eden/Survivor比例,老年代对象年龄,新生代大小等,这个参数在ParNew下没有。
    • Serial Old收集器:老年代收集器,单线程收集器,串行,使用标记整理(整理的方法是Sweep(清理)和Compact(压缩),清理是将废弃的对象干掉,只留幸存的对象,压缩是将移动对象,将空间填满保证内存分为2块,一块全是对象,一块空闲)算法,使用单线程进行GC,其它工作线程暂停(注意,在老年代中进行标记整理算法清理,也需要暂停其它线程),在JDK1.5之前,Serial Old收集器与ParallelScavenge搭配使用。
    • Parallel Old收集器:老年代收集器,多线程,并行,多线程机制与Parallel Scavenge差不错,使用标记整理(与Serial Old不同,这里的整理是Summary(汇总)和Compact(压缩),汇总的意思就是将幸存的对象复制到预先准备好的区域,而不是像Sweep(清理)那样清理废弃的对象)算法,在Parallel Old执行时,仍然需要暂停其它线程。Parallel Old在多核计算中很有用。Parallel Old出现后(JDK 1.6),与Parallel Scavenge配合有很好的效果,充分体现Parallel Scavenge收集器吞吐量优先的效果。使用-XX:+UseParallelOldGC开关控制使用Parallel Scavenge +Parallel Old组合收集器进行收集。
    • CMS(Concurrent Mark Sweep)收集器:老年代收集器,致力于获取最短回收停顿时间(即缩短垃圾回收的时间),使用标记清除算法,多线程,优点是并发收集(用户线程可以和GC线程同时工作),停顿小。使用-XX:+UseConcMarkSweepGC进行ParNew+CMS+Serial Old进行内存回收,优先使用ParNew+CMS(原因见后面),当用户线程内存不足时,采用备用方案Serial Old收集。

      整个过程分为4个步骤:

      • 初始标记(CMS initial mark)-------> need "Stop The World"
      • 并发标记(CMS concurrent mark)
      • 重新标记(CMS remark)------->need "Stop The World"
      • 并发清除(CMS concurrent sweep)
    • G1(Garbage-First)是一款面向服务端应用的垃圾收集器。

      整个过程分为4个步骤:

      • 初始标记(Initial marking)
      • 并发标记(Concurrent marking)
      • 最终标记(Final marking)
      • 筛选回收(Live Data Counting and Evacuation)
    并发(Concurrent)并行(Parallel)的区别:
    1.并发是指用户线程与GC线程同时执行(不一定是并行,可能交替,但总体上是在同时执行的),不需要停顿用户线程(其实在CMS中用户线程还是需要停顿的,只是非常短,GC线程在另一个CPU上执行)
    2.并行收集是指多个GC线程并行工作,但此时用户线程是暂停的
    所以,Serial是串行的,Parallel收集器是并行的,而CMS收集器是并发的.

    2.JDK的命令行工具

      1. jps:虚拟机进程状况工具
        JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
        命令格式:
        jps [options] [hostid]
      2. jstat:虚拟机统计信息监视工具
        JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各个方面的运行数据
        命令格式:
        jstat [ options vmid [interval [s|ms] [count]] ]
      3. jinfo:Java配置信息工具
        Configuration Info for Java,显示虚拟机配置信息
        命令格式:
        jinfo [ options] pid
      4. jmap:Java内存影像工具
        Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)
        命令格式:
        jmap [ options] vmid
        jmap -dump:live,format=b,file=dump.hprof sid
      5. jhat:虚拟机堆转储快照分析工具
        JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
      6. jstack:Java堆栈跟踪工具
        Stack Trace for Java,显示虚拟机的线程快照
        命令格式:
        jstack [ options] vmid
  • 相关阅读:
    aspjpeg 组件在asp中的使用
    C# 使用 fckeditor 上传文件中文名乱码的问题---转
    我来挑战主页绑定,浏览器被绑架之终极方案!
    nginx简易配置
    树莓派安装中文输入法
    树莓派4超频至2.0GHz
    python3 requests使用连接池
    python3 语言特性5
    git日常使用
    python3 时间格式化
  • 原文地址:https://www.cnblogs.com/Java-Script/p/11090015.html
Copyright © 2011-2022 走看看