当前位置: 首页 > news >正文

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

操作系统性能监控

  • 1、监控步骤
  • 2、CPU利用率
  • 3、 CPU程序调用运行队列
  • 4、内存利用率
  • 5、网络IO使用率
  • 6、磁盘IO使用率

如有侵权,请联系~
如有错误,也欢迎批评指正~
本篇文章大部分是来自学习《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命令进行查看。

http://www.lqws.cn/news/486811.html

相关文章:

  • FreeRTOS 介绍、使用方法及应用场景
  • redis如何使用IO多路复用
  • 从语言到生态:编程语言在各行业的应用格局与未来演进
  • Data Vault 初探(五) —— 定期装载_SQL
  • 从java角度理解io多路复用和redis为什么使用io多路复用
  • docker启动的rabbitmq搭建并集群和高可用
  • AS32系列MCU芯片I2C模块性能解析与调试
  • 秘塔AI搜索:国产无广告智能搜索引擎,重塑高效信息获取体验
  • 1 Studying《Systems.Performance》1-6
  • 跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
  • 黑马python(十三)
  • 二刷苍穹外卖 day03
  • K8s入门指南:架构解析浓缩版与服务间调用实战演示
  • C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测
  • 国产12537穿甲弹侵彻仿真(显式动力学)
  • DeepSeek15-揭密模型上下文协议(MCP)
  • 从零开始手写redis(15)实现自己的 HashMap
  • 大模型LoRA微调实践
  • C语言:位段
  • Python期末速成
  • 没掌握的知识点记录
  • day39/60
  • 链接脚本基础语法
  • Python打卡训练营Day56
  • 给同一个wordpress网站绑定多个域名的实现方法
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • C++智能指针编程实例
  • 消息队列:基本知识
  • 【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
  • 【RocketMQ 生产者和消费者】- 消费者的订阅关系一致性