操作系统性能分析思路总结
2017-06-30 14:39
232 查看
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,memtotal2、 内存分布
根据“内存分布”进一步分析内存使用情况,获取更准确的信息。可通过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数,也可通过对比的方式来分析,或者通过绘制的曲线走势来分析(弄清楚曲线变化的原因),可能得到意想不到的结果。相关文章推荐
- Linux桌面操作系统性能分析学习总结
- Db2性能:操作系统CPU高问题分析的一些思路
- WebService性能测试回顾版-结果分析和项目总结
- 性能测试之:操作系统性能指标观测及分析
- Linux开发心得总结2 - 频繁分配释放内存导致的性能问题的分析
- linux下CPU性能分析工具总结
- 九种常用排序的性能分析总结 [zhuan]
- 【总结】性能分析的几个指标(参考)
- Oracle性能分析总结
- C++ STL性能分析---------根据他人博客,自己总结
- 利用Oracle数据库存储和分析Unix操作系统的性能
- 性能测试之:操作系统性能指标观测及分析
- 性能分析总结
- Windows CE 3.0实时操作系统及其性能分析ctic 川科创新
- 系统性能优化分析—总体思路
- 性能测试分析思路
- 大型复杂系统性能测试初步分析评估的核心思路
- 性能瓶颈分析和性能报告总结
- 九种常用排序的性能分析总结
- Java的WEB应用性能问题定位方法总结:常见的性能指标分析 .