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

Linux性能监控与调优全攻略

**一、一、性能检测(监控)

**1. CPU1. CPU 监控

命令

功能

关键参数/输出

场景

top / htop

实时进程级

%CPU(进程占用率)、%MEM(内存占用率)、Load Average(负载平均值)

快速定位高 CPU 进

mpstat -P ALL 1

每个核心的 CPU 使用率

%usr(用户态)、%sys(内核态)、%iowait(I/O 等待)

多核负载均衡分析

uptime

系统负载与运行时间

11:32:20 up  3:21,  2 users,  load average: 0.00, 0.01, 0.05

快速查看负载趋势

perf top

实时 CPU 热点函数分析

按函数名排序 CPU 占用率

深入代码级

说明:

1. top 

分类具体指标数值 / 说明
系统基本信息当前时间11:16:47
开机时长up 3:05(已开机 3 小时 05 分钟)
登录用户数2 users
系统平均负载load average: 0.00, 0.01, 0.05(1 分钟、5 分钟、15 分钟平均负载)
任务(进程)统计总进程数226 total
运行中进程数1 running
休眠进程数222 sleeping
停止进程数3 stopped
僵尸进程数0 zombie
CPU 使用率用户态(us)0.1%(应用程序占用 CPU 比例)
内核态(sy)0.1%(系统内核功能占用 CPU 比例)
调整优先级的用户态(ni)0.0%
空闲(id)99.8%(空闲 CPU 比例,越高越空闲)
等待 I/O(wa)0.0%(因等待磁盘、网络等 I/O 操作占用 CPU 耗时比例)
硬件中断(hi)0.0%(处理硬件中断占用 CPU 耗时比例)
软件中断(si)0.0%(处理软件中断占用 CPU 耗时比例)
被虚拟机 “偷走”(st)0.0%(虚拟机场景下,被其他虚拟机占用的 CPU 时间比例)
内存信息总物理内存(KiB Mem total)4026372 KiB(约 4GB )
空闲物理内存(free)2535540 KiB
已用物理内存(used)783396 KiB
缓存(buff/cache)707436 KiB(可被释放给应用的临时缓存)
交换分区信息总交换分区(KiB Swap total)4194300 KiB(约 4GB )
空闲交换分区(free)4194300 KiB
已用交换分区(used)0 KiB(未用到磁盘交换,性能较好)
实际可用内存(avail Mem)2899668 KiB(含可回收缓存,体现实际可用内存)
进程详情PID(进程 ID)10463、12545、1、2 等
USER(所属用户)root(所列进程均属 root 用户 )
PR(进程优先级)20(数值越小优先级越高,所列进程多为 20 )
NI(nice 值)0(调整进程优先级,范围 -20 ~ 19 )
VIRT(虚拟内存总量)如 566636 KiB(vmtoolsd 进程)、162012 KiB(top 进程 )等
RES(实际物理内存占用)如 25912 KiB(vmtoolsd 进程)、2372 KiB(top 进程 )等
SHR(共享内存)如 19120 KiB(vmtoolsd 进程)、1588 KiB(top 进程 )等
S(进程状态)S(休眠)、R(运行,如 top 进程状态为 R )等
% CPU(进程 CPU 使用率)如 0.3%(vmtoolsd、top 进程 )、0.0%(systemd 等进程 )
% MEM(进程内存使用率)如 0.6%(vmtoolsd 进程)、0.1%(top 进程 )、0.2%(systemd 进程 )等
TIME+(累计 CPU 耗时)如 0:13.54(vmtoolsd 进程)、0:00.02(top 进程 )、0:01.55(systemd 进程 )等
COMMAND(进程名称 / 命令)vmtoolsd、top、systemd、kthreadd 等

2.mpstat -P ALL 1

列名全称 / 含义示例值(以 all 行为例)补充说明
11:27:17 AM
11:27:18 AM
采样时间采样时间戳第一行是 “表头时间”,后续是实际采样时间
CPUCPU 标识:
all = 所有 CPU 总览
0/1 = 单个 CPU 核心编号
all01你的输出里还有 23 核心(截图未完整显示)
%usr用户态 CPU 使用率(应用程序、脚本等用户空间程序占用 CPU 比例)0.00数值越高,用户程序越繁忙
%nice调整过优先级(nice 值)的用户态 CPU 使用率0.00通常为 0(少用优先级调整时)
%sys内核态 CPU 使用率(系统内核功能、驱动等占用 CPU 比例)0.25all 行)数值高可能因内核任务多(如 I/O 调度)
%iowaitCPU 等待 I/O 耗时比例(因磁盘、网络等 I/O 阻塞,CPU 空闲等待的时间)0.00高值可能表示存储 / 网络性能瓶颈
%irq硬件中断(如键盘、磁盘控制器触发)占用 CPU 比例0.00通常较低,驱动异常时可能升高
%soft软件中断(内核内部触发的中断)占用 CPU 比例0.00同上,异常时需关注
%steal虚拟机场景下,被宿主机 “偷走” 的 CPU 时间(仅虚拟机内可见)0.00物理机无此损耗,虚拟机需关注
%guest运行虚拟机客户机(如 KVM 虚机)占用的 CPU 比例0.00无虚拟机时通常为 0
%gnice调整过优先级的虚拟机客户机 CPU 使用率0.00同上,少用场景为 0
%idleCPU 空闲比例(完全无任务时的空闲时间)99.75all 行)
2. 内存监控

命令

功能

关键参数/输出

场景

free -h

内存使用情况(人类可读)

available(可用内存)、buff/cache(缓存)、used(已用)

**关键指标:关键指标:available < 10% 需警惕

vmstat 1 5

内存、进程、I/O 综合统计

si/so(Swap 交换量)、bi/bo(磁盘r(运行队列长度

内存不足或 I/O 瓶颈

sar -r 1 5

内存使用率历史数据

kbmemfree(空闲内存)、kbmemused(已用内存)、%memused(使用率)

 1.  free -h

分类字段含义 & 示例值补充说明
内存total总物理内存:3.8G系统总内存约 3.8GB
used已用内存:765M实际被程序占用的内存
free空闲内存:2.4G完全未被使用的 “纯空闲” 内存
buff/cache缓存内存:690M用于磁盘缓存(可释放给程序)
available可用内存:2.8G程序实际可申请的内存(含可回收缓存)
交换分区total总交换空间:4.0G硬盘模拟的 “虚拟内存” 总大小
used已用交换:0B未用到交换分区(性能好)
free空闲交换:4.0G交换分区剩余空间

总结:系统物理内存充足(总 3.8G,已用仅 765M,可用 2.8G ),且未用到交换分区(Swap 用 0B ),内存状态非常健康,无内存压力~

2. vmstat 1 5

3. sar -r 1 5

3. 磁盘 I/O 监控

命令

功能

关键参数/输出

场景

iostat -dx 1 5

磁盘 I/O 性能(扩展模式)

%util(设备繁忙度)、await(I/O 延迟)、r/s(读请求数)、w/s(写请求数)

瓶颈判断:%util > 80% 或 await > 20ms

df -h

磁盘分区空间使用率

Use%(使用率)、Mounted on(挂载点)

磁盘空间告

1.  iostat -dx 1 5

分类字段 / 列名含义 & 示例值补充说明
磁盘设备Device磁盘设备名:scd0sdasda 通常是主硬盘,scd0 可能是光驱
I/O 指标tps每秒 I/O 操作数:
scd0: 0.00
sda: 0.44
数值越高,磁盘越繁忙
kB_read/s每秒读数据量(kB):
scd0: 0.02
sda: 15.91
读吞吐量,反映读性能
kB_wrtn/s每秒写数据量(kB):
scd0: 0.00
sda: 1.25
写吞吐量,反映写性能
累计统计kB_read累计读总量(kB):
scd0: 1050
sda: 676095
系统启动以来的读总数据量
kB_wrtn累计写总量(kB):
scd0: 0
sda: 53193
系统启动以来的写总数据量

关键结论

  • sda(主硬盘):有一定读写活动(tps=0.44kB_read/s=15.91kB_wrtn/s=1.25 ),但整体负载低,属于正常使用状态。
  • scd0(可能是光驱):读写极少(tps=0.00kB_wrtn/s=0.00 ),符合光驱低使用场景。
    系统磁盘 I/O 压力小,无明显性能瓶颈。
4. 网络监控

命令

功能

关键参数/输出

场景

sar -n DEV 1 5

网络接口流量统计

rxkB/s(接收速率)、txkB/s(发送速率)、rxerr/s(接收错误)

带宽瓶颈或丢包问题

ss -tuln

监听端口与连接状态

LISTEN(监听端口)、ESTAB(已建立连接)

检查服务端口是否正常

netstat -s

网络协议统计(TCP/UDP/ICMP)

segments retransmitted(TCP 重传)、packet receive errors(接收错误)

网络层问题分析

 1. sar -n DEV 1 5

2.ss -tuln

3. netstat -s

5. 综合监控工具

工具

功能

特点

dstat

CPU/内存/磁盘/网络一体化监控

dstat -tcmndpy(时间+CPU+内存+磁盘+网络+系统调用)

glances

跨平台系统监控(Web/终端)

支持插件扩展,可监控 Docker、传感器等

nmon

实时性能监控 + 数据导出

生成 CSV 报告用于长期分析


二、性能调优(优化)

1. CPU 调优

场景

调优策略

命令/配置

进程 CPU 绑定

减少跨 CPU 核心切换开销

taskset -cp 0,1 <PID>(绑定进程到核心 0,1)

中断亲和性

分散网卡中断到不同 CPU 核心

echo 1 > /proc/irq/<中断号>/smp_affinity(绑定到 CPU 0)

CPU 频率调节

固定高性能模式(省电场景用 ondemand

cpupower frequency-set -g performance

减少上下文切换

降低线程数或使用异步 I/O

优化应用代码(如使用 Nginx 的 worker_processes auto

2. 内存调优

场景

调优策略

命令/配置

减少 Swap 使用

避免内存频繁交换到磁盘(需确保物理内存充足)

sysctl vm.swappiness=10(默认 60,0 表示禁用 Swap)

调整脏页回写

减少磁盘写频率,提升写性能

sysctl vm.dirty_ratio=15(脏页占比达 15% 时阻塞写)

启用大页内存

减少 TLB Miss(适用于数据库、虚拟化)

echo 2048 > /proc/sys/vm/nr_hugepages(分配 2048 个 2MB 大页)

OOM Killer 保护

防止关键进程被杀

echo -1000 > /proc/<PID>/oom_score_adj(值越低越不易被杀)

3. 磁盘 I/O 调优

场景

调优策略

命令/配置

更换 I/O 调度器

SSD 用 none/mq-deadline,HDD 用 mq-deadline

echo mq-deadline > /sys/block/sda/queue/scheduler

调整队列深度

提高并发 I/O 能力(SSD 可设 256-1024)

echo 512 > /sys/block/sda/queue/nr_requests

启用读写预取

提升顺序读写性能

echo 1024 > /sys/block/sda/queue/read_ahead_kb(单位 KB)

文件系统挂载优化

禁用访问时间更新、启用写回模式

mount -o noatime,nodiratime,data=writeback /dev/sda1 /mnt

4. 网络调优

场景

调优策略

命令/配置

调整 TCP 缓冲区

高带宽或高延迟网络需增大缓冲区

sysctl net.ipv4.tcp_rmem="4096 87380 16777216"(最小/默认/最大接收缓冲区)

启用 BBR 拥塞算法

提升高丢包网络吞吐量(需内核 ≥4.9)

sysctl net.ipv4.tcp_congestion_control=bbr

连接复用

减少 TIME_WAIT 连接

sysctl net.ipv4.tcp_tw_reuse=1

增大连接跟踪表

高并发服务器(如 NAT 网关)

sysctl net.netfilter.nf_conntrack_max=1000000


三、调优实战案例

场景:Web 服务器响应缓慢

 1.监控诊断

top              # 发现 CPU 占用 90%,负载 15(8核机)
vmstat 1         # 显示 r(运行队列)>10,so(Swap Out)>0
free -h          # available 内存仅 500MB(总 16GB)

结论:CPU 瓶颈 + 内存不足导致 Swap。

 2.调优措施

2.1 应用层

# 优化 Nginx 配置(减少 worker 数)
worker_processes auto;
worker_connections 512;  # 原值 1024
# 优化慢 SQL(如添加索引)
EXPLAIN SELECT * FROM users WHERE name='Alice';

 2.2 内核层 

sysctl vm.swappiness=10          # 减少 Swap
sysctl net.ipv4.tcp_tw_reuse=1   # 复用 TIME_WAIT 连接

 硬件:增加内存至 32GB。

3.验证效果

ab -n 10000 -c 100 http://localhost/  # 压力测试
# 结果:TPS 从 200 提升至 800,响应时间从 500ms 降至 120ms
  1. 安全第一:生产环境调优前 务必备份
  2. 单一变量:每次只修改一个参数,避免无法定位问题根源。 3
  3. 监控先行:调优后持续sar -u 1 3600 记录 1 小时 CPU)。 4
  4. 工具选择
    • 快速诊断:`top/vmstat/iostat
    • 深度分析:perf/eBPFbcc-tools
    • 长期Prometheus + Grafana

五、命令速查表

目标

命令

输出关键字

CPU 瓶颈

mpstat -P ALL 1

%usr > 80% 或 %iowait > 20

内存不足

free -h

available < 10% 总内存

磁盘瓶颈

iostat -dx 1

%util > 80% 或 `awaitawait > 20ms

网络丢包

sar -n DEV 1

rxerr/s > 0 或 rxdrop/s > 0

高负载进程

ps aux --sort=-%cpu | head -10

第一列高 CPU 进

Swap 使用

vmstat 1

siso

六,Linux内核版本优化 

linux内核优化
升级内核
rpm -ivh kernel-3.10...rpm  
查看内核模块
/lib/modules
uname -r  查看内核版本
3.10.0-957.el7.x86_64
内核版本号由3部分组成
3.10.0-957
主版本号
次版本号:次版本号决定该内核是稳定版本还是开发版本  偶数稳定版本  奇数 开发版本
末版本号(修订版本号)
查询模块
lsmod |grep xfs
modinfo  xfs
加载模块
modprobe  ext4
卸载模块
modprobe  -r  ext4
开启IP转发
vim  /etc/sysctl.conf
net.ipv4.ip_forward  =  1
sysctl -p /etc/sysctl.conf
开启禁ping
vim  /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all  =  1
sysctl -p /etc/sysctl.conf
http://www.lryc.cn/news/608569.html

相关文章:

  • 轻量级鼠标右键增强工具 MousePlus
  • 轨道追逃博弈仿真
  • FreeRTOS源码分析二:task启动(RISCV架构)
  • 断路器瞬时跳闸曲线数据获取方式
  • Codeforces Round 1039 (Div. 2) A-C
  • 搜索引擎评估革命:用户行为模型如何颠覆传统指标?
  • Pytorch-02数据集和数据加载器的基本原理和基本操作
  • Node.js 路由与中间件
  • DyWA:用于可推广的非抓握操作的动态自适应世界动作模型
  • 浅拷贝与深拷贝的区别
  • 技术面试知识点详解 - 从电路到编程的全栈面经
  • 机试备考笔记 2/31
  • linux编译基础知识-头文件标准路径
  • 系统思考:超越线性分析
  • SpringBoot相关注解
  • MybatisPlus-逻辑删除
  • c++之基础B(进制转换)(第三课)
  • ARP协议是什么?ARP欺骗是如何实现的?我们该如何预防ARP欺骗?
  • 存储过程的介绍、基本语法、delimiter的使用
  • HarmonyOS 开发:基于 ArkUI 实现复杂表单验证的最佳实践
  • Makefile 从入门到精通:自动化构建的艺术
  • 【设计模式】 3.设计模式基本原则
  • Kotlin单例模式懒汉模式:LazyThreadSafetyMode.SYNCHRONIZED(2)
  • 未来交通:元宇宙技术重塑出行体验
  • 第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2024年1月28日真题
  • 深入 Go 底层原理(二):Channel 的实现剖析
  • 网易云音乐硬刚腾讯系!起诉SM娱乐滥用市场支配地位
  • Seal Report:一款免费开源的报表工具
  • 联合索引全解析:一棵树,撑起查询的半边天
  • TCL --- 列表_part2