Linux性能分析

1. 性能分析

1.1 常用命令

uptime

查询当前系统登录用户,以及系统平均负载(平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数)

uptime

19:11:03 up 147 days, 2:02, 2 users, load average: 0.27, 0.07, 0.02
分别为: 当前时间,系统目前登录用户数,系统 1分钟前,5分钟前,15分钟前的平均负载

比如当平均负载为 2 时,意味着什么呢?

  • 在只有 2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。
  • 在 4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。
  • 而在只有 1 个 CPU 的系统中,则意味着有一半的进程竞争不到 CPU。

查看系统有几个CPU

grep 'model name' /proc/cpuinfo | wc -l

一旦平均负载高于70%,就需要去排查一下问题了。

高亮显示负载变化

watch -d uptime

mpstat

查看CPU使用情况,io等待,

# 间隔5s输出一次数据
mpstat -P ALL 5

19时38分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时38分14秒 all 1.61 0.00 1.01 3.63 0.00 0.20 0.00 0.00 0.00 93.55
19时38分14秒 0 1.61 0.00 1.01 3.63 0.00 0.20 0.00 0.00 0.00 93.55

因为我只有 1 个cup,所以只会有两行,一行是统计,一行是我当前cpu使用

pidstat

输出正在运行的进程的CPU占用率

# 间隔5秒后输出2组数据
pidstat -u 5 2
# 指定某个进程
pidstat -d -p 4344 5 2
  • -p:指定进程号
  • -d: 输出IO使用情况

top

查看CPU使用率, 按 1 可查看每个CPU的使用率

top - 09:52:28 up 147 days, 16:43, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 101 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.7 us, 0.7 sy, 0.0 ni, 98.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2034368 total, 91912 free, 460872 used, 1481584 buff/cache
KiB Swap: 2097148 total, 1879036 free, 218112 used. 1418440 avail Mem

  • user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
  • nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
  • system(通常缩写为 sys),代表内核态 CPU 时间。
  • idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
  • softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
  • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
  • guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
  • guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

perf

找出CPU占用最高的函数

安装

yum install perf -y

使用

# 查看性能分析
perf top
# 查看某一个具体的进程
perf top -g -p 进程号
# 收集性能报告
perf record -g
# 查看性能分析报告
perf report
# 收集15秒数据并查看性能分析报告
perf record -ag -- sleep 15;perf report
  • Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
  • Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
  • Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
  • Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

execsnop

这是一个用来分析短时进程而设计的一个工具

安装

  1. 复制 https://github.com/brendangregg/perf-tools/blob/master/execsnoop 里面的内容
  2. 拷贝到 execsnop文件中
  3. 为该文件添加可执行权限

使用

./execsnop

strace

追踪系统调用

strace -p 进程号

pstree

寻找进程的父进程

pstree -aps 进程号

sar

查看系统网络收发情况

# -n DEV 表示显示网络收发的报告,间隔1秒输出一组数据
sar -n DEV 1

  • 第一列:表示报告的时间。
  • 第二列:IFACE 表示网卡。
  • 第三、四列:rxpck/s 和 txpck/s 分别表示每秒接收、发送的网络帧数,也就是 PPS。
  • 第五、六列:rxkB/s 和 txkB/s 分别表示每秒接收、发送的千字节数,也就是 BPS。

tcpdump

这是一个抓包工具

# -i eth0 只抓取eth0网卡,
# -n不解析协议名和主机名
# tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
tcpdump -i eth0 -n tcp port 80

中断

# 查看软中断
watch -d cat /proc/softirqs

# 查看硬中断
watch -d cat /proc/interrupts

1.2 排查思路

1.2.1 根据指标找工具

1.2.2 根据工具查指标

1.2.3 排查流程

1.3 系统压测

stress

这是一个Linux系统压测工具

安装

yum install stress -y

压测CPU

stress --cpu 1 --timeout 600

压测IO

stress -i 1 --timeout 600

模拟8个进程

stress -c 8 --timeout 600
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值