1. 前言
本文的目的主要是对linux的调式与性能工具有个大体的了解。
本文主要是我观看《Linux 性能工具》视频做的个人笔记分享,视频作者是 B站的内核笔记
,视频链接是:https://www.bilibili.com/video/BV11t4y1o7vk/?spm_id_from=333.999.0.0&vd_source=f9e3c231f1337d0b6731ff9df420b289 欢迎大家前去观看学习,此处不是广告,而是本人尊重原创,也衷心的感谢每一位知识传播者。如有侵权,请联系删除。
2. linux调式框架
这张图基本上涵盖了Linux调式相关的所有工具和所调式的模块功能。一个产品的性能指标众多,可以通过多种方式进行分类。传统上,它们可以被分为硬件性能指标和软件性能指标。从Linux操作系统的角度来看,性能指标可以大致分为以下几类,但需要注意的是,这些分类并不是严格互斥的,而是相对的,并且它们之间相互影响,在实际应用中可能会有重叠:
- CPU性能指标 :涉及处理器的时钟频率、核心数、缓存效率、指令集以及CPU的负载情况等。
- 内存性能指标 :包括内存的容量、访问速度、带宽、内存使用率、分页和交换活动等。
- I/O性能指标 :关乎系统的输入输出处理能力,如磁盘的读写速度、I/O操作的响应时间和吞吐量等。
- 网络性能指标 :包括网络连接的带宽、延迟、丢包率、错误率以及网络利用率等。
- 系统综合性能指标 :反映整个系统的运行状况,如系统的平均负载、启动时间、响应时间和系统稳定性等。
- 应用层面性能指标 :特定应用程序的性能表现,如事务处理速度、响应时间、并发处理能力和错误率等。
- 能耗性能指标 :随着对能效的重视,设备的能耗水平、电源效率和热输出也成为了重要的性能指标。
- 可靠性与可用性指标 :涉及系统的冗余能力、故障恢复时间和系统的总体可用性。
- 安全性性能指标 :在某些环境中,系统的安全性能也非常重要,包括加密性能、安全更新的及时性和漏洞的响应处理时间。
3. CPU性能指标
4. CPU性能工具
在Linux系统中,有多种工具可用于监控CPU性能。以下是一些常用的CPU性能工具和它们的用途:
- top:
- 显示实时更新的进程和CPU使用情况。
- 交互式界面允许用户按CPU使用率、内存使用率等排序。
- htop:
- 提供了一个彩色界面,并且可以通过按键与进程交互。
- 允许用户杀死进程、重新分配进程的nice值等。
- vmstat:
- 报告虚拟内存统计信息,包括CPU使用率、上下文切换次数、系统空闲时间等。
- mpstat:
- 来自
sysstat
包,用于报告CPU统计信息。 - 可以显示所有CPU的平均使用率或特定CPU的使用情况。
- iostat:
- 主要用于报告CPU和输入/输出统计信息。
- pidstat:
- 也是
sysstat
包的一部分,用于显示每个进程的统计信息。
- sar:
- 系统活动报告器,可以显示历史数据或实时数据。
- atop:
- 提供了一个ASCII界面,显示进程、CPU、内存、磁盘和网络使用情况。
- nmon:
- 类似于atop,但提供了更多的性能数据。
- lsof:
- 列出打开的文件,对于查找打开文件的进程特别有用。
- free:
- 显示内存使用情况,包括已使用、空闲、缓冲区和缓存。
- smem:
- 提供了关于内存使用的详细报告,特别是共享内存。
- iftop:
- 类似于top,但用于显示网络接口的实时带宽使用情况。
- netstat:
- 显示网络连接、路由表、接口统计等。
- ss:
- 显示套接字统计信息,是netstat的现代替代品。
- perf:
- 用于性能分析,可以监控硬件性能计数器。
5. 内存性能指标
6.内存性能工具
在Linux系统中,有多种工具可用于监控内存性能。以下是一些常用的内存性能工具和它们的用途:
- free:
- 显示系统内存的总量、已用、剩余、共享、缓存、缓冲区等信息。
- 命令示例:
free -h
,以易于人们可读的方式显示内存使用情况。
- vmstat:
- 提供系统整体性能数据,包括内存使用情况、缓存和缓冲区的数据。
- 命令示例:
vmstat 1
,每秒输出一次系统性能数据。
- top:
- 实时监控系统进程的内存占用情况,包括虚拟内存、常驻内存、共享内存和swap内存。
- 交互式界面允许用户按内存使用率排序,并进行进程管理。
- htop:
- 交互式的top命令,提供更直观的进程信息展示。
- 允许用户与进程交互,如杀死进程或调整nice值。
- ps:
- 显示进程的详细信息,包括内存占用。
- 命令示例:
ps aux
,显示所有进程的详细信息。
- smem:
- 提供关于系统中已经使用的和共享的实际内存大小,试图提供一个更为可靠的当前内存使用数据。
- 命令示例:
smem -m
,显示内存使用情况。
- atop:
- 显示所有进程活动的性能监控工具,包含了CPU,内存,交换空间,磁盘和网络层的度量指标。
- sar:
- 收集、报告、保存系统活动的信息,包括CPU、内存等。
- 命令示例:
sar -r
,显示内存的使用情况。
- cachestat 和 cachetop:
- 查看系统缓存的读写命中情况和监控进程的缓存读写命中情况。
- valgrind:
- 用于用户态内存泄漏检测和内存性能分析。
- memleak:
- 用于内核态检测内存泄漏。
- lsof:
- 列出打开的文件,对于查找打开文件的进程特别有用。
- pmap:
- 显示进程的内存映射信息。
通过这些工具,我们可以有效地监控和分析Linux系统的内存性能,从而进行相应的优化和故障排除。
7. I/O性能指标
8. I/O性能工具
在Linux系统中,监控I/O性能是非常重要的,因为I/O性能直接影响到系统的整体性能和响应速度。以下是一些常用的I/O性能监控工具:
- iostat:
- 报告CPU和输入/输出统计信息,可以用来监视系统输入/输出设备和整体系统的运行状况。
- 命令示例:
iostat 1
,每秒输出一次CPU和I/O统计信息。
- vmstat:
- 提供虚拟内存统计信息,同时也显示了系统的I/O情况,包括每秒的读/写操作数。
- 命令示例:
vmstat -d 1
,每秒输出一次磁盘I/O统计信息。
- iotop:
- 一个基于top命令的I/O监控工具,它可以显示哪些进程正在使用I/O资源。
- 命令示例:
sudo iotop
,实时显示进程的I/O使用情况。
- atop:
- 一个全功能的系统监控工具,它提供了CPU、内存、I/O等资源的使用情况。
- 命令示例:
atop -d 1
,每秒输出一次系统资源统计信息。
- htop:
- 虽然htop主要用于显示进程信息,但它也提供了一些I/O相关的统计信息。
- lsof:
- 列出打开的文件,可以用来查看哪些进程打开了特定的文件或设备,从而间接了解I/O活动。
- 命令示例:
lsof -i
,显示所有打开的网络文件。
- fio:
- 是一个I/O测试和基准工具,用于对磁盘进行性能测试和验证。
- 命令示例:
fio --filename=/dev/sda --direct=1 --size=1G --rw=randwrite --ioengine=libaio --runtime=1m --time_based
,执行写入性能测试。
- bonnie++:
- 是一个综合性的文件系统基准测试工具,用于测试存储设备的I/O性能。
- 命令示例:
bonnie++ -u -s 4096 -r 4096 -w 8 -x 8
,执行文件系统性能测试。
- dstat:
- 是一个用于生成系统资源统计报告的工具,它整合了多个命令的功能,包括I/O信息。
- 命令示例:
dstat -d
,显示磁盘I/O统计信息。
- nfsiostat:
- 是一个用于监控NFS(网络文件系统)I/O性能的工具。
- asiod:
- 显示AIO(异步I/O)的状态。
- iostat(Oracle):
- Oracle提供的iostat工具,用于监控Oracle数据库的I/O性能。
这些工具各有特点,可以根据需要选择适合的工具进行I/O性能监控。例如,iostat
和 vmstat
可以快速查看系统级别的I/O使用情况,而 iotop
和 fio
则提供了更深入的I/O分析功能。通过这些工具,可以有效地监控和分析Linux系统的I/O性能,从而进行相应的优化和故障排除。
9. 网络性能指标
10. 网络性能工具
在Linux系统中,网络性能工具用于监控和分析网络活动、带宽使用、网络延迟和丢包率等关键指标。以下是一些常用的网络性能监控工具:
- iftop:
- 类似于top命令,但专注于网络带宽使用情况。
- 实时显示每个网络连接的带宽使用。
- netstat:
- 显示网络连接、路由表、接口统计等网络信息。
- 命令示例:
netstat -tuln
,显示所有网络连接和监听端口。
- ss:
- 是netstat的现代替代品,用于显示套接字统计信息。
- 命令示例:
ss -tunap
,显示所有TCP连接及其状态。
- ping:
- 用于测试网络连通性和网络延迟。
- 命令示例:
ping www.example.com
,测试到指定主机的连通性和延迟。
- mtr(My Traceroute):
- 结合了traceroute和ping的功能,用于跟踪数据包到达目的地的路径和延迟。
- 命令示例:
mtr www.example.com
。
- traceroute:
- 显示数据包到目的主机之间每一跳的信息。
- 命令示例:
traceroute www.example.com
。
- iperf:
- 网络性能测试工具,用于测试TCP和UDP带宽性能。
- 命令示例:
iperf -s
,启动iperf服务器等待客户端连接。
- nethogs:
- 显示每个进程的网络带宽使用情况。
- 命令示例:
nethogs
。
- tcpdump:
- 强大的网络抓包工具,用于捕获和分析网络流量。
- 命令示例:
tcpdump -i eth0
,捕获指定网络接口的流量。
- wireshark:
- 是一个网络协议分析工具,可以捕获和分析网络上的数据包。
- 通常用于深入分析网络问题。
- nfdump:
- 用于分析和处理netflow数据,帮助了解网络使用情况。
- iptraf:
- 是一个交互式的网络监控工具,可以显示网络接口的实时统计信息。
- ifconfig(虽然已被ip命令取代):
- 用于配置或显示Linux内核中网络接口的网络参数。
- ip:
- 是ifconfig命令的现代替代品,用于显示和操作路由、网络设备、接口等。
- ethtool:
- 用于显示和设置网络接口的参数。
- speedtest-cli:
- 一个命令行工具,用于测试网络的下载和上传速度。
- tc:
- 是traffic control工具,用于管理和配置网络流量控制规则。
这些工具可以帮助系统管理员监控网络性能,识别瓶颈,分析网络问题,并进行相应的优化。例如,iftop
和 netstat
可以快速查看网络使用情况,而 iperf
和 tcpdump
则提供了更深入的网络性能分析功能。
11. 结尾
就像性能的分类一样,各种工具也没有严格的分类界限,实际中要根据问题、环境选择合适的工具分析调式或者相互补充,比如perf就常用于各类性能分析中,当然了,工具也只是用于分析、解决问题的一个工具,解决问题才是硬道理,比如printk也是一个工具,把问题解决了,做好产品卖出去了就算是一块砖头也是个科技含量高的宝贝。千万不要因不会用这些工具而畏惧,可以慢慢了解,有助于提高解决问题的效率,看待问题的维度,总之学无止境……
最后,喜欢的朋友帮忙点个赞,谢谢