Linux系统性能调优与监控
目录
课程说明
本课程为零基础学员设计,通过理论结合实践的方式,系统学习Linux系统性能监控和调优
技术。课程采用生活化类比的方式帮助理解复杂概念,每个知识点都配有动手实验,确保学
以致用。本课程整合了系统监控工具使用和内核参数调优两大核心内容,是云计算工程师必
备的实用技能。
一.系统调优概述与CPU负载监控
1.系统调优思路
学习目标
理解系统性能优化的整体思路
掌握分析系统瓶颈的基本方法
了解各子系统之间的相互依赖关系
理论讲解
什么是系统性能调优
性能优化就是找到系统处理中的瓶颈以及去除这些瓶颈的过程,性能优化其实是对操作系统
各子系统达到一种平衡状态的定义。一个高效的系统需要在CPU、内存、磁盘IO、网络等
各个方面达到良好的平衡状态,任何一个子系统成为瓶颈都会影响整体性能。
生活化类比:系统调优就像医生看病
想象一下,一个人生病去医院,医生绝不会只凭一两个症状就仓促开药,而是会安排一系列检查,力求找到真正的病因。同理,系统调优也绝不是“头痛医头、脚痛医脚”,而需要从CPU、内存、磁盘、网络等多个维度出发,综合评估各项指标,精准定位性能瓶颈,再有的放矢地进行优化。
举个例子:一个人感觉头晕目眩,表面看是头部不适,可背后原因可能是颈椎压迫神经、贫血,甚至只是长期睡眠不足。系统调优也是这个道理——网页加载缓慢,表面看像网络延迟,但真正的元凶可能是CPU过载、内存不足导致频繁换页,或者磁盘I/O能力饱和。只有找准症结,调优才能一击即中,事半功倍。
系统调优的一般步骤
系统调优通常遵循以下三个步骤:
第一步:全面观察系统运行状况
建议按照优先级依次检查:CPU状态 → 内存使用 → 磁盘I/O → 网络流量 → 应用程序性能。这套顺序有其内在逻辑:CPU是整个系统的运算核心,任何操作都离不开它的调度与执行;内存若出现不足,系统便会频繁使用交换分区(swap),进而拖慢整体性能;磁盘I/O是计算机体系中最慢的环节之一,容易成为系统瓶颈;网络则承担着与外部通信的重任,影响服务的可达性与响应速度。从高到低、由内而外地排查,有助于快速抓住主要矛盾。
第二步:精准分析是否存在瓶颈
不同业务场景对系统资源的需求各有侧重,因此要结合当前应用的实际情况,判断各子系统是否存在性能短板。例如,文件服务器的瓶颈往往集中在磁盘I/O,Web服务器更多依赖CPU和网络能力,而数据库服务器则对内存、CPU和磁盘I/O均有较高要求,三者缺一不可。只有基于业务模型进行分析,才能判定哪些资源确实存在压力。
第三步:合理采取调优措施
在明确瓶颈之后,便可针对具体问题制定优化方案,使其性能表现趋于理想。调优手段多种多样,可能包括调整内核参数、优化应用程序配置文件、升级硬件设备等。关键在于“对症下药”,在不引入新问题的前提下,最大限度提升系统整体效能。
各子系统之间的依赖关系
Linux系统的各个子系统之间并非孤立运行,而是相互依赖、彼此耦合,理解这种复杂关系,是准确定位性能问题的关键所在。下面从几个典型维度展开说明:
-
CPU与内存的关系:当大量网页请求涌入时,内存队列容易出现拥塞。一旦内存资源紧张,系统不得不将大量CPU时间耗费在内存管理上,反而削弱了处理实际业务的能力。
-
CPU与网络的关系:高吞吐量的网卡会带来密集的网络中断,而每一个网络包都需要CPU参与处理。如果网络中断处理消耗了过多CPU资源,必然挤占其他业务的执行空间,拖累整体性能。
-
内存与磁盘的关系:内存中积累的待写入数据,最终都要落盘。如果磁盘I/O响应缓慢,这些待刷新的数据就会在内存中堆积,既加剧内存压力,也可能进一步引发CPU与I/O路径上的连锁问题。
-
内存与CPU的恶性循环:当内存不足时,内核会频繁进行页面换入换出(swapping)操作。这一过程不仅消耗大量CPU资源,还会引发显著的磁盘I/O负载,而磁盘缓慢又反过来加重内存压力,形成层层叠加的恶性循环。
课堂实验:综合分析系统状态
# 首先查看系统整体负载
uptime
# 查看CPU使用情况
top
crtl+z退出
# 查看内存使用情况
free -h
# 查看磁盘IO情况
iostat -x 1
# 查看网络情况
sar -n DEV 1
2.查看CPU负载相关工具
学习目标
掌握uptime命令查看系统负载的方法
理解load average三个数值的含义
能够判断系统CPU负载是否过高
理论讲解
uptime命令详解
uptime命令是最简单也是最常用的系统负载查看工具,它能够告诉我们系统运行了多久、
有多少用户登录、以及系统负载情况。
[root@xuegod63 ~]# uptime
12:38:33 up 50days, 3 users, load average: 0.06, 0.60, 0.48
输出内容解析:
第一项12:38:33是当前时间;
第二项up 50days表示系统连续运行了50天
第三项3 users表示当前有3个用户登录
第四项load average: 0.06, 0.60, 0.48是系统负载平均值,三个数值分别表示1分钟、5分钟、
15分钟前到现在的平均值。
生活化类比:理解系统负载
系统负载(Load Average)可以通俗地理解为“正在排队等待CPU处理的任务数量”。为了更好地理解这个概念,我们不妨借用银行柜台办理业务的场景来类比:
·每个柜台一次只能接待一位客户,而每个CPU核心在同一时刻也只能处理一个任务;
·如果此时有4位客户在排队等候,那么系统的负载就是4;
·Load Average 则是对应不同时间段内平均排队人数的统计,反映了系统在一段时间内的整体繁忙程度。
以单核心CPU为例,如果Load Average为3,意味着平均有3个任务在同时竞争CPU资源,其中有任务在等待处理,说明系统已经感受到一定的压力。根据业界常用的经验法则:单核心CPU的Load Average建议控制在3以内,而对于四核心CPU,整体负载则不宜超过12。
判断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)
任务队列的解释
Linux系统的负载表示的是任务队列的平均长度,包括正在运行的进程和等待运行的进程。
这个队列就像银行营业厅里排队的人数,包括正在柜台办理业务的和等待叫号的。
实践操作:查看CPU详细信息
# 查看CPU详细信息
cat /proc/cpuinfo
# 查看CPU型号
cat /proc/cpuinfo | grep "model name"
# 查看CPU核心数
cat /proc/cpuinfo | grep "processor" | wc -l
3.找出使用CPU最多的进程
学习目标
掌握top命令按CPU使用率排序
掌握ps命令按CPU使用率排序
理解top命令中VIRT、RES、SHR的区别
实践操作
方法一:使用top命令
top命令是Linux下最常用的进程监控工具,可以实时显示系统进程的资源使用情况:
# 运行top命令
top
# 在top界面中按大写P键,可以按CPU使用率排序
# 在top界面中按大写M键,可以按内存使用率排序
top命令的输出中各列含义如下:
PID:进程ID
USER:进程所属用户
PR:进程优先级
NI:nice值
VIRT:虚拟内存大小
RES:常驻内存大小
SHR:共享内存大小
S:进程状态(R=运行,S=睡眠,D=不可中断,T=停止,Z=僵尸)
%CPU:CPU使用率
%MEM:内存使用率
TIME+:CPU累计使用时间
COMMAND:进程命令
方法二:使用ps命令
ps命令可以显示进程的静态快照,配合排序选项可以找出CPU使用最多的进程:
# 按CPU使用率降序排列所有进程
ps -aux --sort -pcpu | more
# 只显示前10个使用CPU最多的进程
ps -aux --sort -pcpu | head -n 11
参数说明:-aux表示显示所有进程,--sort -pcpu表示按CPU使用率降序排序。使用-pcpu可
以看到进程的绝对路径,方便找出可疑程序(如木马程序)的位置。
理解VIRT、RES、SHR的含义
VIRT(虚拟内存):表示进程“申请”的虚拟内存总量,包括它所依赖的库、代码段、数据段等。即便进程实际只使用了其中很小一部分,只要申请了,VIRT就会记录为申请值。例如,进程申请了100MB内存,但仅用了10MB,VIRT依然显示为100MB。
RES(常驻内存):表示进程当前实际驻留在物理内存中的大小,不包含被交换出去(swap out)的部分。如果进程申请了100MB但实际只用了10MB,那么RES就只显示10MB。需要注意的是,RES中同时包含了与其他进程共享的内存部分。
SHR(共享内存):表示进程所占用的共享内存大小,既包括本进程与其他进程共享的内存,也包含其他进程正在使用的共享库等资源。即便进程实际只调用了某个共享库中的少量函数,SHR统计的可能是整个共享库的大小。
在实际运维中,若要估算某个进程独享的物理内存占用,可通过以下公式计算:
进程独占物理内存 ≈ RES - SHR
4.使用mpstat查看CPU运行情况
学习目标
掌握mpstat命令的使用
理解mpstat输出各列的含义
能够查看单个CPU核心的使用情况
实践操作
安装mpstat
mpstat是sysstat软件包的一部分:
# 查看是否已安装
rpm -qf `which mpstat`
# 如果未安装,则安装
yum install -y sysstat
mpstat基本用法
# 查看所有CPU的统计信息
mpstat
# 查看每个CPU核心的详细状态
mpstat -P ALL
# 每秒刷新一次,连续显示100次
mpstat -P ALL 1 100
mpstat输出各列含义

CPU使用率参考值
一个健康的CPU使用率分布应该是这样的:
65%-70%:用户态时间(运行应用程序)
30%-35%:系统态时间(运行内核)
0%-5%:空闲时间
如果%iowait很高,说明系统在等待磁盘IO,这时候需要检查磁盘性能。如果%idle很低
但%usr也不高,可能是内存不足导致频繁swap,或者有其他系统资源瓶颈。
二.内存运行状态监控
1.查看内存运行状态
学习目标
掌握free命令查看内存使用情况
理解Linux内存管理的原理
能够判断内存是否不足
理论讲解
Linux内存管理机制
Linux系统有一个非常重要的特性:内存总是会被尽可能地充分利用。系统会将空闲的内存用于缓存(cache)和缓冲区(buffer),以提升文件读写和I/O性能。当应用程序真正需要内存时,这些缓存可以立即被释放并重新分配。因此,仅仅看到 free 内存很少,并不意味着系统内存不足,关键要看 available 的值。
在CentOS 7及其之后的系统中,free 命令输出的 available 列,表示当前系统真正可供应用程序使用的内存大小。这个值不仅包括空闲内存(free),还统计了可以被回收的 buffer 和 cache 部分。当物理内存紧张时,内核会自动清理非活跃的缓存数据,将其释放给应用程序使用。
需要特别注意的是,available 并不简单地等于 free + buffer + cache 之和,因为并非所有缓存都能被立即回收(比如正在被使用的共享内存或某些脏页)。通常情况下,available 会略低于 free + buffer + cache 的总和,但更贴近系统实际可用的内存余量。因此,在日常运维中,优先关注 available 字段,比只看 free 更能准确判断内存的真实状况。
生活化类比:内存就像公司办公桌
把Linux系统的内存管理想象成公司的办公桌:
free内存 = 空闲的办公桌桌面,可以随时使用
buffer/cache = 桌面上已经摆放好的文件资料,随时可以归档
available = 实际上可以用于新工作的空间(包括清空后的桌面)
桌面上摆满文件(buffer/cache)不代表你没有工作空间,把文件归档(释放缓存)就可以
了。Linux就是这样管理内存的。
实践操作
free命令详解
# 以MB为单位显示内存使用情况
free -m
# 以GB为单位显示内存使用情况
free -g
# 显示详细信息(包含buffers和cache)
free -h
total:总内存
used:已使用的内存
free:完全空闲的内存
shared:共享内存
buff/cache:缓冲区/缓存内存
available:真正可用的内存(最重要!)
查看/proc/meminfo
# 查看详细的内存信息
cat /proc/meminfo
重要指标说明:
MemTotal:总物理内存
MemFree:空闲内存
Buffers:用于块设备缓存的内存
Cached:用于文件缓存的内存
Active:活跃内存(进程一直在读写)
Inactive:非活跃内存(最近未被访问,可以被回收)
关键判断:如果inactive内存很多,说明系统有足够的内存可以释放。但如果是active内存
很多,那就要考虑增加内存了。
2.找出使用内存最多的进程
学习目标
掌握top命令按内存排序
掌握ps命令按内存排序
能够定位内存占用异常的进程
实践操作
方法一:使用top命令
# 运行top命令
top
# 在top界面中按大写M键,可以按内存使用率排序
方法二:使用ps命令
# 按内存使用量降序排列
ps -aux --sort -rss | more
# 只显示前10个使用内存最多的进程
ps -aux --sort -rss | head -n 11
参数说明:-rss表示按实际占用的物理内存(Resident Set Size)排序。加上负号是降序,
去掉负号就是升序。
三.磁盘IO运行状态监控
1.查看磁盘IO状态
学习目标
掌握iostat命令的使用
理解磁盘IO性能指标的含义
能够判断磁盘是否存在IO瓶颈
实践操作
安装iostat
# iostat是sysstat软件包的一部分
yum install -y sysstat
iostat基本用法
# 只显示磁盘统计信息
iostat -d -k
# 显示指定磁盘的统计信息
iostat -d -k -p /dev/sda
# 每秒刷新一次
iostat -d -k 1
iostat输出各列含义

实战:判断磁盘IO瓶颈
如果发现磁盘的kB_read/s和kB_wrtn/s值非常高,或者%iowait很高,说明磁盘IO是系统瓶
颈,需要考虑:
优化应用程序的磁盘读写逻辑
使用SSD替代机械硬盘
增加内存减少IO需求
使用RAID提高IO性能
2.使用iotop找出磁盘IO最多的进程
学习目标
掌握iotop命令的使用
理解如何找出IO密集型进程
能够分析进程的IO行为
实践操作
安装iotop
yum install -y iotop
iotop基本用法
# 显示正在使用磁盘的进程
iotop -o
# 每2秒刷新一次
iotop -d 2
# 只显示有IO输出的进程
iotop -o -d 1
iiotop交互操作
左右箭头:改变排序方式(默认按IO排序)
r:改变排序顺序
p:切换进程/线程显示
a:显示累积使用量
q:退出
实战:模拟磁盘IO密集型操作
# 在一个终端启动大量磁盘读写
find /
# 在另一个终端运行iotop观察
iotop -o
四.网络运行状态监控
1.找出使用网络最多的进程
学习目标
掌握nload查看总体带宽使用
掌握nethogs查看进程带宽使用
能够定位网络带宽占用最高的进程
理论讲解
网络监控的重要性
在云计算环境中,网络监控的重要性尤为突出。虚拟机和容器之间依赖网络进行通信,一旦某个进程抢占大量带宽,便会直接波及周边服务的稳定性。当IDC机房来电提示服务器流量异常时,能否快速锁定具体进程,往往决定了故障处理时长,也直接影响服务可用性。
实践操作
方法一:使用nload监控总体带宽
# 安装nload
yum install -y nload
# 运行nload
nload
nload会显示两个方向的流量:Incoming(入站)和Outgoing(出站)。按左右箭头可以切
换查看不同网卡。
方法二:使用nethogs查看进程带宽
# 安装nethogs
yum install -y nethogs
# 查看进程网络带宽使用
nethogs
nethogs可以显示每个进程的网络带宽使用情况,非常适合找出"谁在偷跑流量"。
实战:定位异常流量
场景:突然收到IDC机房电话,说服务器对外流量很大,应该怎么办?
# 1. 使用nethogs快速定位
nethogs
# 2. 找出带宽使用最多的进程
# 3. 如果是wget/curl在下载,kill掉
# 4. 如果是正常业务进程,检查是否被攻击
五.系统整体运行状态监控
1.使用vmstat查看系统整体状态
学习目标
掌握vmstat命令的使用
理解vmstat各列的含义
能够通过vmstat判断系统瓶颈
理论讲解
vmstat 简介
vmstat(Virtual Memory Statistics)是 Linux/Unix 系统中最常用的监控工具之一,能够按指定时间间隔输出服务器的整体运行状态,涵盖 CPU 使用率、内存使用、虚拟内存交换、I/O 读写等关键指标。
与 top 相比,vmstat 的定位有所不同:它侧重于展示整台机器的全局资源使用情况,而不是逐个进程的 CPU 和内存占用明细。此外,vmstat 的资源开销远小于 top,在系统负载较高时,使用 vmstat 能更稳定地获取数据,避免因监控工具本身占用过多资源而干扰排查。
因此,当机器响应缓慢时,建议优先使用 vmstat 观察整体状况,再根据需要配合其他工具深入分析具体进程。
实践操作
vmstat基本用法
# 查看系统整体状态
vmstat
# 每秒刷新一次,连续显示10次
vmstat 1 10
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时间百分比
实战:判断系统瓶颈
场景1:刚开机一切正常的系统
vmstat 1 10
观察结果:r列数值很小(< 12),free很大,si和so都是0,id很高(> 90%),wa很低。这
是正常状态。
场景2:上传大文件到服务器
# 运行vmstat监控
vmstat 1 1000
# 然后使用xftp上传大文件到服务器
观察结果:bo很大(写入磁盘),bi为0(只写不读),r、free、us、id都正常,wa也不
高。说明系统IO压力不大,可以正常处理。
场景3:复制大文件
# 复制一个大型目录
cp -r /lib64/ /opt/
# 同时监控vmstat
vmstat 1 1000
观察结果:bi和bo都很大,r列不高但wa很高(30%+),说明系统的瓶颈在磁盘IO。因为
大量进程都在等待读写磁盘。
场景4:Web服务器压力测试
# 启动Web服务
systemctl start httpd
# 进行压力测试
ab -n 500000 -c 200 http://192.168.1.63/index.html
# 监控vmstat
vmstat 1 1000
观察结果:r列超过12(CPU核心数的3倍),wa为0,但us和sy都很高。说明CPU是瓶颈,
需要优化或增加CPU资源。
2.使用sar记录系统运行状态
学习目标
掌握sar命令的安装和使用
理解sar的采样和历史记录功能
能够分析历史数据
理论讲解
sar 简介
sar(System Activity Reporter)是 sysstat 软件包中最核心、功能最强大的系统监控工具,它能够收集、报告并持久化保存系统活动信息。与 vmstat 等工具相比,sar 最大的优势在于:不仅可以实时采样,还能读取历史数据,这对于排查过去某个时间点发生的性能问题尤为重要。
sar 的默认配置是每 10 分钟自动采集一次系统状态,并将数据保存到 /var/log/sa/ 目录下(文件命名通常为 saXX,其中 XX 表示日期)。这意味着即使在问题发生后,你依然可以“穿越”回去,查看当时 CPU、内存、磁盘、网络等各项指标的变化情况,非常适合事后复盘和根因分析。
实践操作
安装和启动sar
# 安装sysstat
yum install -y sysstat
# 查看sar的计划任务
cat /etc/cron.d/sysstat
sar常用选项
# 查看CPU使用情况
sar -u 1 10
# 查看内存使用情况
sar -r 1 10
# 查看磁盘IO情况
sar -d 1 10
# 查看网络接口情况
sar -n DEV 1 10
# 查看所有信息
sar -A 1 10
保存和读取历史数据
# 保存采样数据到文件
sar -u 2 5 -o cpu.sar
# 读取历史二进制文件
sar -u -f cpu.sar
# 查看历史日志
sar -f /var/log/sa/sa04
常见用法示例
# 查看今天早上9点到10点的系统状态
sar -s 09:00:00 -e 10:00:00 -f /var/log/sa/sa04
# 查看内存历史
sar -r -f /var/log/sa/sa04
# 查看磁盘历史
sar -d -f /var/log/sa/sa04
# 查看网络历史
sar -n DEV -f /var/log/sa/sa04
六.CPU资源调优
1.调整进程优先级
学习目标
理解nice值的概念和作用
掌握使用nice命令调整进程优先级
掌握使用renice修改运行中进程的优先级
理论讲解
nice值原理
在Linux系统中,每个进程都有一个nice值,用来影响其调度优先级。nice值的范围通常是 -20 到 +19(不同系统可能略有差异),其核心规则是:
nice值越低,优先级越高
nice值越高,优先级越低
具体而言:
-20:最高优先级,进程会优先获得CPU资源
0:默认值,表示不调整优先级,按正常调度
+19:最低优先级,进程只有在系统空闲时才会被调度
实践操作
使用nice命令
# 在命令运行前调整nice值
nice -n -5 vim a.txt # 将vim的优先级提高到-5
# nice值范围是-20到+19
nice -n -10 command # 高优先级
nice -n 10 command # 低优先级
使用renice命令
# 查看进程的PID和当前nice值
ps -axu | grep vim
# 修改运行中进程的优先级
renice -n 6 24318 # 将PID为24318的进程nice值改为6
# 限制:普通用户只能降低自己的进程优先级
# root用户可以调整任何进程的优先级
注意事项
进程优先级不能超过范围限制:
# 尝试设置-21,实际只会变成-20
renice -n -21 24219
# 输出:old priority -20, new priority -20
# 尝试设置20,实际只会变成19
renice -n 20 24219
# 输出:old priority -19, new priority -19
2.设置CPU亲和力
学习目标
理解CPU亲和力的概念
掌握taskset命令的使用
能够将进程绑定到指定CPU核心
理论讲解
什么是CPU亲和力
CPU亲和力(CPU Affinity)是指将某个进程或线程强制绑定到特定的CPU核心上运行的一种机制。在多核CPU系统中,合理利用CPU亲和力能够带来多方面的收益:
减少进程在不同CPU之间迁移的开销:避免因频繁切换核心而导致的上下文切换成本
提高CPU缓存命中率:进程固定在某一核心上运行,能充分利用该核心的L1/L2缓存,减少缓存失效(Cache Miss)带来的性能损失
便于故障隔离与定位:当某个CPU核心出现硬件故障时,绑定的进程会立即暴露异常,便于及时发现问题
满足特定应用场景的需求:某些对延迟敏感或实时性要求较高的应用(如高频交易、音视频处理),需要通过绑定核心来获得更稳定的性能表现
生活化类比:专属工位
可以把CPU亲和力类比为员工的专属工位:
假设一家公司有4个部门(对应4个CPU核心),每个部门都有自己的文件柜(对应CPU缓存)。如果一个员工经常在不同部门之间流动办公,每到一个新部门,他都需要重新借阅文件、熟悉环境,效率自然不高。
但如果固定他在一个部门工作,他只需要使用该部门的文件柜,文件随手可得,工作起来更加高效顺畅。
同理,将进程固定在某个CPU核心上,它能“认准”自己的缓存数据,减少反复加载的开销,从而提升整体执行效率。
实践操作
taskset命令
# 安装taskset
yum install -y util-linux
# 查看进程的CPU亲和力
taskset -cp 进程PID
# 指定进程在特定CPU上运行
taskset -c 0 vim a.txt # 在CPU 0上运行
taskset -c 1,3 vim b.txt # 在CPU 1或3上运行
taskset -c 0-3 vim c.txt # 在任意CPU 0-3上运行
示例
# 示例1:查看sshd进程运行在哪些CPU上
ps -axu | grep sshd
taskset -cp 1087
# 输出:pid 1087's current affinity list: 0-3(可以使用全部4个CPU核心)
# 示例2:查看vim进程运行在哪个CPU上
ps -axu | grep vim
taskset -cp 2614
# 输出:pid 2614's current affinity list: 0
# 示例3:将进程绑定到特定CPU
taskset -c 1,3 vim b.txt # 绑定到CPU 1和3
七.磁盘IO调优
1.ulimit资源限制
学习目标
理解ulimit的作用
掌握修改系统资源限制的方法
能够配置文件描述符限制
理论讲解
什么是ulimit
ulimit 是 Linux 系统提供的一种资源限制机制,用于控制用户或进程能够使用的系统资源量。它可以防止某个进程或用户因异常行为(如内存泄漏、打开过多文件等)耗尽系统资源,从而保障整个系统的稳定运行。
生活化类比:公司规章制度
可以把 ulimit 类比为公司的资源管理规定:
公司为了合理利用公共资源,会制定一些规章制度,例如:
每人每天最多打印100张纸(控制资源消耗)
每人最多同时使用3台电脑(防止独占设备)
ulimit就是 Linux 系统中的这套“管理制度”,防止某个用户或进程恶意或意外地耗尽CPU、内存、文件句柄等关键资源,确保系统不会因为单个异常进程而“瘫痪”。
实践操作
查看当前限制
# 查看所有资源限制
ulimit -a
临时修改限制
# 临时修改最大文件数(重启后失效)
ulimit -n 1024000
永久修改限制
需要编辑/etc/security/limits.conf文件:
# 编辑配置文件
vim /etc/security/limits.conf
# 添加以下内容(最后追加)
* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000
说明:soft是警告值,hard是真正限制值。超过soft会警告,超过hard会报错。修改最大进程数
修改最大进程数
# 编辑配置文件
vim /etc/security/limits.d/90-nproc.conf
# 修改内容
* soft nproc 66666
* hard nproc 66666
修改后需要重启系统才能生效。
2.测试硬盘速度
学习目标
掌握hdparm测试磁盘读速度
掌握dd命令测试磁盘写速度
能够评估磁盘IO性能
实践操作
使用hdparm测试磁盘读速度
# 测试磁盘读速度(不带缓存)
hdparm -t --direct /dev/sda
# 输出示例:
/dev/sda:
Timing O_DIRECT disk reads: 258 MB in 3.02 seconds = 85.32 MB/sec
说明:-t表示执行设备读取计时测试,--direct表示使用O_DIRECT方式绕过页面缓存。
使用dd测试磁盘写速度
# 测试磁盘顺序写速度
dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct,nonblock
# 参数说明:
# if=/dev/zero:输入文件(空字符流)
# of=/test.dbf:输出文件
# bs=1M:块大小1MB
# count=2000:复制2000次(共2GB)
# oflag=direct,nonblock:直接IO,非阻塞
# 输出示例:
记录了2000+0的读入
记录了2000+0的写出
2097152000字节(2.1 GB)已复制,46.335秒,45.3 MB/秒
使用time命令测试进程运行时间
# 使用time测试命令执行时间
time dd if=/dev/zero of=/test.dbf bs=1M count=200
# 输出示例:
记录了200+0的读入
记录了200+0的写出
209715200字节(210 MB)已复制,3.79592秒,55.2 MB/秒
real 0m4.225s # 实际执行时间
user 0m0.002s # 用户态CPU时间
sys 0m2.624s # 系统态CPU时间
real time:从命令开始到结束的总时间
user CPU time:在用户态执行的时间
system CPU time:在内核态执行的时间
八.总结与实践建议
本文系统性地介绍了Linux系统性能监控与调优的核心知识体系,涵盖了从基础概念到高级实践的完整路径。主要内容总结如下:
- 系统调优方法论:强调系统调优需要像医生看病一样全面诊断,遵循"观察→分析→优化"的科学流程,理解CPU、内存、磁盘、网络等子系统之间的相互依赖关系。
- CPU监控与调优:掌握uptime、top、ps、mpstat等工具的使用,理解系统负载、进程优先级、CPU亲和力等核心概念,能够准确识别CPU瓶颈并采取相应优化措施。
- 内存监控与分析:深入理解Linux内存管理机制,熟练使用free、top等工具监控内存使用情况,能够区分VIRT、RES、SHR等关键指标的实际含义。
- 磁盘IO监控与优化:掌握iostat、iotop等磁盘监控工具,了解磁盘性能瓶颈的判断标准,学会使用ulimit进行资源限制,以及通过hdparm、dd测试磁盘性能。
- 网络监控与故障定位:使用nload、nethogs等工具监控网络流量,能够快速定位异常流量来源,掌握网络故障排查的基本流程。
- 系统整体状态监控:熟练运用vmstat、sar等综合性监控工具,能够从全局视角分析系统性能状况,并利用历史数据进行问题回溯和分析。
实践建议
基于本文内容,为读者提供以下实践建议:
- 建立监控基线:在生产环境正常运行时,记录各项关键指标的正常范围值,建立性能基线,便于后续对比分析。
- 定期巡检与预警:设置自动化监控脚本,定期检查系统关键指标,当指标超过阈值时及时告警,做到问题早发现、早处理。
- 分层排查策略:遇到性能问题时,按照"整体→局部"的顺序排查:先用vmstat、sar查看全局状态,再用top、iostat等工具定位具体瓶颈。
- 工具组合使用:不同监控工具各有侧重,实际工作中应根据需求灵活组合使用。例如:uptime看负载趋势,top看实时进程,sar看历史数据。
- 调优谨慎原则:系统调优前务必做好备份和测试,避免因不当优化导致系统不稳定。优先考虑应用层优化,其次才是系统层调优。
- 持续学习更新:Linux性能工具和内核特性在不断演进,建议关注社区动态,学习新的监控工具和优化技术。
常见问题解决思路
针对实际工作中常见的性能问题,提供以下解决思路:
| 问题现象 | 可能原因 | 排查工具 | 解决方案 |
|---|---|---|---|
| 系统响应缓慢 | CPU负载过高、内存不足、磁盘IO瓶颈 | uptime、top、free、iostat | 按优先级依次排查:CPU→内存→磁盘→网络 |
| 内存使用率持续高位 | 内存泄漏、缓存未释放、应用配置不当 | free、top、ps、/proc/meminfo | 分析进程内存使用,调整应用配置,清理缓存 |
| 磁盘IO延迟高 | 磁盘性能瓶颈、大量小文件读写、RAID配置不当 | iostat、iotop、sar -d | 优化读写策略,考虑使用SSD,调整RAID级别 |
| 网络流量异常 | DDoS攻击、异常进程、配置错误 | nethogs、sar -n DEV、netstat | 定位异常进程,配置防火墙规则,优化网络配置 |
| 进程频繁被杀死 | 内存不足触发OOM、ulimit限制过严 | dmesg、/var/log/messages、ulimit -a | 调整内存分配策略,修改ulimit限制 |
通过系统学习本文内容,读者应能够建立起完整的Linux系统性能监控与调优知识体系,具备独立分析和解决常见性能问题的能力。性能优化是一个持续的过程,需要结合具体业务场景不断实践和总结,才能真正掌握这门技术。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


































































所有评论(0)