Java性能优化权威指南(1):操作系统性能监控

操作系统性能监控

  • 找到性能问题的第一步是监控应用的行为

定义

  • 性能监控是一种以非侵入方式收集或查看应用在运行性能数据的活动。
  • 性能分析是一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性,通常在测试,开发环境中进行。
  • 性能调优是一种改善应用响应性或吞吐量而更改参数,源代码或属性配置的活动。

CPU使用率

  • 大多数操作系统的CPU使用率分为用户态CPU使用率系统态CPU使用率
  • 用户态CPU使用率指应用执行程序代码占用总CPU时间的百分比,系统态CPU使用率指应用执行操作系统调用的时间占总CPU时间的百分比。
  • 理想情况下,应用达到最高性能和扩展性时,它的系统CPU使用率为0%。

命令行监控CPU使用率:Linux

  • 通过vmstat监控所有虚拟处理器的CPU使用率, us为用户态CPU使用率, sy为系统态CPU使用率, id则为空闲,wa为等待IO百分比, st为虚拟CPU等待真实CPU百分比:

       

  • 我们也可以通过mpstat查看监控每个虚拟处理器的CPU使用率:

       

       Java性能优化权威指南(1):操作系统性能监控_第1张图片       

  • 通过top命令不仅包括CPU使用率也包括进程统计数据和内存使用率:

       Java性能优化权威指南(1):操作系统性能监控_第2张图片

CPU调度程序运行队列

  • 除CPU使用率外,监控CPU调度程序运行队列对于分辨系统是否满负荷也有重要意义。
  • 一般性的指导原则:如果很长一段时间内,运行队列的长度一直都超过虚拟处理器个数的1倍,就需要关注了,只是暂时还不需要立刻采取行动。如果在很长一段时间里,运行队列的长度达到虚拟处理器个数的3~4倍或更高,则需要立刻引起注意或采取行动。

监控CPU调度程序运行队列:Linux

  • 可通过vmstat监控运行队列长度, 第一列即是运行队列长度,值是运行队列中轻量级进程的实际数量。

                       

内存使用率

  • 系统在进行页面交换或使用虚拟内存时,Java应用或JVM会表现出明显的性能问题。

监控内存使用率:Linux

  • Linux上可以用vmstat输出中的free列监控页面交换,也可以用其他方法例如top命令或/proc/meminfo文件来监控。
  • vmstat中free列显示可用的空闲内存,si和so分别表示内存页面换入和换出的量:

       

监控锁竞争:Linux

  • Linux上可以使用systat包中的pidstat命令监控锁竞争。
  • 对于一般性原则,对于java应用来说,如果让步式上下文切换占去它5%或更多可用时钟周期时,说明它可能遇到了锁竞争,即便只占到3%~5%也值得进一步调查。
  • 这是对测试服务器中的一个java进程的监控,cswch/s为让步式切换数/s,nvcswch/s为抢占式切换数/s: 

       Java性能优化权威指南(1):操作系统性能监控_第3张图片

  • 计算让步上下文切换占去的时钟周期百分比公式:
上下文切换数 / (CPU核数) * 80000 / CPU频率(Hz)
如上面的计算结果为:
10 / 2 * 80000 / 2 130 000 000(CPU为2.13GHz)
  • 大家还可以使用Lmbench工具监测CPU上下文切换信息。

网络I/O使用率

监控网络I/O使用率:Linux

  • Linux上我们可以nicstat工具监控网络使用率:

       Java性能优化权威指南(1):操作系统性能监控_第4张图片

# 各列含义
Int: 网络接口名
rKb/s: 每秒读取的KB数
wKb/s: 每秒写入的KB数
rPk/s: 每秒读取的包数
wPk/s: 每秒写入的包数
rAvs:  每次读取的平均字节
wAvs:  每次写入的平均字节
%Util: 网络接口使用率
Sat:   饱和度

磁盘I/O使用率

  • Linux下可用iostat工具监控磁盘I/O:

       Java性能优化权威指南(1):操作系统性能监控_第5张图片

  • 改进磁盘I/O使用率的策略:

       1. 更快的存储设备;

       2. 文件系统扩展到多个磁盘;

       3. 操作系统调优使得可以缓存大量的文件系统数据结构。

其他命令行工具

  • Linux下可以使用sar命令进行长时间的系统监控历史信息收集。


你可能感兴趣的:(java性能优化,操作系统性能监控)