news 2026/7/17 6:59:48

Linux系统性能调优与监控

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux系统性能调优与监控

文章目录

  • 前言
  • 一、系统调优概述
    • 1.1 系统调优思路
    • 1.2 各子系统之间的依赖关系
  • 二、CPU性能监控工具
    • 2.1 uptime 命令:查看系统平均负载
    • 2.2 判断CPU负载是否过高的示例
    • 2.3 查看CPU详细信息
    • 2.4 使用 top 按 CPU 使用率排序
    • 2.4 使用 ps 查看 CPU 使用最多的进程
    • 2.5 mpstat命令:查看CPU详细使用情况
  • 三、内存性能监控工具
    • 3.1 free命令:查看内存使用情况
    • 3.2 查看详细的内存信息
    • 3.3 查找内存使用最多的进程
  • 四、磁盘I/O监控工具
    • 4.1 iostat命令:查看IO是否存在瓶颈
      • 4.1.1 iostat案例:使用 dd 测试磁盘写入
    • 4.2 iotop命令:查看实时I/O进程
  • 五、网络性能监控工具
    • 5.1 nload:监控实时带宽使用情况
    • 5.2 nethogs:查看进程网络使用
  • 六、系统整体监控工具
    • 6.1 vmstat命令:查看内存及系统整体运行状态
    • 6.2 sar命令:记录系统运行状态
      • 6.2.1 命令行参数说明:
      • 6.2.2 常用选项列表
  • 七、CPU资源调优
    • 7.1 调整进程优先级(nice 值)
      • 7.1.1 nice 值范围与含义
    • 7.2 设置 CPU 亲和力(taskset)
  • 八、磁盘IO调优
    • 8.1 ulimit 资源限制
    • 8.2 测试硬盘速度
  • 总结

前言

本文核心是定位并消除CPU、内存、磁盘、网络等子系统的瓶颈,使系统达到平衡状态,并提出了“先整体监控定位,再具体分析瓶颈,最后针对性调优”的完整思路。包含了CPU(uptime、top、mpstat)、内存(free、vmstat)、磁盘I/O(iostat、iotop)到网络(nload、nethogs)的监控工具链,以及进程优先级调整(nice)、CPU亲和力绑定(taskset)和资源限制(ulimit)等具体调优方法。

一、系统调优概述

系统调优是通过调整软硬件配置和代码,在现有资源下提升性能(速度、吞吐量)的实践。核心是先定位瓶颈(用工具找短板),再由易到难调整(网络→系统参数→中间件→代码),每次只改一项并对比结果,避免盲目操作。

1.1 系统调优思路

  • 第一步:观察系统运行状况
    按照优先级顺序依次检查CPU状态、内存使用情况、磁盘IO、网络流量、应用程序性能
  • 第二步:分析是否存在瓶颈
    根据应用需求判断是否存在性能瓶颈
  • 第三步:采取调优措施
    采取针对性措施改善性能

1.2 各子系统之间的依赖关系

各子系统之间是相互依赖、相互影响的,一个子系统的高负载可能导致其他子系统出现问题。
比如:
(1)CPU与内存:大量的网页调入请求导致内存队列的拥塞,系统会频繁交换数据,导致CPU忙于“搬砖”而非处理业务。
(2)CPU与网络:网卡的大吞吐量可能导致更多的CPU开销,因为每个网络包都需要
CPU处理。如果网络中断处理占用过多CPU,会严重影响其他业务的执行。
(3)内存与磁盘:大量来自内存的磁盘写请求可能导致更多的CPU以及IO问题。内存中的数据最终需要写入磁盘,如果磁盘IO缓慢,会导致内存中待写入的数据堆积。
(4)内存与CPU:当内存不足时,内核需要频繁进行内存页的换入换出操作(swapping),这会消耗大量CPU资源,同时产生大量磁盘IO,形成恶性循环。

二、CPU性能监控工具

2.1 uptime 命令:查看系统平均负载

uptime

  • 11:21:32是当前时间。
  • up 35min是系统运行时间 ,说明此服务器连续运行 35分钟了。
  • 2 users是当前登录用户数。
  • load average: 0.00, 0.01, 0.05是系统负载平均值,即任务队列的平均长度,三个数值分别为 1 分钟、5 分钟、15分钟前到现在的平均值。
  • 若1分钟负载值 > CPU核心数,说明系统可能过载。
  • 根据经验法则:单核心CPU的load average不要超过3,四核心CPU的负载不要超过12,其中load average为3意味着平均有3个任务在等待CPU处理。

2.2 判断CPU负载是否过高的示例

  • 服务器1:load average: 0.15, 0.08, 0.01,1核 → 负载很低,正常
  • 服务器2:load average: 4.15, 6.08, 6.01,1核 → 负载过高!需要关注
  • 服务器3:load average: 10.15, 10.08, 10.01,4核 → 负载正常(10 < 12)因为4核服务器,能承受的合理上限为3x4=12

2.3 查看CPU详细信息

cat/proc/cpuinfo#查看CPU详细信息,CPU核心数是从0开始计算的

2.4 使用 top 按 CPU 使用率排序

  • top命令的输出中各列含义如下:
    PID:进程ID
    USER:进程所属用户
    PR:进程优先级
    NI:nice值
    VIRT:虚拟内存大小
    RES:常驻内存大小
    SHR:共享内存大小
    S:进程状态(R=运行,S=睡眠,D=不可中断,T=停止,Z=僵尸)
    %CPU:CPU使用率
    %MEM:内存使用率
    TIME+:CPU累计使用时间
    COMMAND:进程命令
top#最常用的进程监控工具

按大写P按 CPU 使用率降序排列。

2.4 使用 ps 查看 CPU 使用最多的进程

ps-aux--sort-pcpu|head-n11#显示前10个使用CPU最多的进程# -aux表示所有进程, --sort -pcpu表示按CPU使用率降序排序

参数含义

  • VIRT(虚拟内存):进程"需要的"虚拟内存大小,包括进程使用的库、代码、数据等。
  • RES(常驻内存):进程当前实际使用的内存大小,不包括swap out的部分。
  • SHR(共享内存):除了自身进程的共享内存,也包括其他进程的共享内存。计算某个进程实际占用物理内存的公式是:RES - SHR。

2.5 mpstat命令:查看CPU详细使用情况

mpstat
  • 参数说明
    %usr:用户空间 CPU 使用占比。
    %nice:低优先级进程使用CPU占比(nice值大于0的进程)。
    %sys:内核空间 CPU 使用占比。
    %iowait:CPU 等待 IO 占比(这个值高说明磁盘可能是瓶颈)。
    %irq:CPU处理硬中断占比。
    %soft:CPU处理软中断占比。
    %idle:CPU 空闲时间占比(最重要,越高越好)。

三、内存性能监控工具

3.1 free命令:查看内存使用情况

free-h#显示详细信息(包括buffers和cache)

  • 字符解释
    total:总内存
    used:已使用内存
    free:完全空闲的内存
    shared:共享内存
    buff/cache:缓冲区/缓存内存
    available:真正可用的内存(重要)

3.2 查看详细的内存信息

cat/proc/meminfo

3.3 查找内存使用最多的进程

方法1:运行top,然后按大写M可以按内存使用率来排序显示。
方法2:按照实际使用内存,从大到小排序显示所有进程列表

ps-aux--sort-rss|head#按物理内存降序,-rss表示按实际占用的物理内存排序。加上负号是降序,去掉负号就是升序。

四、磁盘I/O监控工具

4.1 iostat命令:查看IO是否存在瓶颈

rpm-qsysstat#检查是否安装sysstat,因为iostat是sysstat软件包的一部分yuminstall-ysysstat#若未安装sysstat,则yum install下载iostat-d-k#只显示磁盘统计信息iostat-d-k-p/dev/sda#显示指定磁盘的统计信息iostat-d-k1#每秒刷新一次iostat-d-k-p/dev/sda15#共采集五次

常用参数
-d仅显示磁盘统计信息。
-k以KB为单位显示每秒的磁盘请求数,默认单位块。
-pdevice | ALL 用于显示块设备及系统分区的统计信息。
1:采样间隔时间,单位为秒(这里表示每 1 秒采集一次数据)
5:采样次数

关键指标
kB_read/s每秒从磁盘读入的数据量,单位为K.
kB_wrtn/s每秒向磁盘写入的数据量,单位为K.
kB_read读入的数据总量,单位为K.
kB_wrtn写入的数据总量,单位为K.

4.1.1 iostat案例:使用 dd 测试磁盘写入

ddif=/dev/zeroof=a.txtbs=10Mcount=1000#if:输入文件。of:输出文件。bs=10M:设置每次读写的块大小为 10MB。count=1000:设置读写的块数量为 1000,所以总文件大小是 10MB×1000=10000MB(约 10GB)iostat-psda-dk#查看磁盘I/O使用情况


4.2 iotop命令:查看实时I/O进程

问题场景:公司服务器运行缓慢,但CPU使用率和内存占用均正常,主要卡顿出现在启动新程序或打开文件时。此时系统瓶颈可能在哪里?
解决方案:问题通常出在磁盘I/O上。可通过iotop命令检查磁盘读写最频繁的进程。iotop实时监控磁盘I/O使用情况。

yuminstall-yiotop iotop-o#显示正在使用磁盘的进程iotop-d2#每2秒刷新一次iotop-o-d1#只显示有IO输出的进程

iotop常用快捷键

快捷键功能描述
左箭头/右箭头切换排序依据的列(默认按 IO 使用率排序)
r反转当前排序顺序(升序/降序)
p切换进程/线程的显示模式(显示线程或聚合为进程)
a切换显示累计 IO 使用量(而非实时值)
q退出iotop工具

五、网络性能监控工具

5.1 nload:监控实时带宽使用情况

#安装nloadyuminstallnload-ynload#nload会显示两个方向的流量:Incoming(入站)和Outgoing(出站)。按左右箭头可以切换查看不同网卡。ab-n100000-c1000http://10.8.0.10/index.html#做ab压测,-n 100000:指定总请求数为 100000 次。ab 会向目标 URL 发送共计 100000 次 HTTP 请求。# -c 1000:设置并发连接数为1000。表示同时有1000个请求并行发送到服务器。# http://10.8.0.10/index.html 目标测试 URL。ab 会针对该地址发起请求测试。


5.2 nethogs:查看进程网络使用

yum-yinstallnethogs#安装 nethogsnethogs#查看进程网络宽带

六、系统整体监控工具

6.1 vmstat命令:查看内存及系统整体运行状态

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,MEM内存使用,VMSwap虚拟内存交换情况,IO读写情况。
使用vmstat可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率。 比top命令节省资源。

vmstat#查看系统整体状态vmstat15#每秒刷新一次,连续显示5次


vmstat关键指标

  • Procs(进程):
    r:等待运行的进程数(如果超过CPU核心数的3倍,说明CPU繁忙)
    b:不可中断睡眠的进程数(通常在等待IO)
  • Memory(内存):
    swpd:已使用的虚拟内存大小
    free:空闲的物理内存大小
    buff:用于buffer的内存大小
    cache:用于cache的内存大小
  • Swap(交换分区):
    si:从磁盘换入内存的量(KB/s)
    so:从内存换出到磁盘的量(KB/s)
    如果si和so长期大于0,说明物理内存不够用。
  • IO:
    bi:从磁盘读入内存的数据量(blocks/s)
    bo:从内存写入磁盘的数据量(blocks/s)
    System(系统):
    in:每秒中断次数
    cs:每秒上下文切换次数
  • CPU:
    us:用户态CPU时间百分比
    sy:系统态CPU时间百分比
    id:CPU空闲时间百分比
    wa:等待IO的CPU时间百分比

6.2 sar命令:记录系统运行状态

yuminstall-ysysstat#安装sysstatcat/etc/cron.d/sysstat#查看sar的计划任务

6.2.1 命令行参数说明:

t:指定采样间隔(必需参数)
n:指定采样次数(可选参数,默认值为1)
-o file参数表示将命令结果以二进制格式保存到指定文件中

6.2.2 常用选项列表

sar-u15# 查看CPU使用情况sar-r15# 查看内存使用情况sar-d15# 查看磁盘IO情况sar-nDEV15# 查看网络接口情况sar-A15# 查看所有信息sar-u25-ocpu.sar# 保存采样数据到文件sar-u-fcpu.sar# 读取历史二进制文件sar-f/var/log/sa/sa16# 查看历史日志





重点关注 %iowait 和 %idle:
(1)若 %iowait 过高,说明硬盘存在 I/O 瓶颈
(2)%idle 较高表示 CPU 空闲,但如果系统响应仍然缓慢,可能是 CPU 在等待内存分配,此时建议增加内存容量
(3)若 %idle 持续低于 10%,则表明 CPU 处理能力不足,需要优先优化 CPU 资源

七、CPU资源调优

7.1 调整进程优先级(nice 值)

7.1.1 nice 值范围与含义

范围:-20(最高优先级)到 19(最低优先级),默认值为 0。
规律
(1)nice 值越小(甚至为负),优先级越高,系统会更频繁地调度该进程;
(2)nice 值越大,优先级越低,系统会减少对其的 CPU 资源分配。

nice-n-5vimb.txt#命令运行前调整nice值ps-eopid,ni,comm|grepvim#查看进程的PID和nice值


7.2 设置 CPU 亲和力(taskset)

功能:通过将进程绑定到指定 CPU 核心,减少上下文切换开销,提升性能。

yuminstall-yutil-linux taskset-cp103255#查看进程的CPU亲和力taskset-c0vima.txt# 在CPU 0上运行taskset-c1,3vimb.txt# 在CPU 1或3上运行taskset-c0-3vimc.txt# 在任意CPU 0-3上运行

八、磁盘IO调优

8.1 ulimit 资源限制

ulimit是Linux系统用于限制用户或进程使用系统资源的功能。常见的限制包括:最大文件数(open files)、最大进程数(max user processes)、最大内存大小、最大CPU时间、最大栈大小。
常用配置

* soft nofile1024000* hard nofile1024000* soft nproc65535* hard nproc65535*:表示对 所有用户 生效(也可以指定具体用户名,如 root 或 www) soft:软限制(警告线),超过时系统会警告,但允许临时超过(直到进程结束) hard:硬限制(强制线),由内核强制执行,绝对不能超过(软限制不能高于硬限制) nofile:限制 打开文件描述符的数量(包括文件、网络连接、管道等,Linux 中 “一切皆文件”) nproc:限制 用户能创建的进程 / 线程数量 具体配置的含义: * soft nofile1024000所有用户的 软限制:最多可打开1024000个文件描述符(超过会警告) * hard nofile1024000所有用户的 硬限制:绝对不能打开超过1024000个文件描述符 * soft nproc65535所有用户的 软限制:最多可创建65535个进程 / 线程(超过会警告) * hard nproc65535所有用户的 硬限制:绝对不能创建超过65535个进程 / 线程
ulimit-a#查看所有资源限制ulimit-n# 查看 nofile 软限制ulimit-Hn# 查看 nofile 硬限制ulimit-u# 查看 nproc 软限制

ulimit-n1024000#临时修改软限制#永久修改vim/etc/security/limits.conf#修改内容* soft nofile1024000* hard nofile1024000root soft nofile1024000root hard nofile1024000

8.2 测试硬盘速度

这是一个用于测试硬盘读取速度的命令,主要用于评估磁盘的顺序读取性能

hdparm-t--direct/dev/sda#hdparm:Linux 下用于查看和调整硬盘参数的工具# -t:测试硬盘的缓存读取速度(读取数据时会利用硬盘缓存和系统缓存)# --direct:启用 “直接 IO” 模式(跳过系统缓存,直接从硬盘读取原始数据,更接近真实的物理读取速度)# /dev/sda:指定要测试的硬盘设备(sda 通常是系统的第一个硬盘)ddif=/dev/zeroof=/test.dbfbs=1Mcount=2000oflag=direct,nonblock

参数说明
if=/dev/zero:输入文件(空字符流)
of=/test.dbf:输出文件
bs=1M:块大小1MB
count=2000:复制2000次(共2GB)
oflag=direct,nonblock:直接IO,非阻塞

总结

系统性能调优是一个系统工程,需要:
全面监控:使用各种工具收集系统状态数据
综合分析:理解各子系统间的相互影响
针对性优化:根据瓶颈类型采取适当措施

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 6:59:11

Linux下OpenOffice部署与中文乱码解决方案

1. Linux环境下OpenOffice部署全攻略作为一个在Linux环境下折腾办公软件多年的老用户&#xff0c;我深知OpenOffice部署过程中那些令人头疼的中文乱码和启动报错问题。今天我就来分享一套经过实战检验的完整解决方案&#xff0c;帮你避开我当年踩过的所有坑。OpenOffice作为一款…

作者头像 李华
网站建设 2026/7/17 6:58:29

纯Python实现XXTEA解密:原理、代码与实战指南

1. 项目概述&#xff1a;为什么我们需要一个纯Python的XXTEA解密实现&#xff1f; 在数据处理和通信安全领域&#xff0c;加密解密算法是构建信任的基石。你可能听说过AES、DES这些大名鼎鼎的算法&#xff0c;但在一些特定的场景&#xff0c;比如嵌入式设备、轻量级协议或者历史…

作者头像 李华
网站建设 2026/7/17 6:58:25

C语言自学指南:从环境搭建到项目实战的系统学习路径

在实际编程学习路径中&#xff0c;C语言往往被视为第一道门槛。它不仅是理解计算机底层运作机制的钥匙&#xff0c;也是后续学习操作系统、嵌入式开发、高性能计算等领域的基石。然而&#xff0c;面对网络上浩如烟海的学习资源&#xff0c;初学者常常陷入选择困难&#xff0c;或…

作者头像 李华
网站建设 2026/7/17 6:58:15

Spine骨骼动画全流程指南:从零制作2D游戏角色动画

1. 项目概述&#xff1a;为什么是Spine&#xff0c;而不是一帧帧画&#xff1f;如果你还在用传统的一帧帧绘制&#xff08;也就是所谓的“逐帧动画”&#xff09;来制作2D游戏角色动画&#xff0c;那感觉就像是在用算盘处理大数据——精神可嘉&#xff0c;但效率实在感人。我见…

作者头像 李华
网站建设 2026/7/17 6:58:05

Muse Spark 1.1在AA-Briefcase基准测试中的表现与应用解析

如果你正在寻找一个能够真正处理复杂知识工作的AI助手&#xff0c;而不仅仅是聊天机器人&#xff0c;那么最近发布的Muse Spark 1.1绝对值得关注。在最新的AA-Briefcase基准测试中&#xff0c;这款由Meta推出的模型获得了863分的综合评分&#xff0c;与Google的Gemini 3.5 Flas…

作者头像 李华