1、查看CPU负载
1.1 uptime
## 查看系统负载 1,5,15(平均负载)
uptime
若1分钟负载值 > CPU核心数,说明系统可能过载
1.2 top
## 实时查询cpu
top
## 按CPU使用率降序排列
P
1.3 ps
## 查看 CPU 使用最多的进程
ps -aux --sort -pcpu | head -10
a:显示所有用户的进程
u:以用户为中心的格式显示(包含 CPU、内存等使用信息)
x:包括没有控制终端的进程
--sort: 表示降序排列
-pcpu:按照 CPU 使用率(pcpu)进行排序
| head -10:通过管道将结果传递给 head 命令,只显示前 10 行
1.4 mpstat
## 查看 CPU 详细状态
mpstat -P ALL 1 5
-P ALL:显示所有 CPU 核心(包括单个核心和整体平均)的统计数据
1:采样间隔时间,单位为秒(这里表示每 1 秒采集一次数据)
5:采样次数(这里表示总共采集 5 次
2、查看内存运行状态
2.1 free
## 查看内存使用情况
free -m
2.2 top
## 实时查看
top
## 按内存使用降序排列
M
2.3 ps
ps -aux --sort -rss | head -10
a:显示所有用户的进程
u:以用户为中心的格式显示(包含 CPU、内存等使用信息)
x:包括没有控制终端的进程
--sort: 表示降序排列
-rss:按照内存使用率排序
2.4 在 /proc/meminfo 文件下查看
3、查看磁盘 I/O 状态
3.1 查看文件系统块大小
xfs_growfs -l /dev/sda1 | grep bsize
用于 XFS 文件系统
xfs_growfs -l 会显示 XFS 文件系统的布局信息
3.2 使用 iostat 查看磁盘 I/O
iostat -d -k -p /dev/sda 1 5
iostat:系统 I/O 统计工具,用于监控磁盘和 CPU 的输入输出性能
-d:只显示磁盘(device)的统计信息,不显示 CPU 信息
-k:以 KB(千字节)为单位显示数据(默认是块)
-p /dev/sda:显示指定磁盘/dev/sda及其所有分区的统计信息
1 5:采样间隔为 1 秒,共采样 5 次
3.3 iotop 查看实时 I/O 进程
iotop -o -d 1
iotop:一个专门监控磁盘 I/O 的工具,可以显示每个进程的 I/O 使用情况
-o:只显示正在产生 I/O 活动的进程(过滤掉没有 I/O 操作的进程,更简洁)
-d 1:设置刷新间隔为 1 秒(每秒更新一次数据)
3.4 使用 dd 测试磁盘写入
dd if=/dev/zero of=testfile bs=1M count=1000; sync
dd if=/dev/zero of=testfile:使用dd命令从/dev/zero(一个源源不断输出 0 字节的特殊设备)读取数据,写入到名为testfile的文件中
bs=1M:设置每次读写的块大小为 1MB
count=1000:设置读写的块数量为 1000,所以总文件大小是 1MB×1000=1000MB(约 1GB)
; sync:分号分隔两个命令,sync用于将内存中的数据强制刷新到磁盘,确保文件真正写入硬盘
4、查看网络状态
4.1 使用 nload 查看实时带宽
nload
实时网络流量状态 (Incoming/Outgoing)
指标 值 说明
当前速率 (Curr) 41.12 kBit/s 瞬时接收速率
平均速率 (Avg) 166.04 kBit/s 本次会话的平均接收速率
最小速率 (Min) 3.49 kBit/s 本次会话的最小接收速率
最大速率 (Max) 1.33 MBit/s 本次会话的最大接收速率 (峰值)
总数据量 (Ttl) 81.77 MByte 本次会话累计接收的总数据量
ab -n 1000 -c 2 http://www.baidu.com/
#安装包 httpd-tools
ab:Apache 自带的 HTTP 压力测试工具,用于模拟多个用户并发访问网站并统计性能数据
-n 1000:指定总请求数为 1000 次(总共向百度首页发送 1000 个请求)
-c 2:指定并发数为 2(每次同时发送 2 个请求,模拟 2 个用户同时访问)
http://www.baidu.com/:目标测试的 URL(这里是百度首页)
Requests per second: 50.00 [#/sec] (mean) # 平均每秒处理请求数(吞吐量)
Time per request: 40.000 [ms] (mean) # 平均每个请求的响应时间
Time per request: 20.000 [ms] (mean, across all concurrent requests) # 并发情况下每个请求的实际等待时间
Percentage of the requests served within a certain time (ms):
50% 30
90% 50
99% 80 # 99%的请求在80ms内完成
4.2 使用 nethogs 查看进程网络使用
nethogs
操作:在另一终端使用 wget 下载大文件,观察 nethogs 输出
5、查看系统整体状态
5.1 使用 vmstat 查看系统整体状态
vmstat 1 5 虚拟内存统计(Virtual Memory Statistics)工具,能全面反映系统运行状态
1:采样间隔时间,单位为秒(每 1 秒刷新一次数据)
5:采样次数(总共输出 5 组数据)
r:等待运行的进程数(如果长期大于 CPU 核心数,说明 CPU 不够用)
b:处于不可中断睡眠的进程数(通常是等待 I/O,数值高说明 I/O 繁忙)
si/so:每秒从 swap 分区读入 / 写入内存的数据量(非 0 说明内存不足,开始用交换分区)
bi/bo:每秒从块设备读入 / 写入的数据量(反映磁盘 I/O 活动)
wa:CPU 等待 I/O 的时间百分比(超过 20% 说明 I/O 成为瓶颈)
us/sy:用户态 / 内核态占用 CPU 的百分比(us 高说明应用消耗 CPU 多,sy 高可能是系统调用频繁)
id:CPU 空闲百分比(过低说明 CPU 负载高)
r
:运行队列长度b
:阻塞进程数si/so
:换入/换出内存bi/bo
:块读/写
5.2 使用 sar 记录系统状态
sar -u 2 5 -o cpu.sar # 记录CPU
-u:查看 CPU 使用率统计
2 5:每 2 秒采样一次,共采样 5 次
-o cpu.sar:将结果保存到文件cpu.sar(方便后续用sar -f cpu.sar查看)
输出中重点关注:
%user:用户程序占用 CPU 的比例
%sys:系统内核占用 CPU 的比例
%idle:CPU 空闲比例(过低说明 CPU 负载高)
sar -r 1 5 # 记录内存
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
sar -n DEV 1 5 # 记录网络
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
3. sar -n DEV 1 5(监控网络)
-n DEV:查看网络接口(如 eth0、ens33)的流量统计
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
rxpck/s:每秒接收的数据包数
txpck/s:每秒发送的数据包数
rxkB/s:每秒接收的千字节数
txkB/s:每秒发送的千字节数(数值过高可能表示网络带宽饱和)
查看记录
sar -u -f cpu.sar
5.3 查看 sar 历史日志
ls /var/log/sa
sar -n DEV -f /var/log/sa/sa15
6、CPU 资源调优
6.1 调整进程优先级-nice
- 作用:通过调整进程的 nice 值,改变其 CPU 调度优先级
- 范围:-20(最高)到 19(最低),默认是 0
- 使用场景: 让重要程序(如服务器进程)优先级更高,让耗资源但不紧急的程序(如后台备份)优先级更低,合理分配 CPU 资源
nice -n -5 vim a.txt # 启动时设置优先级
nice:用于给新进程设置 “nice 值”(优先级的数值表示,范围是 -20 到 19)
-n -5:指定 nice 值为 -5(数值越小,优先级越高,系统会优先分配 CPU 资源)
vim a.txt:要启动的进程(这里是用 vim 打开 a.txt)
效果:启动的 vim 进程会获得较高的 CPU 优先级,在系统繁忙时,它能抢到更多 CPU 时间,操作更流畅
renice -n 6 24318 # 修改运行中进程的优先级
调整已运行的进程的优先级。
renice:用于修改已有进程的 nice 值
-n 6:将 nice 值设为 6(数值较大,优先级较低,系统会减少对它的 CPU 分配)
24318:目标进程的 PID(进程 ID,可通过ps或top命令查看)
效果:PID 为 24318 的运行中进程,优先级会降低,在系统繁忙时,它会 “谦让” CPU 资源给其他优先级更高的进
6.2 设置 CPU 亲和力-taskset
- 作用:将进程绑定到指定 CPU 核心,减少上下文切换开销
- 安装:yum install util-linux
1)taskset -c 0 vim a.txt # 绑定到 CPU0
taskset:Linux 中用于设置进程 CPU 亲和力(绑定 CPU 核心)的工具
-c 0:-c 表示指定 CPU 核心编号(从 0 开始),这里绑定到第 0 号 CPU 核心
vim a.txt:要启动的进程(用 vim 打开 a.txt)
效果:这个 vim 进程只会在 CPU0 上运行,不会被调度到其他核心,适合需要稳定占用单一核心的场景。
2)taskset -cp 20146 # 查看进程 1087 的 CPU 绑定情况
查看已运行进程的 CPU 绑定情况。
-c:显示 CPU 核心编号(更易读)
-p:表示操作对象是已存在的进程(通过 PID 指定)
20146:目标进程的 PID(进程 ID,可通过 ps 或 top 查看)
[root@benet21 ~]# taskset -cp 20146
pid 20146's current affinity list: 0
3)taskset -c 1,3 vim b.txt # 绑定到 CPU1 和 CPU3
启动进程时,绑定到多个 CPU 核心(核心列表)。
-c 1,3:指定进程只能在 CPU1 和 CPU3 上运行(核心编号用逗号分隔)
效果:这个 vim 进程会在 CPU1 和 CPU3 之间被调度,但不会跑到其他核心(如 CPU0、CPU2),适合需要限制进程使用特定核心组的场景。
测试 :ps -o psr -p 98822
top 按F P(空格选) 按q退出 再输入 top
生产环境场景:一般用在 你的业务(进程)非常重要 你需要绑定好的业务并且给他设置两个
6.3 cpu命令描述
cat /proc/cpuinfo
是 Linux 系统中用于查看 CPU 硬件信息 的命令,通过读取 /proc
虚拟文件系统中的 cpuinfo
文件,展示当前系统中 CPU 的详细参数
processor : 0 # CPU 核心编号(从 0 开始,多核会依次显示 0、1、2...)
vendor_id : GenuineIntel # CPU 厂商(如 Intel、AMD)
cpu family : 6 # CPU 系列(厂商内部的产品系列编号)
model : 158 # 型号(同系列中的具体型号)
model name : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz # 具体型号名称和主频
stepping : 9 # 步进(硬件版本号,影响稳定性和兼容性)
microcode : 0x84 # 微代码版本(CPU 内置的底层程序版本)
cpu MHz : 2808.000 # 当前运行频率(动态调频时会变化)
cache size : 6144 KB # 缓存大小(L3 缓存,影响数据访问速度)
physical id : 0 # 物理 CPU 编号(多物理 CPU 时区分,单 CPU 通常为 0)
siblings : 8 # 单个物理 CPU 的逻辑核心数(包含超线程)
core id : 0 # 物理核心编号(同一物理 CPU 内的核心编号)
cpu cores : 4 # 单个物理 CPU 的物理核心数(此处为 4 核)
apicid : 0 # 用于多核通信的 APIC 编号
initial apicid : 0
fpu : yes # 是否支持浮点运算单元(FPU)
fpu_exception : yes # 是否支持 FPU 异常处理
cpuid level : 22 # CPUID 指令支持的级别(用于查询 CPU 功能)
wp : yes # 是否支持写保护(内存安全特性)
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d # CPU 支持的功能指令集(如 SSE、AVX 等加速指令)
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit # 已知的硬件漏洞(如熔断、幽灵等)
bogomips : 5616.00 # 伪性能指标(早期用于粗略衡量 CPU 速度,参考意义不大)
clflush size : 64 # CLFLUSH 指令一次能刷新的缓存大小(字节)
cache_alignment : 64 # 缓存对齐粒度(字节,影响内存访问效率)
address sizes : 39 bits physical, 48 bits virtual # 支持的物理/虚拟地址位数(决定最大内存支持)
power management: # 电源管理相关特性(如节能、调频技术)
详细详解
核心数量
- 看
processor
条目数量 → 总逻辑核心数(包含超线程) - 看
cpu cores
→ 单个物理 CPU 的物理核心数(如cpu cores : 4
表示 4 核) - 例:4 物理核 + 超线程 = 8 逻辑核 → 会显示 8 个
processor
条目(0~7)
型号和主频:
model name
直接显示 CPU 型号(如i7-7700HQ
)和基础主频(如2.80GHz
)cpu MHz
显示当前实时频率(支持睿频的 CPU 会动态变化)
厂商和功能:
vendor_id
区分 Intel/AMD 等厂商flags
列出支持的指令集(如avx2
加速多媒体处理,vmx
支持虚拟化)
常用场景
- 快速确认服务器的 CPU 核心数(判断并行处理能力)
- 检查 CPU 是否支持特定功能(如虚拟化、硬件加速指令)
- 排查硬件相关问题(如型号是否与预期一致,是否存在已知漏洞)
简单说,这条命令是“查看 CPU 身份证”的工具,能让你快速了解系统的 CPU 配置
6.4 使用 vmstat 分析系统瓶颈
- 关键指标:
r
:等待运行的进程数,若持续 > CPU核心数×3,说明 CPU 繁忙us
:用户态 CPU 时间,高表示应用程序消耗多sy
:系统态 CPU 时间,高表示内核消耗多wa
:等待 I/O 的 CPU 时间,高表示磁盘 I/O 瓶颈id
:空闲 CPU 时间
- 实战场景:
- 上传大文件:
wa
高,bo
大,说明写磁盘繁忙 - 复制文件:
bi
和bo
都高,wa
高,说明读写磁盘都繁忙 - 高并发 HTTP 请求:
r
高,us
高,说明 CPU 处理不过来
- 上传大文件:
7、磁盘 I/O 调优
7.1 ulimit 资源限制
配置文件:/etc/security/limits.conf
资源限制配置文件(通常是 /etc/security/limits.conf
或 /etc/security/limits.d/
目录下的配置文件)中的设置,用于限制系统用户的进程资源使用上限
* soft nofile 1024000
* hard nofile 1024000
* soft nproc 65535
* hard nproc 65535
*:表示对 所有用户 生效(也可以指定具体用户名,如 root 或 www)
soft:软限制(警告线),超过时系统会警告,但允许临时超过(直到进程结束)
hard:硬限制(强制线),由内核强制执行,绝对不能超过(软限制不能高于硬限制)
nofile:限制 打开文件描述符的数量(包括文件、网络连接、管道等,Linux 中 “一切皆文件”)
nproc:限制 用户能创建的进程 / 线程数量
具体配置的含义:
* soft nofile 1024000
所有用户的 软限制:最多可打开 1024000 个文件描述符(超过会警告)
* hard nofile 1024000
所有用户的 硬限制:绝对不能打开超过 1024000 个文件描述符
* soft nproc 65535
所有用户的 软限制:最多可创建 65535 个进程 / 线程(超过会警告)
* hard nproc 65535
所有用户的 硬限制:绝对不能创建超过 65535 个进程 / 线程
ulimit -n # 查看 nofile 软限制
ulimit -Hn # 查看 nofile 硬限制
ulimit -u # 查看 nproc 软限制
临时修改:ulimit -n 10000
7.2 测试磁盘速度
读速度测试:是一个用于测试硬盘读取速度的命令,主要用于评估磁盘的顺序读取性能
hdparm -t --direct /dev/sda
hdparm:Linux 下用于查看和调整硬盘参数的工具
-t:测试硬盘的缓存读取速度(读取数据时会利用硬盘缓存和系统缓存)
--direct:启用 “直接 IO” 模式(跳过系统缓存,直接从硬盘读取原始数据,更接近真实的物理读取速度)
/dev/sda:指定要测试的硬盘设备(sda 通常是系统的第一个硬盘)
写速度测试
dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct
dd:Linux 下用于复制和转换文件的工具,常被用来测试磁盘性能
if=/dev/zero:if 表示 “输入文件”,/dev/zero 是一个特殊设备文件,会不断生成二进制的 0 数据(可理解为 “无限的空数据来源”)
of=/test.dbf:of 表示 “输出文件”,即把数据写入到 /test.dbf 这个文件中
bs=1M:bs 表示 “块大小”,这里设置为 1MB(每次读写的数据块大小)
count=2000:count 表示 “块数量”,这里生成 2000 个 1MB 的块,总文件大小为 2000MB(约 2GB)
oflag=direct:oflag 表示 “输出标志”,direct 启用直接 IO 模式(跳过系统缓存,直接写入物理硬盘,更真实反映硬盘写入速度)
时间测试
time dd if=/dev/zero of=/test.dbf bs=1M count=200
time:用于统计后续命令的执行时间(包括实际耗时、用户态耗时、内核态耗时)
dd:文件复制工具,这里用于生成测试文件
if=/dev/zero:输入源为 /dev/zero(不断生成空数据,作为写入的数据源)
of=/test.dbf:输出文件为 /test.dbf(要创建的测试文件)
bs=1M:每次读写的数据块大小为 1MB
count=200:共写入 200 个块,总文件大小为 200MB(1M × 200)
信息详解:
dd 部分的输出:
确认写入了 200MB 数据
652 MB/s 是计算出的写入速度(总数据量 ÷ 实际耗时)
注意:这里没有 oflag=direct,写入速度会包含系统缓存的加速效果,可能比硬盘真实物理速度快(尤其是写入小文件时)。
time 部分的输出:
real:实际总耗时(从命令开始到结束的墙钟时间,0.322 秒)
user:命令在用户态运行的时间(几乎为 0,因为主要是 IO 操作)
sys:命令在内核态运行的时间(0.320 秒,主要是磁盘 IO 的内核处理时间)
8、内核参数调优
8.1 防御 SYN 洪水攻击
修改 /etc/sysctl.conf
net.ipv4.tcp_synack_retries = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
fs.file-max = 819200
net.core.somaxconn = 65535
net.core.rmem_max = 1024123000
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 165536
net.ipv4.ip_local_port_range = 10000 65535
## 生效
sysctl -p
8.2 关键参数说明
tcp_synack_retries=0
:不重发 SYN+ACK,快速释放半连接tcp_syncookies=1
:启用 SYN Cookie 防御少量攻击file-max
:系统最大文件句柄数somaxconn
:最大连接队列长度
总结
模块 | 调优手段 | 适用场景 |
---|---|---|
CPU | nice、taskset、vmstat | 高 CPU 负载、多进程调度 |
磁盘 I/O | ulimit、hdparm、dd | 高并发读写、备份任务 |
网络 | Bonding、内核参数 | 高可用、负载均衡、防攻击 |
内核 | sysctl 参数优化 | 高并发连接、安全防护 |