Linux性能分析方法

CPU

1.先用top确定系统整体情况

  • 系统CPU【sys】
  • 用户CPU【us】
  • 僵尸进程【zombie】
  • 硬中断【hi】
  • 平均负载【load average】
  • 等待IO CPU【wa】
  • 软中断【si】 查看 /proc/softirqs,【NET_RX】高,通过sar -n定位,【NET_TX】高,通过tcpdump定位

2.用vmstat(虚拟内存统计)进一步细化指标,并查看趋势

  • 系统CPU sys指标偏高,查看上下文切换次数【cs】
  • 硬中断hi偏高,查看中断次数【in】,细看/proc/interrupts
  • 平均负载高,查看运行状态进程数【r】,不可中断进程数【b】=>通过IO分析工具进一步定位[dstat] [sar -d]

3.定位到进程pidstat

  • 上下文切换较多,需要看自愿上下文切换【cswch】和非自愿上下文切换【nvcswch】
  • 查看具体进程是用户CPU【usr】高,还是系统CPU【system】高

4.定位到具体代码strace和perf

  • strace 用于系统CPU高,排查内核线程或者系统调用
  • perf 用于用户CPU高,排查进程性能问题,实时显示占用CPU最多的函数,可以排查CPU占用100%的问题
  • CPU使用率高但是占不到CPU高的应用=>execsnoop(监控短时进程)

内存

  1. 先用free 确定系统整体内存情况
  • 系统已用内存【used】
  • 系统空闲内存【free】
  • 系统内存总数【total】
  • 缓存/缓冲区【cache/buffer】
  • swap已用空间【swap used】
  • swap剩余空间【swap free】
  1. 用vmware/sar打印每秒趋势
    vmware
  • 系统剩余内存【free】
  • 缓冲区【buff】
  • 缓存【cache】
  • 虚拟内存大小【swpd】,如果swpd不为0,SI SO为0对性能没影响
  • 磁盘换入内存SI
  • 内存换入磁盘SO
  1. 确认内存问题
  • 内存分配分析
memleak
strace
valgrind
slabtop
/proc/buddyinfo
  • 进程内存分析
pidstat/top(内存使用率 虚拟内存 常驻内存 缺页异常)
pmap
/proc/pid/status
/proc/pid/smaps
  • 缓存 缓冲区分析
cachetop
slabtop
cachestat
pcstat

IO

  1. 先确认整体IO情况
iostat -d -x 1
  • I/O使用率【%util】
  • IOPS【r/s w/s】
  • 吞吐量【rkb/s wkb/s】
  • 响应时间【svctm】
  1. 确认IO瓶颈
pidstat -d 1
  • 进程IO读【kB_rd/s】
  • 进程IO写【kB_wr/s】
  • 进程IO延迟【iodelay】
vmstat 2 5
  • iowait%【wa】
  • cache【cache】
  • buffer【buff】
  • swap换入【si】
  • swap换出【so】
  1. 确认IO来源
  • 内核线程(文件系统和磁盘分析)
df/du
perf
blktrace
biosnoop
biotop
  • 普通进程(进程IO分析)
strace
lsof
  • 内存问题,包括缓存(内存分析)
/proc/meminfo
/proc/slabinfo
pcstat
slabtop
cachetop
cachestat
  • 来源:《Linux操作系统知识地图》
原文地址:https://www.cnblogs.com/jaychan/p/14274363.html