【linux性能观测工具——CPU 内存 虚拟内存 文件系统 进程 程序剖析记录报告 内核配置 静态调优思路 】

本文详细介绍了Linux系统中的多种性能观测工具,包括uptime、vmstat、mpstat、sar、ps、pidstat、strace、time、top、perf等,分析了它们在CPU、内存、磁盘I/O、进程等方面的监控功能。文章还提到了性能调优的思路,如关注系统负载、内存使用、CPU利用率等,并讨论了为什么有时选择vmstat和uptime而非top的原因。此外,文章还涉及了内核配置、coredump设置、静态性能调优等方面,为系统管理员提供了全面的性能监控和分析指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

性能分析

观测工具

uptime

uptime命令在Linux系统中被用来查看系统的运行时间,同时也展示了一些其他的系统信息。

当你在终端输入uptime命令后,你会得到类似这样的结果:

15:26:18 up  2:00,  1 user,  load average: 0.00, 0.01, 0.05

这个结果分为四个部分:

  1. 15:26:18 :这是当前的系统时间。
  2. up 2:00 :这表示系统已经运行了2小时。
  3. 1 user :这表示当前有1个用户登录系统。
  4. load average: 0.00, 0.01, 0.05 :这表示系统负载平均值。三个值分别代表过去1分钟,5分钟和15分钟的系统负载平均值。你可以判断负载在15 分钟内(或者其他时间段)是在上升、下 降,还是平稳。

系统负载平均值的理解:它是指系统中的任务或请求等待处理的程度,用于描述系统当前的负载状态以及系统资源(如CPU、磁盘I/O、网络等)的使用情况

系统负载表示的是系统单位时间内的任务时间占比。平均负载就是单位时间内运行队列中的平均任务数。运行队列中包含了正在运行的任务和等待运行的任务(等待CPU时间,或者等待IO)。通过汇总正在运行的线程数 (使用率)和正在排队等待运行的线程数(饱和度)计算得出。计算平均负载的一个新方法是把使用率加上线程调度器延时得出,而不是去取样队列长度,从而提高精度。这些计算方法的内幕可以参考 [McDougall 06b]中的文档。

这个值的意义为,平均负载大于CPU 数量表示CPU 不足以服务线 程,有些线程在等待。如果平均负载小于CPU 数量,这(很可能)代 表还有一些余量,线程可以在它们想要的时候在CPU 上运行。

vmstat

vmstat 命令(虚拟内存统计)是一个非常实用的系统资源监视工具,它可以提供关于系统进程、内存、分页、磁盘I/O和CPU活动的报告。下面是它可能输出的不同信息的简要概述

vmstat 1 -Sm  修改输出单位为MB
vmstat -a输出非活动和活动页缓存的明晰
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 14174328 375188 880748    0    0    19     2    9   12  0  0 100  0  0
 
进程:运行(r)、阻塞(b)的进程数量。
内存:包括被交换出的虚拟内存量(swpd)、空闲内存(free)、缓冲内存(buff)、缓存内存(cache)
分页:进出信息(si 和 so)。
磁盘I/O:块接收(bi)和发送(bo)的数量。
系统:中断(in)和上下文切换(cs)次数。
CPU:CPU的使用情况,包括非空闲、用户空间运行、内核空间运行和空闲时间(us, sy, id 和 wa)。

mpstat

mpstat 是一个常用的 Linux 命令,用于报告关于处理器相关的统计信息。它可以提供 CPU 使用率,以及其他与中断、CPU 事件等的信息。这是非常有用的,特别是在性能调优和查找系统瓶颈时。

mpstat   查看所有CPU的统计信息
mpstat -P ALL  查看每个CPU的统计信息
mpstat 1  进行实时监视,你可以加上间隔时间(单位:秒)
Linux 4.15.0-142-generic (ssc) 	2024年04月17日 	_x86_64_	(16 CPU)

11时00分39秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11时00分39秒    1    0.05    0.00    0.13    0.04    0.00    0.01    0.00    0.00    0.00   99.78
%usr:用户空间的 CPU 使用率
%nice:改变了优先级的用户空间进程的 CPU 使用率
%sys:内核空间的 CPU 使用率
%iowait:CPU 等待 I/O 完成的时间百分比
%irq:处理硬件中断的时间百分比
%soft:处理软件中断的时间百分比
%steal:虚拟环境中等待虚拟 CPU 的时间百分比
%guest:运行虚拟 CPU 的时间百分比
%idle:CPU 空闲的时间百分比

sar

/var/log/sysstatsysstat包创建的一个目录,用于存储由sar命令收集的系统性能数据。这些性能数据能够帮助系统管理员检查服务器的历史性能数据。

文件不存在

如果你在/var/log/sysstat下没有找到文件,可能有以下原因:

  1. sysstat软件包可能没有安装。你可以通过运行以下命令来安装它:

    • 在Debian基础的系统(如Ubuntu)上运行:

      sudo apt-get install sysstat
      
    • 在RHEL/CentOS中运行:

           sudo yum install sysstat
      
  2. sysstat默认是关闭历史数据收集的,如果想要开启,你需要编辑/etc/default/sysstat(Debian/Ubuntu)或/etc/sysconfig/sysstat(CentOS/RHEL)配置文件,将ENABLED="false"改为ENABLED="true",然后重启sysstat服务。

    sudo service sysstat restart
    sudo /etc/init.d/sysstat restart
    

    服务状态查询

    systemctl status  sysstat
    sudo service sysstat status
    
  3. 你可能需要等待一段时间。数据文件是由 cron 任务在一段时间间隔后生成的,通常是每10分钟。

    如果你想调整数据收集的频率,可以编辑/etc/cron.d/sysstat文件。这个文件定义了sar命令的运行间隔和收集的数据类型。例如:

    */10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
    

    这行表示每10分钟运行一次 debian-sa1命令来收集数据。

  4. 确保 /etc/cron.d/sysstat 文件中的 cron 任务未被注释掉。

使用

sar 是一个非常强大的性能监控工具。它可以对系统活动信息进行详细的报告,包括 CPU、内存、磁盘 I/O、网络流量、中断、运行队列长度、上下文切换次数等。sar 也可以用于收集历史系统性能数据

sar [选项] 间隔时间 统计次数

sar 命令默认确实只收集 CPU 使用率的数据,但是实际上它还可以收集许多其他类型的数据,这取决于你如何使用该命令。

要让 sar 收集除了 CPU 信息以外的数据,你需要在 sar 命令后面加上不同的参数。以下是一些常用的参数案例:

-b:报告 I/O 和传输速率统计信息。
Linux 4.15.0-142-generic (ssc) 	2024年04月17日 	_x86_64_	(16 CPU)

11时20分06秒  LINUX RESTART	(16 CPU)

11时25分01秒       tps      rtps      wtps   bread/s   bwrtn/s
11时35分01秒      0.16      0.01      0.15      2.35      2.55
平均时间:      0.16      0.01      0.15      2.35      2.55

tps: 每秒钟磁盘传输次数。即I/O请求数。一次 I/O 请求可以读写多个扇区。
rtps: 每秒钟为了读取设备而进行的I/O请求数。
wtps: 每秒钟为了写设备而进行的I/O请求数。
bread/s: 每秒钟从设备读取的数据量,单位为KB。
bwrtn/s: 每秒钟写入设备的数据量,单位为KB。
-n DEV:报告网络设备统计信息。
inux 4.15.0-142-generic (ssc) 	2024年04月17日 	_x86_64_	(16 CPU)

11时20分06秒  LINUX RESTART	(16 CPU)

11时25分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
11时35分01秒        lo      0.23      0.23      0.02      0.02      0.00      0.00      0.00      0.00
11时35分01秒     ens33      0.49      0.12      0.05      0.03      0.00      0.00      0.00      0.00
平均时间:        lo      0.23      0.23      0.02      0.02      0.00      0.00      0.00      0.00
平均时间:     ens33      0.49      0.12      0.05      0.03      0.00      0.00      0.00      0.00

IFACE: 网络接口的名称。
rxpck/s: 每秒接收的包数(packets received per second)。
txpck/s: 每秒发送的包数(packets transmitted per second)。
rxKB/s: 每秒接收的数据量,单位为千字节(KB received per second)。
txKB/s: 每秒发送的数据量,单位为千字节(KB transmitted per second)。
rxcmp/s: 每秒接收的压缩数据包数(compressed packets received per second)。
txcmp/s: 每秒发送的压缩数据包数(compressed packets transmitted per second)。
rxmcst/s: 每秒接收的多播数据包数(multicast packets received per second)。
-r:报告内存利用情况。
Linux 4.15.0-142-generic (ssc) 	2024年04月17日 	_x86_64_	(16 CPU)

11时20分06秒  LINUX RESTART	(16 CPU)

11时25分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11时35分01秒  14002884   2399328     14.63    377268    723708   3873704     22.26   1353912    395676         0
平均时间:  14002884   2399328     14.63    377268    723708   3873704     22.26   1353912    395676         0

kbmemfree:空闲的内存量(以KB为单位)。
kbmemused:已使用的内存量(以KB为单位)。
%memused:已使用的内存百分比。
kbbuffers:用于缓冲的内存量(以KB为单位)。
kbcached:用于缓存的内存量(以KB为单位)。
kbcommit:当前提交的内存量(以KB为单位),应该在交换空间中保留以保证系统运行所需内存。
%commit:当前提交的内存(和未保留内存)在总内存(包括交换空间)中所占的百分比。
通过这些信息,你可以获取您的系统如何使用和分配内存的全面视图。

-u:报告 CPU 利用情况。
Linux 4.15.0-142-generic (ssc) 	2024年04月17日 	_x86_64_	(16 CPU)

11时20分06秒  LINUX RESTART	(16 CPU)

11时25分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
11时35分01秒     all      0.01      0.00      0.03      0.00      0.00     99.96
11时45分01秒     all      0.01      0.00      0.03      0.00      0.00     99.96
平均时间:     all      0.01      0.00      0.03      0.00      0.00     99.96

%user:运行用户进程的CPU时间百分比。这意味着CPU花费多少时间来执行用户的进程(比如用户运行的程序),但不包括系统对这些进程的服务时间(比如对进程的调度与管理,这部分时间会被算作系统时间)。
%nice:改变过优先级的(user mode下nice值改变的)进程运行所占用CPU时间的百分比。
%system:在kernel mode下运行的CPU时间百分比。这部分时间算的是系统为用户进程服务所花费的时间,比如进程的调度、管理等。
%iowait:等待I/O完成的CPU时间百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而消耗的CPU时间的百分比。
%idle:CPU空闲时间百分比。
注意:各列的百分比加起来等于100%。
-f:显示历史信息
`-B:报告 Linux 系统的页面交换状态的
Linux 4.15.0-142-generic (ssc) 	2024年04月18日 	_x86_64_	(16 CPU)

17时12分00秒  LINUX RESTART	(16 CPU)

17时15分01秒  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
17时25分01秒      0.11      1.26     13.10      0.00      9.18      0.00      0.00      0.00      0.00
17时35分01秒      2.75      1.91     21.54      0.01     18.65      0.00      0.00      0.00      0.00
平均时间:      1.43      1.59     17.32      0.00     13.92      0.00      0.00      0.00      0.00

pgpgin/s:每秒从磁盘读入页的数量。这些页可能实际上是文件数据的一部分,也可能是作为进程开始使用某些内存而进行换入的交换区域的页。
pgpgout/s:每秒写入磁盘的页的数量。注意这个指标并不包括由于系统内存紧缺而换出的页面。
fault/s:每秒发生的主(非I/O)页面错误数。这些错误包括那些已经在内存中或者需要从磁盘读取的页面。
majflt/s:每秒发生的主要错误的数量。这些是由于所请求的页面不在内存中,并且必须从磁盘上的分页区域或从文件系统中读取。
pgfree/s:每秒被内核释放的页数。
pgscank/s:每秒被 kswapd 守护进程扫描以回收的页数。
pgscand/s:每秒直接扫描以回收的页数。
pgsteal/s:每秒被回收的页数。
-H:大页面统计信息
Linux 4.15.0-142-generic (ssc) 	2024年04月18日 	_x86_64_	(16 CPU)

17时12分00秒  LINUX RESTART	(16 CPU)

17时15分01秒 kbhugfree kbhugused  %hugused
17时25分01秒         0         0      0.00
17时35分01秒         0         0      0.00
17时45分01秒         0         0      0.00
17时55分01秒         0         0      0.00
18时05分01秒         0         0      0.00
18时15分01秒         0         0      0.00
18时25分01秒         0         0      0.00
平均时间:         0         0      0.00


-R:内存统计信息
17时12分00秒  LINUX RESTART	(16 CPU)

17时15分01秒   frmpg/s   bufpg/s   campg/s
17时25分01秒     -0.54      0.05      0.04
17时35分01秒     -1.42      0.06      0.66
17时45分01秒     -1.34      0.03      0.00
17时55分01秒     -0.52      0.04      0.00
18时05分01秒      0.12      0.01      0.00
18时15分01秒      0.06      0.02      0.00
18时25分01秒      0.65      0.03      0.00
平均时间:     -0.43      0.03      0.10
frpg 释放的存储器页面,负值表明分配 页面/s
bufpg 缓冲高速缓存增加值(增长) 页面/s
campg 页面高速缓存增加值 页面/s

-S:交换空间统计信息
17时15分01秒 kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
17时25分01秒    998396         0      0.00         0      0.00
17时35分01秒    998396         0      0.00         0      0.00
17时45分01秒    998396         0      0.00         0      0.00
17时55分01秒    9983
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值