文章目录
CPU概念相关概念分析工具使用方式
内存相关概念分析工具使用方式
IO相关概念工具使用方式
网络工具使用方式
系统负载概念工具使用
具体
CPU
概念
分析CPU时,主要分析CPU的调度以及性能。线程本身有很多种状态:
状态备注描述
RrunningSsleepingDDisk sleepZzombieIidle
但线程针对于CPU只有两种状态:
on-CPU:执行占用CPU中,并且分为用户态时间user和系统态时间sys;off-CPU:等待CPU,或者等待I/O,锁,换页等,具体状态包括可执行,匿名换页,睡眠,锁,空闲等状态。
相关概念
核数 硬件线程 时钟频率 CPI/IPC 用户态时间/系统态时间 运行队列
分析工具
工具描述
top监控每个进程的cpu用量uptime平均负载vmstat包括系统范围的cpu平均负载mpstat查看所有cpu的核信息sar -u查看cpu信息pidstat查看进程cpu用量分解perfcpu剖析
使用方式
//查看系统cpu使用情况
// 1键查看所有核的使用率
; P按照cpu占用率进行排序;c显示完整的命令
top
//查看所有cpu核信息
mpstat -P ALL 1
//查看cpu使用情况以及平均负载
vmstat 1
//进程cpu的统计信息
pidstat -u 1 -p pid
//跟踪进程内部函数级cpu使用情况
内存
相关概念
物理内存虚拟内存常驻内存虚拟地址空间页缓存缺页换页用户态内存分配器:libc,glibc,libmalloc,mtmalloc内核态内存分配器:slub分配器。
分析工具
工具描述
free查看系统整体内存情况vmstat虚拟内存统计信息top查看每个进程内存占用pidstat查看活动进程的内存占用pmap查看进程的内存映像sar -r查看内存情况dtrace动态跟踪valgrind内存检查工具
使用方式
// M按照内存使用排序
top
//1s采集周期,获取内存的统计信息
pidstat -p pid -r 1
//查看进程的内存映像信息
pmap -d pid
//检测程序内存问题
valgrind --tool
=memcheck --leak-check
=full --log-file
=./log.txt ./程序名
IO
磁盘是系统中最慢的子系统。
相关概念
文件系统VFS文件系统缓存页缓存page cache缓存区高速缓存buffer cache目录缓存inodeinode缓存noop调用策略
工具
工具描述
iostat磁盘详细统计信息iotop按进程查看磁盘IO的使用情况pidstat按进程查看磁盘IO的使用情况perf跟踪工具
使用方式
//查看系统io信息
iotop
//统计io详细信息
iostat -d -x -k 1 10
//查看进程级io的信息
pidstat -d 1 -p pid
//查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常
perf record -e block:block_rq_issue -ag
perf report
网络
工具
工具描述
pingtraceroute跟踪源主机和目标机直接的路由信息netstat查看进程和端口之间的统计数据,以及TCP/UDP等协议包的统计信息ss查看socket统计信息tcpdumptcpflowtcp统计流sar -n DEV网卡流量情况sar -n SOCK查询网络以及TCP/UDP状态信息
使用方式
//显示网络统计信息
netstat -s
//显示当前UDP连接状况
netstat -nu
//显示UDP端口号的使用情况
netstat -apu
//统计机器中网络连接各个状态个数
netstat -a
| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
//显示TCP连接
ss -t -a
//显示sockets摘要信息
ss -s
//显示所有udp sockets
ss -u -a
//tcp,etcp状态
sar -n TCP,ETCP 1
//查看网络IO
sar -n DEV 1
//抓包以包为单位进行输出
tcpdump -i eth1 host 192.168.1.1 and port 80
//抓包以流为单位显示数据内容
tcpflow -cp host 192.168.1.1
系统负载
概念
系统负载可以简单理解为运行队列的长度
工具
工具描述
topuptimestrace跟踪系统调用以及每个系统调用的执行时间dmesg查看系统日志
使用
//查看负载情况
uptime
top
vmstat
//统计系统调用耗时情况
strace -c -p pid
//跟踪指定的系统操作例如epoll_wait
strace -T -e epoll_wait -p pid
//查看内核日志信息
dmesg
具体
查看当前系统整体负载:这时候最好不要直接上top,有可能会影响整体系统的情况。 uptime :查看系统1/5/15分钟内的系统运行情况CPU: vmstat:查看等待执行的任务数和当前系统core的数量关系 mpstat: -P ALL 1 :查看CPU在各个层面的占用率 pidstat:查看每个进程占用CPU的具体情况 taskset:查看每个进程的亲和性内存 /proc/meminfo:查看系统内存的总体情况 free:同上磁盘IO iostat:-xz 1 : 查看所有磁盘的读写带宽/读写请求数/设备使用率
r/s,w/s,rkB/s,wkB/s分别表示每秒设备读次数,写次数,读的KB数,写的KB数。它们描述了磁盘的工作负载。也许性能问题就是由过高的负载所造成的
awaitI/O平均时间,以毫秒作单位。它是应用中I/O处理所实际消耗的时间,因为其中既包括排队用时也包括处理用时。如果它比预期的大,就意味着设备饱和了,或者设备出了问题avgqu-sz分配给设备的平均请求数。大于1表示设备已经饱和了。(不过有些设备可以并行处理请求,比如由多个磁盘组成的虚拟设备)%util设备使用率。这个值显示了设备每秒内工作时间的百分比,一般都处于高位。低于60%通常是低性能的表现(也可以从await中看出),不过这个得看设备的类型。接近100%通常意味着饱和.
网络 sar: -n DEV 1:查看网卡的读写带宽情况 -n TCP,ETCP 1:Tcp协议的操作情况中断情况 /proc/interrupts:查看系统当前所有的中断情况
中断号中断次数中断设备名称
Top命令: 查看线程执行在具体的core上: top -H -> f/F键 -> “Last Used Cpu (SMP)” 按照CPU使用率排序: -H 按照内存使用率排序:-M 展示所有core的使用情况:top -> 1键trace
ftrace,编译时使用-pg选项,会在函数入口处增加一条call mcount指令。
https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html