Linux 性能分析
# step1 查看进程状态
top
top -Hp <procid>
# step2
vmstat <procid>
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 21975712 1256 28913012 0 0 0 1 1 1 1 1 98 0 0
1 0 0 21975168 1256 28913012 0 0 0 20 1507 686 1 0 99 0 0
2 0 0 21975640 1256 28913012 0 0 0 4 1489 632 1 0 99 0 0
1 0 0 21975092 1256 28913012 0 0 0 4 1513 1000 1 0 99 0 0
1 0 0 21974252 1256 28913012 0 0 0 4 1604 862 1 0 99 0 0
# step3 check cpu 运行分配情况
mpstat 1
mpstat -P ALL 1
# step4 检查 磁盘 IO 情况 > 60%
iostat -x 1
# step5 检查网络 IO
sar -n DEV 1 |grep em1
# syscall
strace
strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489
-tt 在每行输出的前面,显示毫秒级别的时间
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
-f 跟踪目标进程,以及目标进程创建的所有子进程
-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
-o 把strace的输出单独写到指定的文件
-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。
# pidstat 1
netstat -tuln |grep 7777·
perf
perf sched record -C <核号> -- sleep 10 #这个是记录你们的线程跑的核上的调度轨迹,记录10s
perf sched timehist #可以分析看调度轨迹
perf sched latency
-----------------------------------------------------------------------------------------------------------------
Task | Runtime ms | Switches | Average delay ms | Maximum delay ms | Maximum delay at |
-----------------------------------------------------------------------------------------------------------------
:99:99 | 0.000 ms | 1 | avg: 0.000 ms | max: 0.000 ms | max at: 0.000000 s
:98911:98911 | 0.000 ms | 1 | avg: 0.000 ms | max: 0.000 ms | max at: 0.000000 s
每一行代表一个特定的线程(格式为 PID:TID),并展示了以下信息:
Runtime ms:线程的运行时间(毫秒)。
Switches:线程的上下文切换次数。
Average delay ms:线程的平均延迟时间(毫秒)。
Maximum delay ms:线程的最大延迟时间(毫秒)。
Maximum delay at:发生最大延迟的具体时间点
pporf