《Java性能优化指南》读书笔记-JVM性能监控

关于性能监控、分析和调优的定义

平时根本不太关注这个定义的区分,今天仔细看了一下关于这三个内容的定义,也确实加深了一些理解。它们三者之间是一个递进的关系。它们三者的定义分别如下:

性能监控通常是指一种在生产、质量评估或者开发环境中实施的带有预防性或主动性的活动。一般对系统本身的性能影响较小。它是宏观层面的日常监视,以期待发现问题。

性能分析是指一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性。它是对于所报性能问题的一种回应,关注的范围通常比性能监控更加集中,也更加细致。

性能调优则是一种为改善应用响应性或者吞吐量而更改参数、源代码或者属性配置的活动。它通常是在性能分析之后进行的活动。通常我们会在进行了一项调优之后还需要继续监控和分析,以验证性能调优的效果是否达到预期目标,若未达到目标则还会进行下一轮的性能监控、分析和调优的活动,直至达到目标为止。

JVM性能监控内容

垃圾回收监控

主要是监控JVM中垃圾回收的运行状况,主要反映了JVM内存的使用情况和垃圾对象的回收状况。

主要监控的数据有这些:

1.当前minor gc和full gc分别使用的垃圾收集器;

2.java堆的大小;

3.年轻代和年老代的大小;

4.年轻代中eden区和Survive区的比率。

5.永久代的大小;

6.minor gc的持续时间和频率。

7.full gc的持续时间和频率。

8.垃圾回收每次的空间回收量。

9.垃圾回收前后各区域的大小;

10.触发full gc的原因。

11.是否显示调用了System.gc();

JIT编译

JIT编译能够提升应用的运行效率,也会额外消耗CPU和内存资源,监视JIT编译的执行效率和耗时也有助于发现JVM应用的性能问题。

JVM启动参数中添加: -XX:+PrintCompilation参数可以在日志中打印出编译运行状况。

类加载

java程序在运行过程中若用到新的类都会加载到JVM中,类的代码和属性会存储在JVM的永久代中,类加载和卸载会影响到永久代的回收。

线程栈

线程的锁竞争情况,也是对于java应用性能影响较大的因素,因此对于锁竞争情况的监控对于发现java应用的性能问题价值也非常大。

使用jstack命令即可对列举出一个java进程的所有线程,包括线程的运行状态,锁定信息等。




你可能感兴趣的:(《Java性能优化指南》读书笔记-JVM性能监控)