当前位置: 首页 > news >正文

Linux入门教程 第十五章 Linux 系统调优工具

文章目录

  • 一、系统调优概述与 CPU 负载查看
    • 1.使用 uptime 查看系统负载
    • 2.使用 top 按 CPU 使用率排序
    • 3.使用 ps 查看 CPU 使用最多的进程
    • 4.使用 mpstat 查看 CPU 详细状态
  • 一、查看内存运行状态
    • 1.使用 free 查看内存使用
    • 2.查看 /proc/meminfo 获取详细内存信息
    • 3.使用 top 按内存使用排序
    • 4.使用 ps 查看内存使用最多的进程
  • 三、查看磁盘 I/O 状态
    • 1.查看文件系统块大小
      • EXT4:
      • XFS:
    • 2.使用 iostat 查看磁盘 I/O
    • 3.使用 dd 测试磁盘写入
    • 4.使用 iotop 查看实时 I/O 进程
  • 四、查看网络状态
    • 1.使用 nload 查看实时带宽
    • 2.使用 nethogs 查看进程网络使用
  • 五、查看系统整体状态
    • 1.使用 vmstat 查看系统整体状态
    • 2.使用 sar 记录系统状态
    • 3.查看 sar 历史日志


一、系统调优概述与 CPU 负载查看

1.使用 uptime 查看系统负载

uptime
[root@centos7 /]# uptime19:40:21 up  9:25,  2 users,  load average: 0.00, 0.01, 0.05

解读:

  • 输出格式: 时间 运行时间 登录用户数 平均负载(1分钟、5分钟、15分钟)
    若1分钟负载值 > CPU核心数,说明系统可能过载。
  • 举个列子:若系统CPU核心数为1,此时1分钟负载值(1.25)> 1,说明系统可能短暂过载(需结合5分钟/15分钟负载趋势综合判断)

2.使用 top 按 CPU 使用率排序

步骤:

  1. 运行 top ;
  2. 按大写 P 按 CPU 使用率降序排列。

3.使用 ps 查看 CPU 使用最多的进程

ps -aux --sort -pcpu | head -10
ps -aux:列出系统中所有进程的详细信息
a:显示所有用户的进程
u:以用户为中心的格式显示(包含 CPU、内存等使用信息)
x:包括没有控制终端的进程
--sort -pcpu:按照 CPU 使用率(pcpu)进行排序,负号表示降序排列
| head -10:通过管道将结果传递给 head 命令,只显示前 10

4.使用 mpstat 查看 CPU 详细状态

mpstat -P ALL 1 5
mpstat:是系统性能监控工具 sysstat 包中的命令,用于报告 CPU 的统计信息
-P ALL:显示所有 CPU 核心(包括单个核心和整体平均)的统计数据
1:采样间隔时间,单位为秒(这里表示每 1 秒采集一次数据)
5:采样次数(这里表示总共采集 5 次)
[root@centos7 /]# mpstat -P ALL 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 	2025年08月27日 	_x86_64_	(4 CPU)20时23分18秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20时23分19秒  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.75
20时23分19秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
20时23分19秒    1    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
20时23分19秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
20时23分19秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.0020时23分19秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20时23分20秒  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.75
20时23分20秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
20时23分20秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
20时23分20秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
20时23分20秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
。。。
%usr :用户空间CPU占比;
%sys :内核空间CPU占比;
%iowait :等待I/O占比;
%idle :空闲占比。

一、查看内存运行状态

1.使用 free 查看内存使用

free -m
[root@centos7 /]# free -mtotal        used        free      shared  buff/cache   available
Mem:           3770         497        2201          14        1071        3015
Swap:          4095           0        4095
available 列表示实际可用内存(包括可回收的缓存)。

2.查看 /proc/meminfo 获取详细内存信息

[root@centos7 /]# cat /proc/meminfo
MemTotal:        3861076 kB
MemFree:         2254660 kB
MemAvailable:    3087532 kB
Buffers:              16 kB
Cached:          1007196 kB
SwapCached:            0 kB
Active:          1030832 kB
Inactive:         221516 kB
Active(anon):     160876 kB
Inactive(anon):    99056 kB
Active(file):     869956 kB
Inactive(file):   122460 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        245160 kB
Mapped:            98912 kB
Shmem:             14796 kB
Slab:             157944 kB
SReclaimable:      90092 kB
SUnreclaim:        67852 kB
KernelStack:        7440 kB
PageTables:        19872 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6124836 kB
Committed_AS:    2228920 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      183528 kB
VmallocChunk:   34359310332 kB
Percpu:            36352 kB
HardwareCorrupted:     0 kB
AnonHugePages:     65536 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      126784 kB
DirectMap2M:     4067328 kB
DirectMap1G:     2097152 kB
Active :活跃内存;
Inactive :非活跃内存(可被换出)。

3.使用 top 按内存使用排序

  1. 运行 top ;
  2. 按大写 M 按内存使用降序排列。

4.使用 ps 查看内存使用最多的进程

ps -aux --sort -rss | head -10

三、查看磁盘 I/O 状态

1.查看文件系统块大小

EXT4:

tune2fs -l /dev/sda1 | grep "Block size"
用于 ext 系列文件系统(ext2/ext3/ext4)
tune2fs -l 会列出该文件系统的详细信息
输出类似:Block size: 4096(表示块大小为 4096 字节)

XFS:

fs_growfs -l /dev/sda1 | grep bsize
用于 XFS 文件系统
xfs_growfs -l 会显示 XFS 文件系统的布局信息
输出类似:bsize=4096(表示块大小为 4096 字节)

2.使用 iostat 查看磁盘 I/O

iostat -d -k -p /dev/sda 1 5
iostat:系统 I/O 统计工具,用于监控磁盘和 CPU 的输入输出性能
-d:只显示磁盘(device)的统计信息,不显示 CPU 信息
-k:以 KB(千字节)为单位显示数据(默认是块)
-p /dev/sda:显示指定磁盘/dev/sda及其所有分区的统计信息
1 5: 采样间隔为1秒,共采样5次
[root@centos7 /]# iostat -d -k -p /dev/sda 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 	2025年08月27日 	_x86_64_	(4 CPU)Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.77        89.22       501.00    3297947   18518508
sda1              0.06        14.52         0.06     536691       2048
sda2              0.11        55.83         0.00    2063652          0
sda3              1.60        18.79       500.94     694368   18516460
。。。

kB_read/s :每秒读取数据量;
kB_wrtn/s :每秒写入数据量。

3.使用 dd 测试磁盘写入

dd if=/dev/zero of=testfile bs=1M count=1000; sync
dd if=/dev/zero of=testfile:使用dd命令从/dev/zero(一个源源不断输出 0 字节的特殊设备)读
取数据,写入到名为testfile的文件中
bs=1M:设置每次读写的块大小为 1MB
count=1000:设置读写的块数量为 1000,所以总文件大小是 1MB×1000=1000MB(约 1GB)
; sync:分号分隔两个命令,sync用于将内存中的数据强制刷新到磁盘,确保文件真正写入硬盘

4.使用 iotop 查看实时 I/O 进程

iotop -o -d 1
iotop:一个专门监控磁盘 I/O 的工具(需要 root 权限运行),可以显示每个进程的 I/O 使用情况
-o:只显示正在产生 I/O 活动的进程(过滤掉没有 I/O 操作的进程,更简洁)
-d 1:设置刷新间隔为 1 秒(每秒更新一次数据)

四、查看网络状态

1.使用 nload 查看实时带宽

yum install epel-release
yum install nload
nload
实时网络流量状态 (Incoming/Outgoing)
指标 值 说明
当前速率 (Curr) 41.12 kBit/s 瞬时接收速率
平均速率 (Avg) 166.04 kBit/s 本次会话的平均接收速率
最小速率 (Min) 3.49 kBit/s 本次会话的最小接收速率
最大速率 (Max) 1.33 MBit/s 本次会话的最大接收速率 (峰值)
总数据量 (Ttl) 81.77 MByte 本次会话累计接收的总数据量

操作:
在另一终端使用ab压测

ab -n 1000 -c 2 http://www.baidu.com/
#安装包 httpd-tools
ab:Apache 自带的 HTTP 压力测试工具,用于模拟多个用户并发访问网站并统计性能数据
-n 1000:指定总请求数为 1000 次(总共向百度首页发送 1000 个请求)
-c 2:指定并发数为 2(每次同时发送 2 个请求,模拟 2 个用户同时访问)
http://www.baidu.com/:目标测试的 URL(这里是百度首页)
Requests per second: 50.00 [#/sec] (mean) # 平均每秒处理请求数(吞吐量)
Time per request: 40.000 [ms] (mean) # 平均每个请求的响应时间
Time per request: 20.000 [ms] (mean, across all concurrent requests) # 并
发情况下每个请求的实际等待时间
Percentage of the requests served within a certain time (ms):
50% 30
90% 50
99% 80 # 99%的请求在80ms内完成

就是输入压测后在另一终端使用nload进行监测

2.使用 nethogs 查看进程网络使用

nethogs

操作:
在另一终端使用 wget 下载大文件,观察 nethogs 输出。

五、查看系统整体状态

1.使用 vmstat 查看系统整体状态

vmstat 1 5 虚拟内存统计(Virtual Memory Statistics)工具,能全面反映系统运行状态
1:采样间隔时间,单位为秒(每 1 秒刷新一次数据)
5:采样次数(总共输出 5 组数据)[root@centos7 /]# vmstat 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st1  0      0 2254656     16 1097308    0    0    22   123   16   18  0  0 100  0  0r:等待运行的进程数(如果长期大于 CPU 核心数,说明 CPU 不够用)
b:处于不可中断睡眠的进程数(通常是等待 I/O,数值高说明 I/O 繁忙)
si/so:每秒从 swap 分区读入 / 写入内存的数据量(非 0 说明内存不足,开始用交换分区)
bi/bo:每秒从块设备读入 / 写入的数据量(反映磁盘 I/O 活动)
wa:CPU 等待 I/O 的时间百分比(超过 20% 说明 I/O 成为瓶颈)
us/sy:用户态 / 内核态占用 CPU 的百分比(us 高说明应用消耗 CPU 多,sy 高可能是系统调用频繁)
id:CPU 空闲百分比(过低说明 CPU 负载高)

r :运行队列长度;
b :阻塞进程数;
si/so :换入/换出内存;
bi/bo :块读/写。

2.使用 sar 记录系统状态

sar -u 2 5 -o cpu.sar # 记录CPU
-u:查看 CPU 使用率统计
2 5:每 2 秒采样一次,共采样 5-o cpu.sar:将结果保存到文件cpu.sar(方便后续用sar -f cpu.sar查看)
输出中重点关注:
%user:用户程序占用 CPU 的比例
%sys:系统内核占用 CPU 的比例
%idle:CPU 空闲比例(过低说明 CPU 负载高)
sar -r 1 5 # 记录内存
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
sar -n DEV 1 5 # 记录网络
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
3. sar -n DEV 1 5(监控网络)
-n DEV:查看网络接口(如 eth0、ens33)的流量统计
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
rxpck/s:每秒接收的数据包数
txpck/s:每秒发送的数据包数
rxkB/s:每秒接收的千字节数
txkB/s:每秒发送的千字节数(数值过高可能表示网络带宽饱和)

查看记录:

sar -u -f cpu.sar

3.查看 sar 历史日志

ls /var/log/sa
sar -n DEV -f /var/log/sa/sa15
http://www.dtcms.com/a/354088.html

相关文章:

  • 【工具篇】github/huggingface 镜像源总结
  • 嵌入式系统学习Day24(线程)
  • Custom SRP - Shadow Masks
  • Axure:如何将SVG转换为形状
  • leetcode 155 官方golang标准答案错误
  • Java Lambda 处理日期时间 根据区间找出区间内集合
  • Linux程序与进程:核心概念与管理全解析
  • Class45循环神经网络RNN
  • “互联网 +”时代下开源 AI 大模型 AI 智能名片 S2B2C 商城小程序:行业变革与未来展望
  • 基于 Ultralytics YOLO11与 TrackZone 的驱动的高效区域目标跟踪方案实践
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-Python图像处理实战
  • 多版本兼容的golang客服系统
  • 稀土:从“稀有”到“命脉”的科技核心
  • 通过概率正 - 未标记网络从医学图像的特定感兴趣区域中学习|文献速递-深度学习人工智能医疗图像
  • 【底层机制】thread_local 变量的初始化时机和生命周期
  • Spring Retry Spring 生态系统优雅的重试组件
  • 浏览器网页路径扫描器(脚本)
  • SQL优化:SQL模拟Split二维数组
  • Linux 基础开发工具
  • django-redis 使用类实现和使用
  • React(面试)
  • JUC之异步编程理论总结
  • 实现基于数据库 flag 状态的消息消费控制
  • 【docker】P1 虚拟化与容器化
  • 全球协作无障碍:cpolar+Nextcloud实现跨国文件共享
  • 通过远程桌面横向移动(破解凭证)
  • 【51单片机】【protues仿真】 基于51单片机出租车计价器系统
  • 三轴云台之动态性能篇
  • 数字化时代催生变革,楼宇自控系统成为建筑管理新潮流的引领者
  • ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况