LINUX常用工具之性能分析工具推荐

一、CPU性能分析工具

|------------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 性能指标 | 工具 | 说明 | 用法举例: |
| 平均负载 | Top Uptime | Uptime:最简单; Top:提供了更全的指标(平均负载、运行队列、整体的CPU使用率以及每个进程状态和CPU使用率) | Top: M:根据驻留内存大小进行排序 P:根据CPU使用百分比大小进行排序 H:显示线程 c:显示正在运行的进程的绝对路径 1:显示每个cpu性能指标 |
| 系统整体CPU使用率 | vmstat mpstat sar top | Top; Vmstat: 系统整体的CPU使用率、上下文切换次数、中断次数,还包括处于运行和不可中断状态的进程数; Mpstat: 每个CPU的使用率和软硬中断CPU使用率; Sar: 系统整体的CPU使用率,包括可配置的历史数据; top、 vmstat、 mpstat 只可以动态杳看,而 sar还可以记录历史数据。 | # vmstat -w 1 刷新间隔1秒,-w 扩大显示长度。 # mpstat -P ALL 1 显示所有CPU性能指标,刷新间隔1秒 # sar -P ALL 1 显示所有CPU性能指标,刷新间隔1秒 |
| 进程CPU使用率 | Top Pidstat Ps pstree | Pidstat:进程和线程的CPU使用率、中断上下文切换次数; Top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程。 Pstree:显示父子进程关系 | # ps -aux --sort -pmem 根据 内存使用 来升序排序 #ps -aux --sort -pcpu 根据 CPU使用 来升序排序 # pidstat 1 显示各活动进程的cpu使用统计,刷新间隔1秒 # pidstat -p 4324 1 显示指定进程的CPU使用统计,刷新间隔1秒 #pstree -g 显示带PID父子进程关系 |
| 系统上下文切换 | vmstat | 除了上下文切换次数,还提供运行状态和不可中断状态进程的数量。 | # vmstat -w 1 |
| 进程上下文切换 | pidstat | 加上 -w选项,线程加上 -t 选项 | # pidstat -w 1 -w 显示进程上下文切换次数,重点关注自愿上下文切换和非自愿上下文切换数。 # pidstat -w -p 778 1 显示指定进程778的上下文切换次数,刷新间隔1秒 # pidstat -wt 1 -t 显示线程上下文切换次数。刷新间隔1秒 |
| 软中断 | Top mpstat | Top、mpsta提供软硬中断CPU使用率; | #mpstat -P ALL 1 |
| 硬中断 | vmstat | vmstat提供每秒硬中断次数, | #vmstat -w 1 |
| 网络 | dstat sar tcpdump | dstat和sar提供总的网络接收和发送情况,而tcpdump则是动态抓取正在进行的网络通讯 | # dstat 1 显示总的网络接受和发送情况,刷新间隔1秒 # sar -n DEV 1 显示详细网络性能,刷新间隔1秒 #tcpdump -i ens33 -vnn port 22 抓取指定接口和端口的数据包 |
| I/O | dstat sar | dstat和sar提供了I/O的整体情况 | # dstat 1 显示全部I/O # sar -d 1 显示全部磁盘IO情况,刷新间隔1秒 |
| 事件剖析 | Perf Execsnoop | Perf:可以用来分析CPU的缓存以及内核调用链,CPU调度等 Execsnoop:用来监控短时进程追踪。 用法: https://github.com/brendangregg/perf-tools/blob/master/execsnoop 脚本下载+x权限。 | # perf top 显示占用CPU时钟最多的的函数或者指令,可以用来查找热点函数。 perf top -g -p 10277 -g 开启调用关系分析,-p指定进程号 # perf record -g -p 10277 保存性能事件 # perf report 查看性能事件 #./ Execsnoop 追踪短时进程(瞬时进程),top或ps不容易发现。 |

二、内存性能分析

|------------------|-------------------------|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
| 性能指标 | 工具 | 说明 | 用法举例: |
| 系统已用、可用、剩余内存 | free vmstat sar | Free:系统已用、可用、剩余内存以及缓存和缓冲区用量。 Vmstat:系统剩余内存、缓存、缓冲区、换入、换出 Sar:系统内存换页情况、内存使用率、缓存和缓冲区用量以及swap使用情况。 | # vmstat -w 1 # free -mt # sar -r 1 显示内存利用率,刷新间隔1秒 |
| 进程虚拟内存、常驻内存、共享内存 | Ps Top | Top、ps:进程虚拟、常驻、共享内存以及缺页异常 | Top: M:根据驻留内存大小进行排序 # ps -aux --sort -pmem 根据 内存使用 来升序排序 |
| 进程内存分布 | Pmap | Pmap:进程地址空间和内存状态 | # pmap -x 2028 -x 显示扩展格式,-d 显示设备格式 |
| 进程缺页异常 | Pidstat | Pidstat:显示各活动进程的内存使用统计,缺页异常次数;注意加上-r选项。 | # pidstat -r 1 显示各活动进程的内存使用统计,缺页异常次数,刷新间隔1秒 # pidstat -r -p 3334 1 -p 显示指定进程内存使用情况,刷新间隔1秒 |
| 系统换页情况 | Sar | Sar:系统内存换页情况、内存使用率、缓存和缓冲区用量以及swap使用情况;注意加上-B选项 | # sar -r - B -S 1 -r显示内存使用率、-B显示内存换页、-S显示swap 刷新间隔1秒 |
| 缓存/缓存区用量 | Free Vmstat Sar Slabtop | Cachestat:系统缓存和缓冲区的命中率; Slabtop:系统slap缓存使用情况 | # free -mt # vmstat -w 1 # sar -r -1 # Slabtop 实时显示内核slap缓存区的详细信息 |
| 缓存/缓存区命中率 | Cachetop Cachestat | Cachetop:进程缓存和缓冲区的命中率 Cachestat:系统缓存和缓冲区命中率 安装:bcc-tools 系统内核:4.1以上 | # cachestat 1 # cachetop |
| Swap换入换出 | Vmstat Sar | | # vmstat -w 1 # sar -W 1 每秒从交换分区到系统的交换页面换入换出数量 |
| 内存泄露检查 | Memleak Valgrind | Valgrind:进程内存错误检测器,用来检测内存初始化、泄露、越界访问等各种内存错误, Valgrind不能指定PID进行分析,一般用在发现内存泄漏线下分析; Memleak:内存泄漏检查。 | memleak -p $(pidof app) -a -p 指定进程PID,-a 显示每个内存分配请求的大小以及地址; #Valgrind --tool=memcheck --leak-check=full 执行程序名 |

三、文件系统和磁盘I/O性能分析

|----------------------------------------|----------------------|------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 性能指标 | 工具 | 说明 | 用法举例: |
| 文件系统空间容量、使用量以及剩余空间 | df | df:磁盘空间和索引节点使用量和剩余量 | #df -Th |
| 索引节点容量、使用量以及剩余量 | df | df: 加 -- i 选项 | #df -ih |
| 页缓存和可回收Slab缓存 | Sar Vmstat | Sar : 加 -- r 选项 | #sar -r 1 #vmstat -w 1 |
| 缓冲区 | Sar Vmstat | Sar : 加 -- r 选项 | #sar -r 1 #vmstat -w 1 |
| 目录项、索引节点以及文件系统缓存 | Slaptop | Slaptop:目录项、索引节点以及文件系统缓存 | # slaptop |
| 磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度 | iostat sar Dstat | Iostat:磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度; Sar:磁盘I/O使用率、IOPS、吞吐量以及响应时间; Dstat:磁盘I/O使用率、IOPS、吞吐量; | # iostat -d -x 1 -d --x 表示显示所有磁盘I/O性能指标 # sar -d 1 -p 显示所有磁盘I/O性能指标,刷新间隔1秒 #dstat --top-mem --top-io --top-cpu 找出占用资源最高的进程和用户 |
| 进程I/O大小以及I/O延迟 | Pidstat Iotop | Pidstat:使用 --d 选项,显示进程I/O大小以及I/O延迟; Iotop:按I/O大小对进程排序; | # pidstat -d 1 显示活动进程I/0性能指标,刷新间隔1秒 # iotop 根据I/O大小对进程进程排序 |
| 块设备I/O事件追踪 | Blktrace | blktrace:跟踪块设备I/O事件 | # blktrace -d /dev/sda -o - | blkparse -i -- 输出到终端用"-"表示,可是都是一堆二进制东西,没法看,所以需要实时blkparse来解析; Blkparse 的"-i"后加文件名,blktrace输出为"-"代表终端,blkparse也用"-"来代表终端解析 |
| 进程I/O系统调用追踪 | Strace Perf | strace:通过系统调用跟踪进程的I/O perf trace:跟踪内核中的I/O事件。 Strace 只可以跟踪单个进程,而perf trace可以跟踪所有进程的系统调用。 | # strace -p 32432 -p 指定跟踪PID号;配合lsof -p 32432 分析; # strace -f -T -tt -p 32432 -f 表示跟踪子进程和线程,-T 表示显示系统调用的时长,-tt 显示跟踪事件。 |
| 进程块设备I/O大小跟踪 | Biosnoop biotop | 需要安装bcc工具包,内核大于4.1 | |
| 动态追踪 | Ftrace Bcc Systemtap | Ftrace 用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪内核或应用程序的执行过程 注意:内核大于4.1,需要从源码安装 | |

四、网络性能分析

|----------|----------------------|-------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 性能指标 | 工具 | 说明 | 用法举例: |
| 吞吐量(BPS) | Sar Iftop nethogs | Sar:查看网络接口的网络收发情况 Iftop:查看IP的网络收发情况 Nethogs:查看进程的网络收发情况 | #sar -n DEV 1 显示所有网卡收发情况,刷新间隔1秒 # iftop -i eth1 监控eth1网卡收发情况 # nethogs -d 1 eth1 eth2 查看每个进程使用的带宽,刷新间隔1秒 |
| 吞吐量(PPS) | Sar | | #sar -n DEV 1 |
| 网络连接数 | Netstat Ss | Netstat:显示与IP、TCP、UDP和ICMP协议相关的统计数据 Ss:获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快; | #ss --ltnpu 显示所有tcp/udp协议链接信息 #netstat -ltnpu 显示所有tcp/udp协议链接信息 |
| 网络错误数 | Netstat Sar | | #netstat -i 显示数据链路层信息统计 #netstat --i 显示网络层和传输层信息统计 # sar -n EDEV 1 显示数据链路层网络信息统计 # sar -n EIP 1 显示网络层信息统计 |
| 延迟 | ping hping3 | Ping:基于icmp协议 hping3:基于tcp协议测试网络连通性。 | ping -c3 114.114.114.114 hping3 --c 3 -S -p 8080 192.168.1.11 -c 表示发送3次请求、-S表示设置TCP SYN 、-p 表示端口号为80 |
| 连接跟踪数 | conntrack | Conntrack:查看和管理连接跟踪状况 | # Conntrack -L -o extended -L 表示列表 -o 表示已扩展格式显示 查看链接追踪表内容 |
| 路由 | mtr route traceroute | 查看路由并测试链路信息 | # mtr 134.64.57.129 详细记录主机间流量状况。 #Route --n 显示本机路由表信息 #traceroute --tcp -p 80 -n taobao.com --tcp 使用tcp协议,-p 表示端口,-n 不对结果IP进行反向域名解析 追踪到目标主机的路由信息。 #traceroute -p 8080 -n taobao.com 使用UDP协议追踪。 |
| DNS | dig nslookup | dig、nslookup:排查DNS解析问题; dig可动态追踪解析过程 | # nslookup www.baidu.com 查询主机DNS记录信息 #dig +trace +nodnssec www.baidu.com +trace 表示开启动态追踪,+nodnssec 表示禁止DNS安全扩展 动态追踪DNS解析过程 |
| 防火墙和NAT | iptables | Iptables:配置和管理防火墙及NAT规则 | |
| 网卡功能 | ethtool | ethtool:查看和配置网络接口 | #ethtool -S eth0 查看网卡收发包统计 # ethtool -l eth0、 查看网卡是否支持多队列 |
| 抓包 | Tcpdump Wireshark | Tcpdump:网络抓包工具 Wireshark:网络抓包和图形界面分析工具 | # tcpdump -nn tcp port 80 -w app.pcap 抓取80端口数据包保存为文件,用Wireshark分析; |
| 内核协议栈跟踪 | bcc systemtap perf | Perf:剖析内核协议栈的性能 Systemtap、bcc:动态追踪内核协议栈的行为。 | # perf record -g -p 13788 |

五、推荐安装工具

|------------|------------------------------------------------|-------------|
| 工具 | 软件包 | repo镜像源 |
| mpstat | sysstat-9.0.4-22.el6.x86_64 | Base |
| Sar | sysstat-9.0.4-22.el6.x86_64 | Base |
| Pidstat | sysstat-9.0.4-22.el6.x86_64 | base |
| pstree | psmisc-22.6-15.el6_0.1.x86_64 | Base |
| dstat | dstat-0.7.0-1.el6.noarch | Base |
| tcpdump | tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64 | Base |
| perf | 2.6以上内核自带工具 | base |
| vmstat | procps-3.2.8-25.el6.x86_64 | Base |
| pmap | procps-3.2.8-25.el6.x86_64 | base |
| Slabtop | procps-3.2.8-25.el6.x86_64 | base |
| Cachetop | bcc-tools需要内核版本为4.1或者更新的版本 | epel |
| Cachestat | bcc-tools需要内核版本为4.1或者更新的版本 | epel |
| Memleak | bcc-tools需要内核版本为4.1或者更新的版本 | epel |
| blktrace | blktrace-1.0.1-6.el6.x86_64 | base |
| strace | strace-4.5.19-1.17.el6.x86_64 | base |
| iftop | 可源码安装 | epel |
| nethogs | 可源码安装 | epel |
| netstat | net-tools-1.60-110.el6_2.x86_64 | base |
| ss | iproute-2.6.32-31.el6.x86_64 | base |
| conntrack | 源码安装conntrack-tools 内核> = 2.6.18 | epel |
| mtr | mtr-0.75-5.el6.x86_64 | base |
| route | net-tools-1.60-110.el6_2.x86_64 | base |
| traceroute | traceroute-2.0.14-2.el6.x86_64 | base |
| dig | bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 | base |
| nslookup | bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 | base |
| ethtool | ethtool-3.5-1.el6.x86_64 | base |

相关推荐
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@5 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo5 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
yaosheng_VALVE7 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
看山还是山,看水还是。7 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
扣得君7 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go8 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell