Linux系统性能调优与监控
·
目录
1.系统调优思路
什么是系统性能调优
性能优化就是找到系统处理中的瓶颈以及去除这些瓶颈的过程,性能优化其实是对操作系统
各子系统达到一种平衡状态的定义。一个高效的系统需要在
CPU
、内存、磁盘
IO
、网络等
各个方面达到良好的平衡状态,任何一个子系统成为瓶颈都会影响整体性能。
系统调优通常遵循以下三个步骤:
第一步:观察系统运行状况
按照优先级依次检查:
CPU
状态
→
内存使用
→
磁盘
IO
→
网络流量
→
应用程序性能。这是
因为
CPU
是最核心的处理单元,任何操作都需要
CPU
参与;内存不足会导致系统频繁使用
swap
,影响所有性能;磁盘
IO
是最慢的操作;网络则是与外部通信的通道。
第二步:分析是否存在瓶颈
根据当前应用的实际需求,判断各个子系统是否存在性能问题。例如,一个文件服务器主要
关注磁盘
IO
性能,一个
Web
服务器主要关注
CPU
和网络性能,一个数据库服务器则需要同时
关注内存、
CPU
和磁盘
IO
。
第三步:采取调优措施
针对发现的瓶颈采取相应措施,使其变得优异。这可能包括调整内核参数、优化应用程序配
置、升级硬件等方式。
各子系统之间的依赖关系
Linux
系统的各个子系统之间是相互依赖、相互影响的,理解这种关系对于准确定位问题至
关重要:
CPU
与内存的关系
:大量的网页调入请求会导致内存队列的拥塞,当内存不足时,系统会
花费大量
CPU
时间在内存管理上,反而降低了处理业务的能力。
CPU
与网络的关系
:网卡的大吞吐量可能导致更多的
CPU
开销,因为每个网络包都需要
CPU
处理。如果网络中断处理占用过多
CPU
,会严重影响其他业务的执行。
内存与磁盘的关系
:大量来自内存的磁盘写请求可能导致更多的
CPU
以及
IO
问题。内存中
的数据最终需要写入磁盘,如果磁盘
IO
缓慢,会导致内存中待写入的数据堆积。
内存与
CPU
的关系
:当内存不足时,内核需要频繁进行内存页的换入换出操作
(
swapping
),这会消耗大量
CPU
资源,同时产生大量磁盘
IO
,形成恶性循环。
2.查看cpu负载的相关工具
uotime命令详解
uptime命令是最简单也是最常用的系统负载查看工具它能够告诉我们系统运行了多久、
有多少用户登录、以及系统负载情况。
输出内容解析
:
第一项
是当前时间;
第二项
表示系统连续运行了时间
第三项
3users
表示当前有几
个用户登录
第四项
load average: 0.00, 0.02, 0.05
是系统负载平均值,三个数值分别表示
1
分钟、
5
分钟、
15
分钟前到现在的平均值。
判断
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
)
查看CPU详细信息
# 查看 CPU 详细信息cat /proc/cpuinfo
# 查看 CPU 型号cat /proc/cpuinfo | grep "model name”

# 查看 CPU 核心数cat /proc/cpuinfo | grep "processor" | wc -l
3.找出使用cpu最多的进程
3.1top
方法一:使用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
:进程命令
3.2ps
方法二:使用ps命令
ps
命令可以显示进程的静态快照,配合排序选项可以找出
CPU
使用最多的进程:
# 按 CPU 使用率降序排列所有进程ps -aux --sort -pcpu | more# 只显示前 10 个使用 CPU 最多的进程ps -aux --sort -pcpu | head -n 11


4.使用mpstat查看cpu运行情况
#mpstat是sysstat软件包的一部分
yum install -y sysstat

mpstat
基本用法
# 查看所有 CPU 的统计信息mpstat# 查看每个 CPU 核心的详细状态mpstat -P ALL# 每秒刷新一次,连续显示 100 次mpstat -P ALL 1 100




CPU
使用率参考值
一个健康的
CPU
使用率分布应该是这样的:
65%-70%
:用户态时间(运行应用程序)
30%-35%
:系统态时间(运行内核)
0%-5%
:空闲时间
如果
%iowait
很高,说明系统在等待磁盘
IO
,这时候需要检查磁盘性能。如果
%idle
很低
但
%usr
也不高,可能是内存不足导致频繁
swap
,或者有其他系统资源瓶颈。
5.查看内存运行状态
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
:非活跃内存(最近未被访问,可以被回收)
6.找出使用内存最多的进程
方法一:使用top命令
# 运行 top 命令top# 在 top 界面中按大写 M 键,可以按内存使用率排序

方法二:使用ps命令
# 按内存使用量降序排列ps -aux --sort -rss | more# 只显示前 10 个使用内存最多的进程ps -aux --sort -rss | head -n 11
7.查看磁盘IO状态
IOstat,也是 sysstat软件包的一部分
基本用法
#只显示磁盘统计信息
iostat -d -k# 显示指定磁盘的统计信息iostat -d -k -p /dev/sda# 每秒刷新一次iostat -d -k 1
各项含义
iotop的基本用法
# 显示正在使用磁盘的进程iotop -o# 每 2 秒刷新一次iotop -d 2# 只显示有 IO 输出的进程iotop -o -d 1

iotop的交互操作
左右箭头:改变排序方式(默认按
IO
排序)
r
:改变排序顺序
p
:切换进程
/
线程显示
a
:显示累积使用量
q: 退出
8.网络运行状态监控
8.1使用nload监控总体带宽

nload会显示两个方向的流量:Incoming(入站)和Outgoing(出站)。按左右箭头可以切 换查看不同网卡。
8.2使用nethogs查看进程带宽

nethogs
可以显示每个进程的网络带宽使用情况,非常适合找出
"
谁在偷跑流量
"
。9.
9.使用vmstat查看系统整体状态
9.1vmstat命令
查看系统整体状态 vmstat
动态显示
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
,说明物理内存不够用。
9.2sar命令
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

cpu资源调优
nice
值原理
在
Linux
系统中,
nice
值的范围从
-20
到
+19
(不同系统可能略有差异)。正值表示低优先
级,负值表示高优先级,值为零则表示不会调整该进程的优先级。
重要规则
:
nice
值越低,优先级越高。
-20
是最高优先级,
+19
是最低优先级。
生活化类比
:
nice
就像银行的
VIP
等级
-20
级
=
至尊
VIP
会员,优先办理业务
0
级
=
普通客户,正常排队
+19
级
=
等待客户,让所有人先办
默认情况下,所有进程的
nice
值都是
0
。
nice命令
# 在命令运行前调整 nice 值nice -n -5 vim a.txt # 将 vim 的优先级提高到 -5# nice 值范围是 -20 到 +19nice -n -10 command # 高优先级nice -n 10 command # 低优先级
renice命令
# 查看进程的 PID 和当前 nice 值ps -axu | grep vim# 修改运行中进程的优先级renice -n 6 24318 # 将 PID 为 24318 的进程 nice 值改为 6# 限制:普通用户只能降低自己的进程优先级# root 用户可以调整任何进程的优先级
cpu亲和力
CPU
亲和力(
CPU Affinity
)是指将某个进程强制绑定到特定的
CPU
核心上运行。在多核
CPU
系统中,这个功能非常有用:
减少进程在不同
CPU
之间切换的开销
提高
CPU
缓存命中率
绑定的
CPU
核心发生故障时,可以及时发现
满足特定应用的需求
taskset命令
# 安装 tasksetyum 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 上运行
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)