目录

课程说明

一.系统调优概述与CPU负载监控

1.系统调优思路

2.查看CPU负载相关工具

3.找出使用CPU最多的进程

4.使用mpstat查看CPU运行情况

二.内存运行状态监控

1.查看内存运行状态

2.找出使用内存最多的进程

三.磁盘IO运行状态监控

1.查看磁盘IO状态

2.使用iotop找出磁盘IO最多的进程

四.网络运行状态监控

1.找出使用网络最多的进程

五.系统整体运行状态监控

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

2.使用sar记录系统运行状态

六.CPU资源调优

1.调整进程优先级

2.设置CPU亲和力

七.磁盘IO调优

1.ulimit资源限制

2.测试硬盘速度


课程说明

本课程为零基础学员设计,通过理论结合实践的方式,系统学习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等综合性监控工具,能够从全局视角分析系统性能状况,并利用历史数据进行问题回溯和分析。

实践建议

基于本文内容,为读者提供以下实践建议:

  1. 建立监控基线:在生产环境正常运行时,记录各项关键指标的正常范围值,建立性能基线,便于后续对比分析。
  2. 定期巡检与预警:设置自动化监控脚本,定期检查系统关键指标,当指标超过阈值时及时告警,做到问题早发现、早处理。
  3. 分层排查策略:遇到性能问题时,按照"整体→局部"的顺序排查:先用vmstat、sar查看全局状态,再用top、iostat等工具定位具体瓶颈。
  4. 工具组合使用:不同监控工具各有侧重,实际工作中应根据需求灵活组合使用。例如:uptime看负载趋势,top看实时进程,sar看历史数据。
  5. 调优谨慎原则:系统调优前务必做好备份和测试,避免因不当优化导致系统不稳定。优先考虑应用层优化,其次才是系统层调优。
  6. 持续学习更新: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系统性能监控与调优知识体系,具备独立分析和解决常见性能问题的能力。性能优化是一个持续的过程,需要结合具体业务场景不断实践和总结,才能真正掌握这门技术。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐