目录

1.系统调优思路

2.查看cpu负载的相关工具

​编辑

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

3.1top

3.2ps

方法二:使用ps命令

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

5.查看内存运行状态

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

7.查看磁盘IO状态

8.网络运行状态监控

8.1使用nload监控总体带宽

8.2使用nethogs查看进程带宽

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

9.1vmstat命令

9.2sar命令

cpu资源调优


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 +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 用户可以调整任何进程的优先级

cpu亲和力

CPU 亲和力( CPU Affinity )是指将某个进程强制绑定到特定的 CPU 核心上运行。在多核
CPU 系统中,这个功能非常有用:
减少进程在不同 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 上运行

Logo

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

更多推荐