Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >性能测试 操作系统性能分析思路总结

性能测试 操作系统性能分析思路总结

作者头像
授客
发布于 2019-09-11 07:22:46
发布于 2019-09-11 07:22:46
1.6K0
举报
文章被收录于专栏:授客的专栏授客的专栏

CPU

1、 整体负载

先查看系统整体负载(可通过w,uptime,top等命令查看),可以查看15分钟前,5分钟前,1分钟前到现在负载均值。

通常我们先看15分钟的负载均值,如果负载均值很高,再看5分钟和1分钟的负载,查看是否有下降趋势。如果负载均值等于逻辑CPU数(假设每个CPU的核数一样,逻辑CPU数 = 物理CPU数 X 单个CPU的核数),则表示CPU利用率为100%,小于CPU核数,则表示CPU利用率小于100%,大于CPU核数,则要用“就绪状态进程数”来衡量。

2、 就绪状态进程数

当负载均值大于逻辑CPU数时,查看处于就绪等待状态的进程数。可通过vmstat命令(r列)查看:如果r的值长期大于系统中的逻辑CPU个数,则表示系统现在运行较慢,有多个进程等待CPU处理。

3、 局部占用

系统负载较高的情况下,可进一步查看哪部分占用CPU资源较多(%us, %sy,%ni, %id, %wa, %hi(硬中断), %si(软中断),in (中断),cs(上下文切换)),可通过top,vmstat,iostat命令、nmon工具查看。

top命令:可查看 %us, %sy,%ni, %id, %wa, %hi, %si

vmstat命令:可查看 %us(参考值:不低于60%), %sy(参考值:不高于15%), %id(参考值:小于u,大于20%), %wa(参考值:不高于30%),in ,cs

如果%us的值比较高,说明用户进程消耗的cpu时间较多,如果长期超过50%的使用,那应该考虑优化程序了

如果%sy的值过高,说明系统内核消耗的cpu时间较多,是不良表现,要检查原因

%id时间(包括I/O等待时间),参考值:小于u,大于20%

如果%wa过高,说明I/O等待比较严重,可能是由于磁盘大量随机访问造成,也可能是磁盘的带宽出现瓶颈

%cs,每秒上下文的切换次数,在指定时间内,这个值要越小越好,值越大,表明cpu大部分时间浪费在上下文切换,内核消耗的cpu时间过多,导致cpu干“正经事”的时间少了,cpu没有充分利用,要考虑减少线程、线程的数目。举例来说,我们调用系统函数时,代码会进入内核空间,导致上下文切换,线程的切换也是如此;

%hi 服务于中断的CPU百分比

%si 服务于软中断的CPU百分比

in 每秒中断次数

iostat命令:

# iostat -c

avg-cpu: %user %nice %system %iowait %steal %idle

avg_cpu 多处理器中,avg_cpu统计的是多个处理器的平均值

nmon工具:

SYS_SUMM 表:

说明:

CPU% :CPU总体占用情况, User%+Sys%。

CUP_ALL表: 可查看%User, %Sys, %Wait

4、 单进程

进一步分析,可以查看是哪个进程占用CPU资源较多。可通过top、ps、pidstat命令

ps命令:

ps -aux --sort -pcpu

pid命令:

# pidstat -u

可查看%usr %system %guest %CPU CPU

5、 单线程

确定占用CPU资源较多的进程后,如果想进一步查看是该进程下哪些线程占用CPU资源较多,进一步分析造成CPU性能瓶颈的代码层问题

操作方法如下:

# top -Hp 13118 #查看PID为13118的进程,其所有线程的使用情况

top - 17:32:15 up 5 days, 7:58, 4 users, load average: 0.00, 0.01, 0.05

Threads: 56 total, 0 running, 56 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 497864 total, 38376 free, 370444 used, 89044 buff/cache

KiB Swap: 2096124 total, 1912088 free, 184036 used. 34656 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

13118 root 20 0 2731268 312056 5036 S 0.0 62.7 0:00.01 java

13119 root 20 0 2731268 312056 5036 S 0.0 62.7 0:01.04 java

13120 root 20 0 2731268 312056 5036 S 0.0 62.7 0:22.17 java

13121 root 20 0 2731268 312056 5036 S 0.0 62.7 0:00.08 java

# printf "%x" 13119 #16进制方式展示线程PID13119

333f

# jstack 13118 | grep 333f #查看PID为13119的线程堆栈信息,对应的代码段

"main" #1 prio=5 os_prio=0 tid=0x00007f1ecc009000 nid=0x333f runnable [0x00007f1ed5b23000]

6、 单个CPU

必要时,进一步分析每个逻辑CPU的资源占用情况,以便分析是否存在因代码数据结构、算法等不合理导致逻辑CPU使用不均的情况,比如在负载较高的情况下,依旧仅使用某个逻辑cpu。

可使用top、mpstat命令、nmon工具

top命令:开启top命令后,按1

mpstat命令: mpstat p -All

nmon工具:CPU_SUM表可查看%User, %Sys, %Wait

内存

1、 整体趋势

先查看内存使用整体走势,大致判断内存使用情况。图波动大且呈上升趋势,有可能是内存泄漏。可通过nmon工具查看(MEM表:可查看memfree,memtotal

2、 内存分布

根据“内存分布”进一步分析内存使用情况,获取更准确的信息。可通过top、free、vmstat命令或nmon工具查看。

top命令:可以查看

Mem : total, free, used, buff/cache, avail Mem

Swap: total, free, used

free命令:可以查看

Mem:total,used,free,shared,buff/cache available

Swap:total, used,free

对于旧版内核来说,Mem: free+buff+cache,可作为应用程序可用内存的大致估算值,Mem: used-buff-cache,可视为应用程序已用内存的大致估算值。

对于新版内核来说,available字段展示了可用剩余物理内存。

vmstat命令: 可以查看

si:每秒从交换分区写入到内存(swap in)的大小,单位kb/s

so:每秒从内存写入到交换分区(swap out)的大小

如果si,so的值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappiness和vm.min_free_kbytes limit的参数值来看待

swpd:正在使用的交换内存(虚拟内存)大小,单位kb

如果该值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappiness和vm.min_free_kbytes limit的参数值来看待

nmon工具:

VM表:pswpin pswpout ,如果这两列的值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappiness和vm.min_free_kbytes limit的参数值来看待

3、 单进程

进一步分析,查看哪个进程占用内存资源较多,可以通过top、ps、pidstat命令查看

top命令

%MEM 进程使用的物理内存百分比

VIRT 进程使用的虚拟内存(Virtual Image)总量,单位kb

RES 进程使用的,未被换出的物理内存大小,单位kb

ps命令

# ps -aux --sort -pmem

%MEM 进程使用的物理内存百分比

VSZ 进程占用的虚拟内存大小 单位:KB(killobytes)

RSS 进程占用物理内存大小 单位:KB(killobytes)

pidstat命令

# pidstat -r

# pidstat -r -p 1739 2 5

3、 更细粒度

例如利用jmap命令查看进程堆栈信息

磁盘

1、 整体使用率

查看磁盘(分区)使用率,以确定磁盘繁忙状态。可通过nmon工具查看。

DISKBUSY:

可查看Disk %Busy 的Avg, Wavg, Max值

说明:

WAvg比Avg更贴近资源消耗的均值

Disk %Busy:磁盘繁忙的百分比,即磁盘能满足的最大IOPS(每秒IO操作数)和当前IO数量的比率。

。一般主要看磁盘的Busy%,当磁盘的Busy%持续大于85%时,即认为磁盘相当繁忙了

2、 I/O等待

查看磁盘IO等待情况。可通过iostat命令查看

%util: 向设备发起I/O请求的CPU时间百分比,即一秒钟有百分之多少的时间用于I/O请求,参考值:大于95%则表示I/O繁忙

avgqu-sz: 向设备发起的I/O请求队列的平均队列长度,如果avgqu-sz比较大,也表示有一定量的I/O在等待。

await: 每次向设备发起的I/O请求平均时间(单位:毫秒),包括请求在请求队列中消耗的时间和服务设备的时间

svctm: 向设备发起的I/O操作服务时间均值(单位:毫秒),该字段在未来的版本中会被移除

1、针对单个机械硬盘,如果%util接近100%,说明产生的I/O请求太多,I/O系统满负荷,该磁盘可能存在瓶颈。而针对SSD或RAIDs则并非如此,需要参考avgqu-sz

2、如果svctm比较接近await,说明I/O几乎没有时间等待,如果await远大于svctm,说明I/O队列太长,I/O响应太慢,需要进行优化。

3、 磁盘IO读写

查看磁盘读写状况,分析磁盘是读占用,还是写占用,I/O,可通过pidstat、iostat命令、nmon工具查看

pidstat命令

# pidstat -d

可查看进程级的 kB_rd/s, kB_wr/s, kB_ccwr/s

iostat命令

# iostat

可查看 kB_read/s kB_wrtn/s

# iostat -kx

可查看 r/s w/s rkB/s wkB/s 等

nmon工具

SYS_SUMM 表:

Avg tps during an interval:显示采集间隔内磁盘平均I/O次数,该值等于DISK_SUMM表中IO/sec列的平均值。

Max tps during an interval:显示采集间隔内磁盘最大I/O次数,该值等于DISK_SUMM表中IO/sec列的最大值。

Max tps interval time:显示磁盘最大I/O所在时间点。

Total number of Mbytes read:显示采集间隔内磁盘读的总兆字节数,可能是nmon的bug,该值并不准确,并且使用LVM划分的虚拟磁盘可能会存在重复统计。

Total number of Mbytes written:显示采集间隔内磁盘写的总兆字节数,该值并不准确,理由同上。

Read/Write Ratio:显示Total number of Mbytes read/ Total number of Mbytes written的值, 实时比例。

网络

1、 数据收发

检查网卡数据接收和发送情况(是否报错,丢弃等),对网络状况进行基础分析。

可以通过ifconfig命令查看,其输出:

RX 表示接收

TX:表示发送

2、 整体I/O分析

查看网卡整体I/O以分析是否在“带宽”范围之内

3、 网络读写I/O分析

进一步分析是读I/O还是写I/O占用了过多资源

备注

如果是性能调优,一些看似无啥规律的数据,比如每秒I/O数,也可通过对比的方式来分析,或者通过绘制的曲线走势来分析(弄清楚曲线变化的原因),可能得到意想不到的结果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 系统性能调优:CPU、内存、IO 瓶颈分析方法(草履虫版)
把系统从「慢」变成「稳」有时候不需要大折腾,而是把最显著的瓶颈找出来。下面是一套我常用的方法.
IT运维技术圈
2025/08/11
6880
Linux 系统性能调优:CPU、内存、IO 瓶颈分析方法(草履虫版)
性能测试-服务端瓶颈分析思路
性能测试中,对服务端的指标监控也是很重要的一个环节。通过对各项服务器性能指标的监控分析,可以定位到性能瓶颈。
飞天小子
2019/07/31
1.6K0
性能测试必备监控技能linux篇14
前言 如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢? 对于日常性能测试来讲,在linux下或是类Unix系统,我们必须掌握以下常用的指标查看命令。 ps pstree top free vmstat iostat iotop sar 当然还有其他命令,这里就上述笔者常用的命令推荐大家掌握。 ps ps命令能给出当前系统中进程的快照。下面我们列举几个常用的选项,对于其他的请参考官方文档或是自行搜索相关文档。 使用 -a 参数。-a 代表 all。同时加
苦叶子
2018/04/04
1.5K0
性能测试必备监控技能linux篇14
Linux高负载排查最佳实践
在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。
十里桃花舞丶
2024/03/15
7400
Linux高负载排查最佳实践
高可用架构 - 系统性能评估
top 命令重要指标:load average,表示任务队列的平均长度(1分钟、5分钟、15分钟前到现在平均值)。
dys
2019/12/15
9450
网工人必须掌握的Linux命令
作为一个Linux运维人员,主要就是对Linux服务器的性能做一些优化,本篇博文仅仅介绍如何性能检测常用的指令!
网络技术联盟站
2021/02/22
1.1K0
Linux性能检测常用的9个基本命令
作为一个Linux运维人员,主要就是对Linux服务器的性能做一些优化,本篇博文仅仅介绍如何性能检测常用的指令!
网络技术联盟站
2020/05/14
2K0
如何快速分析出现性能问题的Linux服务器
本文将详细介绍以下这些Linux命令及其扩展选项的意义,及其在实践中的作用。并利用一个实际出现问题的例子,来验证这些套路是不是可行,下面工具的屏幕输出结果都来自这个出现问题的系统。当遇到一个系统性能问题时,如何利用登录的前60秒对系统的性能情况做一个快速浏览和分析,主要包括如下10个工具,这是一个非常有用且有效的工具列表。
星哥玩云
2022/07/26
1.4K0
如何快速分析出现性能问题的Linux服务器
25-性能分析命令
memory:「swpd」 显示多少块被换出磁盘,「free」显示剩下的空闲块,「buff」正在被作用缓冲区的块,「cache」正在被用作操作系统的缓存
zx钟
2021/07/06
7940
技能篇:linux服务性能问题排查及jvm调优思路
只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求。最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的。如果你是负责中间件或IM通讯相关项目开发,或许就需要偏向CPU、磁盘、网络及内存方面的问题排查及调优技能
潜行前行
2022/04/26
9180
技能篇:linux服务性能问题排查及jvm调优思路
四款常用服务器IO测试工具详细分析
top是一个常用的性能监控工具,可以用来实时查看系统资源的使用情况,包括CPU、内存、进程等信息,是Linux系统中常用的一种命令行工具。通过top可以查看系统当前的状态,并且可以对各种系统资源进行监控和管理。
IT运维技术圈
2023/09/07
9500
四款常用服务器IO测试工具详细分析
linux 常用的性能分析命令vmstat|iostat|iotop|mpstat
1.vmstat--虚拟内存统计 vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。
瑾诺学长
2021/02/25
1.6K0
Linux系统下的性能分析命令
在 Linux 系统下,有许多用于性能分析和调试的命令和工具,可以帮助您识别系统瓶颈、优化性能以及调查问题。本文将介绍在性能分析过程中,可能使用到的一些命令。
xcbeyond
2023/09/06
6980
Linux系统下的性能分析命令
1 分钟内对 Linux 进行性能诊断的10 个命令
当你发现 Linux 服务器上的系统性能问题,在最开始的 1 分钟时间里,你会查看哪些系统指标呢? Netflix 在 AWS 上有着大规模的 EC2 集群,以及各种各样的性能分析和监控工具。 比如我
Vincent-yuan
2021/12/20
1.1K0
1 分钟内对 Linux 进行性能诊断的10 个命令
Linux 性能诊断:快速检查单(Netflix版)
快速检查单(Quick Reference Handbook,QRH)是飞行员在飞行过程中依赖的重要指导性文件。
RiboseYim
2018/01/12
2.3K0
Shell脚本分析服务器性能
我们原先在服务器上想分析性能指标,需要执行一系列的linux命令。对于linux命令不熟悉的人来说,比较困难
飞天小子
2019/09/11
1.5K0
Linux - CPU性能评估_详解查看CPU性能的命令
vmstat命令可以显示关于系统各种资源之间相关性能的简要信息,这里主要用它来看CPU的一个负载情况。
小小工匠
2023/03/07
8.3K0
Linux - CPU性能评估_详解查看CPU性能的命令
关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
1.4K0
关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能的一些笔记
常见Linux调优命令和工具
引言: 应同学的要求,分享些基础的知识。 没有比Linux更基础了,关键问题来了,你真的认真看了和转发了吗? O(∩_∩)O哈哈~ 要实现对Linux的调优,就需要用到一些Linux系统命令和工具来观察与监控系统的性能。下面介绍几个最常用的Linux调优命令和工具。 1. top命令 top命令经常用来监控Linux的系统状态,如CPU、内存的使用情况。下面通过一个运行中的Web服务器的top监控截图,讲述top视图中各种数据的含义,以及视图中各进程(任务)的字段的排序。 top进入视图,如图4.17所示。
大数据和云计算技术
2018/03/08
3.2K0
常见Linux调优命令和工具
相关推荐
Linux 系统性能调优:CPU、内存、IO 瓶颈分析方法(草履虫版)
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档