一、使用sar命令来监控CPU的使用情况
1.1 sar -u (检查cpu的繁忙程度)
sar -u [interval] [count]
如下:
实时监控:每秒采样一次,共采样5次。
[root@ora19c-single soft]# sar -u 1 5Linux 3.10.0-1160.el7.x86_64 (ora19c-single) 2026年04月03日 _x86_64_ (2 CPU)01时19分24秒 CPU %user %nice %system %iowait %steal %idle01时19分25秒 all 0.00 0.00 0.00 0.00 0.00 100.0001时19分26秒 all 0.00 0.00 0.00 0.00 0.00 100.0001时19分27秒 all 0.00 0.00 0.00 0.00 0.00 100.0001时19分28秒 all 0.00 0.00 0.00 0.00 0.00 100.0001时19分29秒 all 0.50 0.00 0.50 0.00 0.00 98.99平均时间: all 0.10 0.00 0.10 0.00 0.00 99.80
%user:用户态程序占用CPU的百分比。
%nice:被调整过优先级的用户进程占用百分比(通常很低)。
%system:内核态(系统)占用CPU的百分比。
%iowait:CPU等待磁盘I/O完成所花费的时间百分比。这是判断I/O瓶颈的关键指标,如果持续很高,说明磁盘可能成为瓶颈。
%steal:在虚拟化环境中,被 Hypervisor “偷走” 给其他虚拟机的时间百分比(非虚拟化环境为0)。过高表示物理主机资源过载。
%idle:CPU空闲时间百分比。数值过低(如持续<10%)表明CPU资源紧张。
查看当天历史数据:直接运行 sar -u,它会显示从00:00:00开始到当前时间,每小时的汇总数据。
查看特定日期的历史数据:
sar -u -f /var/log/sa/saXX # XX代表日期,例如 sa01 代表1号的数据
[root@ora19c-single soft]# sar -u -f /var/log/sa/sa03Linux 3.10.0-1160.el7.x86_64 (ora19c-single) 2026年04月03日 _x86_64_ (2 CPU)00时50分01秒 CPU %user %nice %system %iowait %steal %idle01时00分02秒 all 23.01 0.00 12.40 0.81 0.00 63.7801时10分01秒 all 9.23 0.00 7.54 6.31 0.00 76.9201时20分01秒 all 0.05 0.00 0.05 0.04 0.00 99.86平均时间: all 10.34 0.00 6.42 2.32 0.00 80.92
1.2 sar -d (分析系统的磁盘 I/O 状况)
-- 每两秒采集三次[root@ora19c-single soft]# sar -d 2 3Linux 3.10.0-1160.el7.x86_64 (ora19c-single) 2026年04月03日 _x86_64_ (2 CPU)01时32分15秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util01时32分17秒 dev8-0 2.00 0.00 26.00 13.00 0.00 0.75 0.25 0.0501时32分17秒 dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分17秒 dev253-0 2.50 0.00 26.00 10.40 0.00 0.80 0.20 0.0501时32分17秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分17秒 dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分17秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util01时32分19秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分19秒 dev8-16 1.99 0.00 50.75 25.50 0.00 0.00 0.00 0.0001时32分19秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分19秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分19秒 dev253-2 1.99 0.00 50.75 25.50 0.00 0.00 0.00 0.0001时32分19秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util01时32分21秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分21秒 dev8-16 1.00 0.00 32.00 32.00 0.00 0.50 0.50 0.0501时32分21秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分21秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0001时32分21秒 dev253-2 1.00 0.00 32.00 32.00 0.00 0.50 0.50 0.05平均时间: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util平均时间: dev8-0 0.67 0.00 8.65 13.00 0.00 0.75 0.25 0.02平均时间: dev8-16 1.00 0.00 27.62 27.67 0.00 0.17 0.17 0.02平均时间: dev253-0 0.83 0.00 8.65 10.40 0.00 0.80 0.20 0.02平均时间: dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00平均时间: dev253-2 1.00 0.00 27.62 27.67 0.00 0.17 0.17 0.02
性能指标如下
%util(磁盘利用率):最大值 0.05%,平均 0.02%。这是最重要的指标,说明磁盘极其空闲,远未达到性能瓶颈。
await(平均 I/O 响应时间):0.00-0.80 毫秒,响应速度极快,表明 I/O 请求几乎无需等待。
avgqu-sz(平均队列长度):全部为 0,说明没有 I/O 请求在排队。
svctm(平均服务时间):0.00-0.50 毫秒,磁盘处理单个请求的速度很快。
1.3 sar -b(检查缓冲区高速缓存)
[root@ora19c-single soft]# sar -bLinux 3.10.0-1160.el7.x86_64 (ora19c-single) 2026年04月03日 _x86_64_ (2 CPU)00时50分01秒 tps rtps wtps bread/s bwrtn/s01时00分02秒 706.05 366.65 339.41 62208.51 75864.6901时10分01秒 502.58 277.44 225.14 33499.45 61826.4101时20分01秒 3.83 2.35 1.48 320.62 34.0401时30分01秒 1.48 0.09 1.39 1.35 35.89平均时间: 303.49 161.63 141.86 24010.36 34439.11
二、使用uptime和mpstat查看CPU负载
[root@ora19c-single soft]# uptime 01:45:28 up 5:07, 2 users, load average: 0.07, 0.09, 0.18
2.1 uptime 性能指标
1. 负载平均值 (Load Average) - 最重要
0.07, 0.09, 0.18 - 系统负载极低
0.07 (1分钟):系统当前非常空闲
0.09 (5分钟):近期保持空闲状态
0.18 (15分钟):略微上升,但仍在极低水平
负载评估标准:
负载值 < CPU核心数:系统空闲
负载值 ≈ CPU核心数:系统合理利用
负载值 > CPU核心数:系统过载
2. 系统运行时间 (Uptime)
up 5:07 - 系统运行 5小时7分钟
启动时间:昨晚 20:38(01:45 - 5:07 = 20:38)
状态:新启动的系统
3. 活跃用户数
2 users - 当前 2 个活跃用户
-- 每秒采集10次[root@ora19c-single soft]# mpstat 1 10Linux 3.10.0-1160.el7.x86_64 (ora19c-single) 2026年04月03日 _x86_64_ (2 CPU)01时52分40秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle01时52分41秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分42秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分43秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分44秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分45秒 all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.5001时52分46秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分47秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分48秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分49秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0001时52分50秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00平均时间: all 0.00 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 99.95
2.2 mpstat 性能指标如图所示
三、结合使用ps命令和选定的v$视图
哪个进程使用最多的CPU资源 ?
下面的命令列出了使用CPU资源最多的3个用户
[root@ora19c-single soft]# ps -e -o pcpu,pid,user,args | sort -k 3 -r | tail 0.0 27378 oracle ora_dbw0_sincdb 0.0 27368 oracle ora_dbrm_sincdb 0.0 27408 oracle ora_d000_sincdb 0.0 27345 oracle ora_clmn_sincdb 0.0 27753 oracle /oracle/app/19.3.0/db_1/bin/tnslsnr LISTENER -inherit 0.0 27384 oracle ora_ckpt_sincdb 0.1 27444 oracle ora_cjq0_sincdb 0.0 27432 oracle ora_aqpc_sincdb 0.0 694 dbus /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 0.0 697 chrony /usr/sbin/chronyd
此命令列出了所消耗的%CPU、进程号PID、用户名以及所执行的命令。
如果消耗最多的CPU资源是Oracle用户,便可使用如下查询得到Oracle中的相关进程信息。
要把ps命令获得的系统PID传给下面的查询:
--sqlcol username format a15col osuser format a10col program format a20set verify offselect a.username,a.osuser,a.program,spid,sid,a.serial#from v$session a,v$process bwhere a.paddr=b.addrand spid='&spid';
--sqlset verify offcolumn username format a15column sql_text format a60underfine sidunderfine serial#accept sid prompt 'sid: 'accept serial prompt 'serial#: 'select 'SQL Currently Executing: 'from dual;select b.username,a.sql_textfrom v$sql a,v$session bwhere b.sql_address = a.addressand b.sql_hash_value = a.hash_valueand b.sid= &sidand b.serial# = '&serial';select 'Open Cursors:'from dual;select b.username,a.sql_textfrom v$open_cursor a,v$session bwhere b.sql_address = a.addressand b.sql_hash_value = a.hash_valueand b.sid = &sidand b.serial# = '&serial';
四、使用iostat命令辨认磁盘I/O瓶颈
4.1 命令示例
查看所有磁盘的实时统计(2秒间隔,5次)
查看扩展统计(每2秒刷新)
查看指定设备
查看TPS和吞吐量
查看CPU和磁盘综合信息
查看历史数据(从启动至今)
4.2 关键指标