本篇介绍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命令,可以全面了解系统的性能状况,及时发现问题并采取相应的措施进行优化和调整。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。