《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命令,可以全面了解系统的性能状况,及时发现问题并采取相应的措施进行优化和调整。

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

相关推荐
zyhomepage17 分钟前
科技的成就(六十三)
linux·开发语言·人工智能·科技·算法·游戏·内容运营
AI人H哥会Java26 分钟前
【PostgreSQL】提高篇——深入了解不同类型的 JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)应用操作
数据库·sql·postgresql
夏天匆匆2过40 分钟前
linux性能分析常用工具和方法
linux·运维·服务器
暗恋 懒羊羊41 分钟前
Linux 线程同步
linux·ubuntu
OH五星上将1 小时前
【移植】一种快速移植OpenHarmony Linux内核的方法
linux·运维·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙内核
翁乐安1 小时前
linux 系统磁盘空间查看与清理
linux·运维·服务器
小小不董2 小时前
《Linux从小白到高手》理论篇(八):Linux的进程管理详解
linux·运维·服务器·数据库·dba
小白爱电脑2 小时前
看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?
运维·网络·音视频
bug菌¹2 小时前
滚雪球学Oracle[5.1讲]:Oracle数据库管理与维护
数据库·oracle
简佐义的博客2 小时前
生物信息常用编辑器:轻量/强大/可定制/跨平台支持的编辑器之神 - vim
linux·编辑器·vim