《Linux从小白到高手》理论篇(九):Linux的资源监控管理

本篇介绍Linux的资源监控管理。

1、CPU 资源管理

进程调度:

Linux 采用公平的进程调度算法,确保每个进程都能获得合理的 CPU 时间。调度算法会根据进程的优先级、等待时间等因素来决定哪个进程获得 CPU 使用权。

可以通过调整进程的优先级来影响其获得 CPU 的机会。例如,使用nice和renice命令可以调整进程的优先级,数值越低优先级越高。

多核处理器管理:

Linux 能够充分利用多核处理器的优势,将进程分配到不同的核心上执行,提高系统的并行处理能力。

可以使用taskset命令将特定的进程绑定到指定的 CPU 核心上,以确保某些关键进程能够获得稳定的 CPU 资源。

2、内存资源管理

内存分配与回收:

Linux 使用虚拟内存管理系统,将物理内存和磁盘空间结合起来,为进程提供内存资源。当进程需要内存时,系统会从空闲的物理内存中分配;当物理内存不足时,会将部分不常用的内存页交换到磁盘上的交换空间(swap)。

可以通过调整/proc/sys/vm/swappiness参数来控制系统将内存页交换到 swap 的倾向。值为 0 表示尽量不使用 swap,值为 100 表示积极使用 swap。

内存缓存与缓冲:

Linux 会使用一部分内存作为文件系统缓存和磁盘缓冲,以提高文件和磁盘 I/O 的性能。这些缓存会根据系统的内存使用情况自动调整大小。

可以使用free命令查看系统的内存使用情况,包括总内存、已使用内存、空闲内存、缓存和缓冲等信息。

3、磁盘资源管理

文件系统管理:

Linux 支持多种文件系统,如 ext4、XFS 等。不同的文件系统在性能、可靠性和功能方面有所不同,可以根据实际需求选择合适的文件系统。

可以使用文件系统的工具和命令来管理磁盘空间,如df命令查看磁盘使用情况,du命令查看目录和文件的磁盘占用情况。

磁盘调度策略:

Linux 内核有多种磁盘调度算法,如 CFQ(完全公平排队)、Deadline 和 Noop。不同的调度算法适用于不同的应用场景,可以根据系统的负载和需求进行调整。

可以通过修改/sys/block/sda/queue/scheduler(假设磁盘设备为sda)文件来选择磁盘调度策略。

4、网络资源管理

网络带宽控制:

Linux 可以通过流量整形(traffic shaping)和队列规则(queue discipline)来控制网络带宽的使用。例如,可以使用tc命令来设置网络接口的带宽限制、优先级等。

可以根据不同的网络应用或用户需求,为特定的网络流量分配不同的带宽份额,确保关键应用的网络性能。

网络连接管理:

Linux 可以通过防火墙(如iptables或firewalld)来管理网络连接,控制哪些 IP 地址、端口和协议可以访问系统。

可以使用网络监控工具(如iftop、nethogs等)来实时查看网络流量的使用情况,以便及时发现和解决网络问题。

5、资源监控与调整

资源监控工具:

Linux 提供了许多工具来监控系统资源的使用情况,如top、htop用于监控 CPU 和内存使用情况,iostat用于监控磁盘 I/O 性能,netstat和ss用于监控网络连接等。

这些工具可以帮助管理员及时发现资源瓶颈和问题,并采取相应的措施进行调整。

资源调整策略:

根据资源监控的结果,可以采取不同的调整策略。例如,如果发现某个进程占用过多的 CPU 资源,可以调整其优先级或限制其 CPU 使用率;如果磁盘空间不足,可以清理不必要的文件或扩展磁盘容量。

通过合理的资源管理,Linux 系统可以在不同的工作负载下保持高效、稳定的运行,为用户提供良好的性能和可靠性。

6、Linux资源管理常用命令

free内存监控

1、基本用法

--直接运行free:输入free命令并回车,将显示系统内存的总量、已使用量、空闲量、共享内存量、缓冲 / 缓存量以及交换分区的使用情况。

--输出的单位通常是千字节(KB)。

2、显示单位选择

--以兆字节(MB)为单位显示:

--使用free -m命令,这样可以更直观地查看内存使用情况,尤其是在内存较大的系统中。

--例如,输出可能显示 "total used free shared buffers cached" 等字段,每个字段的值都是以兆字节为单位。

--以G字节(GB)为单位显示:

--使用free -g命令,适合内存非常大的系统。

3、显示特定信息

仅显示内存信息,不显示交换分区信息:

使用free -m --memonly或free -m -o,这样可以专注于内存的使用情况,排除交换分区的干扰。

以人类可读的格式显示:

使用free -h,它会自动选择合适的单位(KB、MB、GB 等)来显示内存和交换分区的大小,使输出更易于理解。

四、持续监测内存使用情况

使用watch命令结合free:

例如,watch -n 5 free -m将每 5 秒执行一次free -m命令,动态显示内存使用情况的变化。

五、输出字段解释

total:系统总的物理内存或交换分区大小。

used:已经被使用的内存或交换分区大小。

free:未被使用的内存或交换分区大小。

shared:被多个进程共享的内存大小。

buff/cache:用于磁盘缓存和缓冲区的内存大小。

注:buffers 与 cached 的区别:

--buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的 metadata 以及 tracking in-flight pages.

--cached 是用来给文件做缓冲。也就是说:buffers 是用来存储,目录里面有什么内容,权限等等。

而 cached 直接用来记忆我们打开的文件

available(在一些系统中可能需要特定选项才能显示):表示系统中可供新进程使用的估计内存大小。

通过灵活使用free命令及其选项,可以方便地监控系统内存的使用情况,及时发现内存不足或内存泄漏等问题,以便采取相应的措施进行优化和调整。

2、vmstat

在 Linux 中,vmstat(Virtual Memory Statistics)命令用于显示虚拟内存、进程、CPU 活动等系统信息。

1、基本用法

直接运行vmstat:

--输入vmstat命令并回车,将显示系统的一些关键性能指标,包括进程、内存、交换分区、I/O、系统和 CPU 的信息。

--默认情况下,输出是一次性的,显示自系统启动以来的平均统计信息。

2、显示间隔和次数

以指定时间间隔显示统计信息:

--使用vmstat interval,其中interval是时间间隔,单位为秒。例如,vmstat 5将每 5 秒显示一次系统统计信息。

--显示指定次数的统计信息:

使用vmstat interval count,其中count是要显示的次数。例如,vmstat 2 3将每 2 秒显示一次系统统计信息,共显示 3 次。

3、输出字段解释

procs:

r:运行队列中的进程数,即等待 CPU 时间片的进程数量。

b:处于不可中断睡眠状态的进程数,通常是等待 I/O 完成的进程。

memory:

swpd:使用的交换分区大小(单位为 KB)。

free:空闲内存大小。

buff:用于缓冲区的内存大小。

cache:用于缓存的内存大小。

swap:

si:从磁盘交换到内存的页面数量(单位为 KB/s)。

so:从内存交换到磁盘的页面数量(单位为 KB/s)。

io:

bi:从块设备读取的块数量(单位为块 /s)。

bo:向块设备写入的块数量(单位为块 /s)。

system:

in:每秒的中断次数。

cs:每秒的上下文切换次数。

cpu:

us:用户空间占用 CPU 的百分比。

sy:内核空间占用 CPU 的百分比。

id:空闲 CPU 的百分比。

wa:等待 I/O 的 CPU 时间百分比。

st:被虚拟机偷走的 CPU 时间百分比(如果在虚拟化环境中)。

4、持续监控系统性能:

vmstat 5可以每 5 秒显示一次系统性能统计信息,实时了解系统的运行状态。如果发现某个指标异常,可以进一步分析问题所在。

分析内存使用情况:

关注swpd、free、buff和cache字段,可以了解系统的内存使用情况。如果swpd值不断增加,可能表示内存不足,系统正在频繁使用交换分区。

检查 CPU 负载:

us、sy、id和wa字段可以帮助你了解 CPU 的使用情况。如果us和sy值较高,可能表示用户进程和内核占用了较多的 CPU 时间;如果wa值较高,可能表示系统存在 I/O 瓶颈。

通过灵活使用vmstat命令,可以快速了解系统的性能状况,及时发现问题并采取相应的措施进行优化和调整。

3、iostat

iostat(I/O statistics)命令用于报告 CPU 和磁盘 I/O 的统计信息。

1、基本用法

直接运行iostat:

--输入iostat命令并回车,将显示系统自启动以来的 CPU 和磁盘 I/O 的平均统计信息。

--输出包括 CPU 的%user(用户空间占用 CPU 百分比)、%nice(低优先级进程占用 CPU 百分比)、%system(内--核空间占用 CPU 百分比)、%iowait(等待 I/O 完成占用 CPU 百分比)等信息,以及每个磁盘设备的tps(每秒传输次数)、kB_read/s(每秒读取的千字节数)、kB_wrtn/s(每秒写入的千字节数)等信息。

2、显示时间间隔和次数

以指定时间间隔显示统计信息:

--使用iostat interval,其中interval是时间间隔,单位为秒。例如,iostat 5将每 5 秒显示一次系统统计信息。

显示指定次数的统计信息:

--使用iostat interval count,其中count是要显示的次数。例如,iostat 2 3将每 2 秒显示一次系统统计信息,共显示 3 次。

3、显示特定磁盘设备

显示特定磁盘设备的统计信息:

--使用iostat -d device,其中device是磁盘设备名称,如sda、hda等。例如,iostat -d sda将显示sda磁盘的 I/O 统计信息。

4、输出字段解释

CPU部分:

%user:用户空间进程占用 CPU 的百分比。

%nice:低优先级进程占用 CPU 的百分比。

%system:内核空间进程占用 CPU 的百分比。

%iowait:等待 I/O 完成占用 CPU 的百分比。

%steal:被虚拟机偷走的 CPU 时间百分比(如果在虚拟化环境中)。

%idle:空闲 CPU 的百分比。

Device部分(每个磁盘设备的信息):

tps:每秒传输次数,即每秒的 I/O 请求次数。

kB_read/s:每秒读取的千字节数。

kB_wrtn/s:每秒写入的千字节数。

kB_read:自系统启动以来读取的总千字节数。

kB_wrtn:自系统启动以来写入的总千字节数。

5、持续监控磁盘 I/O 性能:

--iostat -d 5可以每 5 秒显示一次磁盘 I/O 统计信息,帮助你实时了解磁盘的读写性能。如果发现某个磁盘设备的读写速度异常,可以进一步分析问题所在。

分析特定磁盘设备:

--如果你怀疑某个特定磁盘设备存在性能问题,可以使用iostat -d device来专门查看该设备的统计信息。例如,iostat ---d sdb将只显示sdb磁盘的 I/O 情况。

结合其他工具进行性能分析:

可以将iostat的输出与其他性能监控工具(如top、vmstat等)结合使用,全面分析系统的性能状况。例如,如果iostat显示某个磁盘设备的 I/O 等待时间较高,可以使用top或vmstat查看是否有进程在大量占用该磁盘设备。

通过灵活使用iostat命令,可以有效地监控系统的磁盘 I/O 性能,及时发现性能瓶颈并采取相应的措施进行优化和调整。

4、uptime

uptime命令用于显示系统的运行时间以及当前的负载情况。

1、基本用法

直接运行uptime:

--输入uptime命令并回车,将显示系统自上次启动以来的运行时间、当前登录的用户数量以及系统在过去 1、5 和 15 分钟内的平均负载。

--例如,输出可能是"10:30:00 up 5 days, 2:23, 3 users, load average: 0.50, 0.32, 0.25",表示当前时间是 10:30,系统已经运行了 5 天 2 小时 23 分钟,有 3 个用户登录,过去 1、5 和 15 分钟内的平均负载分别是 0.50、0.32 和 0.25。

2、输出字段解释

"up"后面的时间:

表示系统自上次启动以来的运行时间。格式通常是"天数,小时:分钟"。

"users":

显示当前登录到系统的用户数量。

"load average":

系统的平均负载,分别是过去 1、5 和 15 分钟内的平均负载。平均负载是指在特定时间间隔内,处于可运行状态(正在运行或等待运行)的进程的平均数量。

例如,"load average: 0.50, 0.32, 0.25"表示在过去 1 分钟内平均有 0.50 个进程处于可运行状态,过去 5 分钟内平均有 0.32 个进程,过去 15 分钟内平均有 0.25 个进程。

3、监控系统运行时间和负载:

--定期运行uptime命令可以了解系统的稳定性和负载情况。如果平均负载持续较高,可能表示系统资源紧张,需要进一步分析是 CPU、内存还是磁盘 I/O 等方面的问题。

4、结合其他工具进行性能分析:

--可以将uptime的输出与其他性能监控工具(如top、vmstat、iostat等)结合使用,全面了解系统的性能状况。例如,如果uptime显示平均负载较高,可以使用top查看哪些进程占用了较多的 CPU 资源。

通过使用uptime命令,可以快速了解系统的运行时间和负载情况,为系统管理和性能优化提供参考依据。

5、mpstat

mpstat(MultiProcessor Statistics)命令用于显示每个 CPU 的使用情况以及整个系统的 CPU 统计信息。

1、基本用法

直接运行mpstat:

--输入mpstat命令并回车,将显示自系统启动以来的平均 CPU 统计信息,包括每个 CPU 的用户空间占用时间百分比(% usr)、内核空间占用时间百分比(% sys)、空闲时间百分比(% idle)等。

--默认情况下,mpstat显示所有 CPU 的平均统计信息。

2、显示时间间隔和次数

以指定时间间隔显示统计信息:

使用mpstat interval,其中interval是时间间隔,单位为秒。例如,mpstat 5将每 5 秒显示一次 CPU 统计信息。

显示指定次数的统计信息:

使用mpstat interval count,其中count是要显示的次数。例如,mpstat 2 3将每 2 秒显示一次 CPU 统计信息,共显示 3 次。

3、输出字段解释

CPU:表示 CPU 的编号。如果系统有多个 CPU,每个 CPU 都有一行对应的统计信息。

%usr:用户空间进程占用 CPU 的百分比。

%nice:低优先级进程占用 CPU 的百分比。

%sys:内核空间进程占用 CPU 的百分比。

%iowait:等待 I/O 完成占用 CPU 的百分比。

%irq:处理硬件中断占用 CPU 的百分比。

%soft:处理软件中断占用 CPU 的百分比。

%steal:被虚拟机偷走的 CPU 时间百分比(如果在虚拟化环境中)。

%guest:运行虚拟机中的客户机占用 CPU 的百分比。

%gnice:运行带有低优先级的虚拟机中的客户机占用 CPU 的百分比。

%idle:空闲 CPU 的百分比。

4、特定用法

监控单个 CPU 的性能:

可以通过mpstat -P CPU_NUMBER来监控特定 CPU 的性能,其中CPU_NUMBER是 CPU 的编号。例如,mpstat -P 0将只显示编号为 0 的 CPU 的统计信息。

持续监控系统 CPU 性能:

mpstat 5可以每 5 秒显示一次系统的 CPU 统计信息,帮助你实时了解各个 CPU 的使用情况以及系统整体的 CPU 负载。如果发现某个 CPU 的负载异常高,可以进一步分析是哪个进程在该 CPU 上运行并消耗大量资源。

结合其他工具进行性能分析:

可以将mpstat的输出与其他性能监控工具(如top、vmstat、iostat等)结合使用,全面分析系统的性能状况。例如,如果mpstat显示某个 CPU 的%iowait较高,可以使用iostat查看是否该 CPU 对应的磁盘设备存在 I/O 瓶颈。

通过使用mpstat命令,可以深入了解系统中各个 CPU 的使用情况,及时发现性能问题并采取相应的措施进行优化和调整。

6、pmap

pmap命令用于显示进程的内存映射关系。

1、基本用法

显示特定进程的内存映射:

--pmap PID,其中PID是进程标识符。例如,pmap 1234将显示进程 ID 为 1234 的内存映射情况。

2、输出字段解释

地址范围:

--显示进程使用的内存地址范围,例如 "0000555555554000-0000555555555000"。

权限:

--表示该内存区域的访问权限,如 "r-xp" 表示可读、可执行但不可写。常见的权限标志包括 "r"(可读)、"w"(可写)、"x"(可执行)、"s"(共享)、"p"(私有)等。

偏移量:

-内存映射文件在文件中的偏移量。

设备:

--内存映射的设备编号,通常是磁盘设备或匿名内存的特殊设备编号。

大小:

--该内存区域的大小,以字节为单位。

映射名称:

--如果该内存区域是映射自一个文件,这里将显示文件的名称;如果是匿名内存,则可能显示类似于 "[heap]"、"[stack]" 等描述信息。

3、惯用用法

分析进程内存使用情况:

通过查看pmap的输出,可以了解一个进程使用了多少内存,哪些部分是代码、数据、堆、栈等,以及是否有大量的共享内存或内存泄漏的迹象。

查找内存占用较大的区域:

如果一个进程占用了大量内存,可以使用pmap来确定哪些内存区域是主要的占用者。例如,如果发现一个很大的匿名内存区域,可能是进程的堆空间在不断增长,提示可能存在内存泄漏问题。

与其他工具结合使用:

pmap可以与其他内存分析工具(如valgrind用于检测内存泄漏)结合使用,以更深入地了解进程的内存使用情况和潜在问题。通过使用pmap命令,可以深入了解进程的内存布局和使用情况,对于诊断内存相关问题和优化系统性能非常有帮助。

7、sar

sar(System Activity Reporter)命令是一个强大的系统性能监测工具。

1、基本用法

立即查看系统活动:

--sar:默认情况下,它会显示当天自零点以来的 CPU 使用率统计信息。例如,输出可能包括用户空间、系统空间、I/O 等待等 CPU 时间的百分比。

指定时间间隔和次数:

--sar interval count:其中interval是时间间隔,单位为秒;count是要显示的次数。例如,sar 5 3将每 5 秒显示一次系统统计信息,共显示 3 次。

2、监控特定资源

CPU 使用率:

sar -u:显示 CPU 的使用情况,包括用户空间、系统空间、空闲时间等百分比。

内存使用情况:

sar -r:显示内存的使用情况,包括物理内存总量、已使用内存、空闲内存、缓冲和缓存等信息。

磁盘 I/O 活动:

sar -b:显示磁盘块设备的活动情况,包括每秒读取和写入的块数量等。

sar -d:更详细地显示每个磁盘设备的 I/O 统计信息。

网络活动:

sar -n DEV:显示网络接口的活动情况,包括接收和发送的数据包数量、字节数等。可以指定不同的参数来查看特定类型的网络统计信息,如IP、Ethernet等。

3、输出字段解释

CPU 使用率(sar -u输出):
%user:用户空间进程占用 CPU 的百分比。
%nice:低优先级进程占用 CPU 的百分比。
%system:内核空间进程占用 CPU 的百分比。
%iowait:等待 I/O 完成占用 CPU 的百分比。
%steal:被虚拟机偷走的 CPU 时间百分比(如果在虚拟化环境中)。
%idle:空闲 CPU 的百分比。
内存使用情况(sar -r输出):
kbmemfree:空闲物理内存大小,单位为千字节。
kbmemused:已使用物理内存大小。
%memused:已使用内存的百分比。
kbbuffers:用于缓冲区的内存大小。
kbcached:用于缓存的内存大小。
磁盘 I/O 活动(sar -b或sar -d输出):
tps:每秒传输次数,即每秒的 I/O 请求次数。
rtps:每秒读取的传输次数。
wtps:每秒写入的传输次数。
bread/s:每秒读取的块数量。
bwrtn/s:每秒写入的块数量。
网络活动(sar -n DEV输出):
IFACE:网络接口名称。
rxpck/s:每秒接收的数据包数量。
txpck/s:每秒发送的数据包数量。
rxkB/s:每秒接收的千字节数。
txkB/s:每秒发送的千字节数。

4、惯用用法

持续监控系统性能:

sar -u 5 10可以每 5 秒显示一次 CPU 使用率统计信息,共显示 10 次。这对于观察系统在一段时间内的 CPU 负载变化非常有用。

分析磁盘 I/O 瓶颈:

如果系统的磁盘 I/O 性能较差,可以使用sar -d来查看每个磁盘设备的 I/O 活动情况。如果发现某个设备的tps、rtps或wtps很高,或者await(平均等待时间)很长,可能表示该设备存在 I/O 瓶颈。

检查网络问题:

sar -n DEV可以帮助了解网络接口的活动情况。如果发现接收或发送的数据包数量异常高,或者网络带宽使用率很高,可能表示网络存在问题。可以进一步分析是哪个应用程序在大量使用网络资源。

通过灵活使用sar命令,可以全面了解系统的性能状况,及时发现问题并采取相应的措施进行优化和调整。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。

相关推荐
师太,答应老衲吧5 分钟前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Peter_chq35 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Channing Lewis1 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
一坨阿亮1 小时前
Linux 使用中的问题
linux·运维
毕业设计制作和分享2 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil272 小时前
Redis - String 字符串
数据库·redis·缓存
dsywws2 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零3 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
Hsu_kk3 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境3 小时前
第02章 MySQL环境搭建
数据库·mysql