Linux系统资源分析手段:CPU,内存,磁盘与网络IO的瓶颈定位 |
您所在的位置:网站首页 › linux查看物理内存大小和名称 › Linux系统资源分析手段:CPU,内存,磁盘与网络IO的瓶颈定位 |
Linux性能分析技巧:观察CPU,内存,磁盘与网络IO的限制
前言:性能分析手段的应用场景常用调试命令汇总dstatpidstattoppsstraceltracelsofperfsar
CPUuptime
内存free:vmstat
磁盘iostat
网络pingnetstattcpdump
前言:性能分析手段的应用场景
用于优化: 在程序编码完成后,我们通常要对自己编写的工具进行功能测试与性能分析。 ![]() ![]() ![]() 借助汇总角度的系统资源统计工具,我们可以快速清晰地定位进程的性能瓶颈是因为cpu太过密集还是io太慢,是因为内存不足或者是因为网络拥塞。 一般情况下,CPU大部分的时间片都是消耗在用户态和内核态上。 sys和user间的比例是相互影响的,%sys比例高意味着被测服务频繁的进行用户态和系统态之间的切换,会带来一定的CPU开销,这样分配处理业务的时间片就会较少,造成系统性能的下降。 对于IO密集型系统,无论是网络IO还是磁盘IO,一般都会产生大量的中断,从而导致%sys相对升高,其中磁盘IO密集型系统,对磁盘的读写需要占用大量的CPU,会导致%iowait的值一定比例的升高,所以当出现%iowait较高时,需排查是否存在大量的不合理的日志操作,或者频繁的数据载入等情况; dstatdstat是一个命令行工具,用于监控系统资源使用情况。它可以展示CPU、内存、磁盘I/O、网络流量等数据,帮助用户了解系统的整体运行情况。 下面是dstat命令默认情况下展示的内容: CPU信息:包括CPU使用率、上下文切换次数、中断次数、软中断次数等。 内存信息:包括物理内存使用情况、交换空间使用情况等。 磁盘I/O信息:包括每秒读写速度、IOPS(每秒I/O操作数)等。 网络信息:包括发送/接收数据包数量、发送/接收速度等。 系统信息:包括每秒钟的进程创建数量、系统时间等。此外,dstat还支持许多插件,可以展示更加详细的信息,例如TCP连接数量、磁盘空间使用情况、进程状态等。用户可以通过指定插件名称或缩写来启用相应的插件。 pidstat展示了各个进程或使用-e 指定进程的系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。 注意:以上数据中的“%”表示占用率百分比。 toptop 命令的汇总区域显示了五个方面的系统性能信息:负载、进程状态、cpu使用率、内存使用、交换分区。 top运行过程中可以使用数字键1(非小键盘),查看cpu占用信息 同时推荐一款iotop LINUX进程实时监控工具,界面风格类似top命令 ps命令是Linux操作系统中的一个常用命令,用于显示当前运行进程的状态和信息。在Linux中,每个进程都有一个唯一的进程ID(PID),并且可以根据进程的状态来进行分类。 直接执行显示当前进程的状态: 跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。 A library call tracer 跟踪进程调用库函数的情况 lsof是"list open files"的缩写,用于列出当前系统打开的文件(包括网络连接、设备、管道等)。 常用选项: -i:列出所有网络连接 -c:根据进程名筛选 -p:根据进程ID筛选 -u:根据用户ID筛选有以下几个比较好用的选项 列出某个端口的网络连接:lsof -i:PORT 列出某个应用程序使用的文件:lsof -c APPNAME 列出某个目录下所有打开的文件:lsof +D DIRECTORY perfperf 是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。 最主要的功能是用来查看某个cpu在执行某函数消耗的性能百分比,结合线程cpu绑核可以清晰地量化某个线程的性能损耗; sarsar命令是一个性能分析工具,可以通过收集系统的各种统计数据,如CPU利用率、内存使用情况、磁盘活动等来监测系统的运行状态。sar命令可用于实时监控和历史记录,还可以生成报告以便更深入地分析数据。 -u:显示CPU的使用情况 -r:显示内存的使用情况 -d:显示磁盘的活动情况 -n:显示网络的使用情况 -p:显示进程的活动情况如每隔1秒钟收集一次网络中tcp使用情况并显示在屏幕上。 Linux CPU使用率主要是从以下几个维度进行统计: %usr:普通进程在用户模下下执行的时间; %sys:进程在内核模式下的执行时间; %nice:被提高优先级的进程在用户模式下的执行时间; %idle:空闲时间。 %iowait:等待I/O完成的时间。 %irp:处理硬中断请求花费的时间。 %soft:处理软中断请求花费的时间。 %steal:是衡量虚拟机CPU的指标,是指分配给本虚拟机的时间片被同一宿主机别的虚拟机占用,一般%steal值较高时,说明宿主机的资源使用已达到瓶颈;以下是针对性更强的命令,也许展示的信息不是那么全面,但是当我们通过上述命令定位到问题,只关心某一方面系统参数时,以下命令更为合适。 CPU uptimeuptime 能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷; vmstat是一个虚拟内存统计工具,用于监测系统的虚拟内存状态和进程活动情况。 iostat -x 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息
netstat:用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于和grep配合检验本机各端口的网络连接情况。 tcpdump是一个网络数据包分析工具,可以捕获和解析从网络中传输的数据包,也是网工从业者的好帮手。 基本语法: tcpdump [options] [expression] 参数说明: -i:指定要监听的网络接口,如eth0。 -n:不进行DNS反向查询,直接显示IP地址。 -A:以ASCII文本形式显示数据包内容。 -X:以16进制和ASCII文本混合形式显示数据包内容。 -q:快速模式,只显示关键信息,不输出详细信息。 -c:指定要捕获的数据包数量。 -s:指定要捕获的数据包长度。 -v:详细模式,显示更为详细的信息。 -vv:非常详细模式,显示更为详细的信息。 -w:将捕获到的数据包保存到文件中。 -r:读取保存在文件中的数据包。表达式说明: tcpdump支持使用表达式来过滤数据包。表达式可以根据协议类型、数据包来源和目标、端口号等条件来进行过滤。常见表达式如下: host:指定数据包的来源或目标主机。 net:指定数据包的来源或目标网络。 port:指定数据包的源或目标端口。 tcp、udp、icmp:指定数据包的协议类型。 and、or、not:逻辑运算符,用于组合表达式。 dst、src:指定数据包的目标或来源地址。比如从ens33网卡捕获80端口,ip为本机的包,限制12帧并落地为dump.pcap文件,也可以从某个pcap包读取帧; 本专栏知识点是通过的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以去零声官网查看详细的服务: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |