Java性能优化权威指南-操作系统性能监控

发布于:2025-06-24 ⋅ 阅读:(16) ⋅ 点赞:(0)

如有侵权,请联系~
如有错误,也欢迎批评指正~
本篇文章大部分是来自学习《Java性能优化权威指南》的笔记

1、监控步骤

改善性能主要是设计三步:性能监控、性能分析和性能调优。

  • 性能监控:是一种非侵入式的查看应用运行性能数据的活动
  • 性能分析:一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性。关注的范围比性能监控更加集中。
  • 性能调优:是一种为了改善系统的响应或者吞吐量而修改参数、源代码或者属性的活动。

2、CPU利用率

要使应用的性能或扩展性达到最高,就必须充分利用分配给它的CPU周期。大多数操作系统的CPU使用率分为用户态和系统态CPU使用率。用户态CPU利用率是指执行应用程序代码的时间占总时间的比例,系统态CPU利用率是指应用执行系统调用用的时间占总时间的比例。

针对于Linux的监控CPU利用率,可以使用GNOME系统监视器进行查看或者通过命令vmstat、top等。
vmstat是所有 CPU 核心的汇总统计信息。
在这里插入图片描述
top命令输出的上面是统计信息,下面是每个进程的占用资源情况:
在这里插入图片描述

3、 CPU程序调用运行队列

分析系统的负载,除了CPU利用率,CPU的运行队列也是一个很关键的指标,一般对应监控中的load指标。运行队列存储的是已准备好运行、正等待可用CPU的线程,每个CPU都有自己的运行队列。

队列中任务数量 采取措施
队列长度等于虚拟处理器个数 用户无明显感知
长时间队列长度=2倍虚拟处理器的个数 需要关注,但不一定立刻采取性能
长时间队列长度=3~4倍虚拟处理器的个数 立刻采取行动

改善队列长度长的方法一般两种方式:

  • 增加CPU以此减轻负载
  • 提高CPU的利用率

Linux操作系统中,vmstat命令的第一列就表示运行队列中任务的数量。

4、内存利用率

当系统进行页面交换或者虚拟内存的时候,Java应用或者jvm就会明显表现出性能问题。当系统所需要的内存超过物理内存之后,就会出现页面交换。为了应对这种情况需要配置swap空间,swap空间一般是在次盘中。当物理内存耗尽的时候,就会将运行最少的部分置换到swap空间中;等到运行到这部分代码的时候,再从swap空间置换到内存中。

如果存在页面交换的情况,JVM性能也会变差。当JVM进行GC的时候,会扫描所有对象,回收不可达对象。如果JVM中的一部分堆也被存储到swap空间中,当GC的时候需要将swap空间中的堆数据置换到内存。

Linux操作系统中,vmstat命令、top命令都可以查看。pidstat -w也可以查看CPU 线程上下文切换的次数。

5、网络IO使用率

分布式Java应用会受到网络带宽和网络IO的影响。如果发送到系统中的消息量超过了处理能力,就会影响应用的性能。网络IO使用率很难判断。可以通过netstat -i可以查看每个网络接口发送和接受包的多少,但是没办法得知使用率。

6、磁盘IO使用率

磁盘利用率是监控磁盘使用情况最有用的数据,几乎每个应用都会进行磁盘操作,使用日志记录一些关键的数据。尤其是核心功能需要磁盘操作,例如数据库。linux可以通过iostat命令进行查看。


网站公告

今日签到

点亮在社区的每一天
去签到