CPU
一、cpu的检查
sar命令的使用:
ossdb2: sar
sar: 0551-201 Cannot open /var/adm/sa/sa11.
sar: 0551-213 Try running /usr/lib/sa/sa1 <increment> <number>
出现如上所述错误信息说明系统没有建立收集sar报告数据的数据收集程序,按照如下所述的步骤
建立sar数据文件:
1.以root用户登陆后输入命令: su - adm ;
2.输入命令: crontab -e
3.移掉下面这些行前面的#(注释符)然后退出保存 :
#0 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &
#0 * * * 0,6 /usr/lib/sa/sa1 &
#0 18-7 * * 1-5 /usr/lib/sa/sa1 &
#5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm &
4.编辑/etc/rc文件,移掉下面一行前面的#(注释符):
#/bin/su - adm -c /usr/lib/sa/sadc /usr/adm/sa/sa `date +%id`
5.重新启动系统,这将打开sar命令显示数据需要的数据收集程序。
重启系统后:
ossdb2:/#sar -u 10 5 --表示每隔10秒出一条记录,共5次
AIX ossdb2 3 5 0001F101D600 08/11/11
System configuration: lcpu=4 mode=Capped
16:06:09 %usr %sys %wio %idle physc
16:06:19 0 0 0 100 2.00
16:06:29 0 0 0 100 2.00
16:06:39 0 0 0 100 2.00
16:06:49 0 0 0 100 2.00
16:06:59 0 0 0 100 2.00
Average 0 0 0 100 2.00
%usr:cpu用于用户进程的百分比
%sys:cpu用于系统进程的百分比
%wio:cpu用于等待输入输出的百分比
%idle:cpu空闲的百分比
physc:表示该分区分配了2g内存,一个cpu为2g内存(lparstat -i命令可查看当前这个分区实际和所配置的情况(Entitled Capacity))
Average:是前面几次的平均值
二、影响CPU性能的原因
1、执行队列的长度
查看执行队列长度
ossdb2:/#uptime
04:27PM up 32 mins, 1 user, load average: 0.00, 0.00, 0.00
“load”用来表示运行队列
ossdb2:/#vmstat
System configuration: lcpu=4 mem=7936MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 213520 1709438 0 0 0 0 0 0 7 783 68 0 0 99 0
r表示运行队列大小;对于每一个CPU来说运行队列不要超过3。
2、进程使用的cpu
可使用ps命令
ossdb2:ps -ef | grep f60
uid pid ppid c stime tty time cmd
c:CPU利用率,以整数表示
查看进程占用cpu情况
ossdb2:/#ps aux
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
root 8196 12.9 0.0 384 384 - A 15:54:54 666:29 wait
root 57372 12.8 0.0 384 384 - A 15:54:54 662:00 wait
root 61470 12.1 0.0 384 384 - A 15:54:54 626:21 wait
root 53274 12.1 0.0 384 384 - A 15:54:54 622:27 wait
3、发现高CPU用户
语句1:
SELECT n.username, n.sid, s.value,t.name
FROM v$sesstat s, v$statname t, v$session n
WHERE s.statistic# = t.statistic#
AND s.sid = n.sid
AND t.name = 'CPU used by this session'
ORDER BY s.value DESC
USERNAME SID VALUE NAME
------------------------------ ---------- ---------- ----------------------------------------------------------------
GWM 148 193233 CPU used by this session
GWM 127 159061 CPU used by this session
SYSMAN 137 36663 CPU used by this session
DBSNMP 142 6068 CPU used by this session
SYSMAN 138 3589 CPU used by this session
LTWEBGIS 110 1559 CPU used by this session
164 1354 CPU used by this session
161 809 CPU used by this session
GWM 125 296 CPU used by this session
LTWEBGIS 94 237 CPU used by this session
162 184 CPU used by this session
SYSMAN 136 164 CPU used by this session
DBSNMP 144 79 CPU used by this session
147 50 CPU used by this session
LTWEBGIS 107 23 CPU used by this session
LTWEBGIS 93 19 CPU used by this session
LTWEBGIS 109 18 CPU used by this session
LTWEBGIS 120 17 CPU used by this session
LTWEBGIS 133 17 CPU used by this session
LTWEBGIS 146 15 CPU used by this session
--查找用户进程已经为INACTIVE的进程占用的cpu情况
SELECT n.username, n.sid, s.value,t.name,n.status,n.server
FROM v$sesstat s, v$statname t, v$session n
WHERE s.statistic# = t.statistic#
AND s.sid = n.sid
AND t.name = 'CPU used by this session'
AND n.status='INACTIVE'
ORDER BY s.value DESC;
USERNAME SID VALUE NAME STATUS SERVER
------------------------------ ---------- ---------- ---------------------------------------------------------------- -------- ---------
GWM 148 193233 CPU used by this session INACTIVE DEDICATED
GWM 127 159061 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 96 6814 CPU used by this session INACTIVE DEDICATED
DBSNMP 142 5948 CPU used by this session INACTIVE DEDICATED
SYSMAN 138 3541 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 110 1559 CPU used by this session INACTIVE DEDICATED
GWM 125 296 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 94 227 CPU used by this session INACTIVE DEDICATED
SYSMAN 136 164 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 156 64 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 107 23 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 93 19 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 133 17 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 120 17 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 146 15 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 118 14 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 109 14 CPU used by this session INACTIVE DEDICATED
SYSMAN 129 13 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 100 9 CPU used by this session INACTIVE DEDICATED
LTWEBGIS 111 6 CPU used by this session INACTIVE DEDICATED
用户进程为INACTIVE,仍然保持连结,只不过当前没有活动而已,仍会占用资源。释放该用户进程的资源,用如下语句杀掉该进程:
alter system kill session '148,984';
进行杀掉后,其还是占用cpu。
select * from v$session where sid=148
执行:alter system kill session '148,984' immediate;
会话级的CPU使用:
v$sesstat视图上的statistic#字段值不是固定不变的,v$sesstat视图上的statistic#字段值代表的含义可以查询v$statname视图的name字段。
语句2:
SELECT *
FROM v$sesstat s
WHERE s.statistic# = (SELECT statistic# FROM v$statname
WHERE name = 'CPU used by this session')
ORDER BY s.value DESC;
其实语句1和语句2表达意思是一样的。
4、CPU的作用
总的CPU=分析使用的CPU+递归使用的CPU+其他使用的CPU
SELECT * FROM v$sysstat WHERE name IN ('CPU used by this session','recursive cpu usage','parse time cpu')
STATISTIC# NAME CLASS VALUE STAT_ID
---------- ---------------------------------------------------------------- ---------- ---------- ----------
8 recursive cpu usage 1 266738 4009879262
12 CPU used by this session 1 449129 24469293
328 parse time cpu 64 40512 206905303
v$sysstat视图中的CPU used by this session是指所有会话使用的CPU之和。
分析的CPU使用:
SELECT name,value/100 "cpu时间(秒)" FROM v$sysstat WHERE name LIKE '%CPU%';--总CPU
NAME VALUE
---------------------------------------------------------------- ----------
CPU used when call started 4634.95
CPU used by this session 4899.11 --总CPU
SELECT name,value FROM v$sysstat WHERE name LIKE '%parse%';
NAME VALUE
---------------------------------------------------------------- ----------
parse time cpu 44902 --分析用的CPU
parse time elapsed 56269
parse count (total) 30106348
parse count (hard) 162503
确定分析时的CPU使用:
SELECT a.value 总CPU, b.value 总分析次数, c.value 硬分析次数, d.value 分析时间
FROM v$sysstat a, v$sysstat b, v$sysstat c, v$sysstat d
WHERE a.name = 'CPU used by this session'
AND b.name = 'parse count (total)'
AND c.name = 'parse count (hard)'
AND d.name = 'parse time cpu';
一般情况下,分析占用的cpu很少,若是占用的比较多,
1)查看是否有大量硬分析,修改为绑定变量,减少硬分析;
2)共享池内存是否过大,如果内存过大会导致库高速缓存中存在大量无用的sql,加长了分析时间
3)库高速缓存的闩争用情况
4)表长时间未统计,在分析是直接进行统计导致分析时间变长
递归的CPU使用:
主要用于数据字典查找及PL/SQL程序。
SELECT * FROM v$sysstat WHERE name IN ('CPU used by this session','recursive cpu usage');
STATISTIC# NAME CLASS VALUE STAT_ID
---------- ---------------------------------------------------------------- ---------- ---------- ----------
8 recursive cpu usage 1 295028 4009879262
12 CPU used by this session 1 490050 24469293
递归CPU占用的CPU比例若很大,要确保分配的共享池内存足够。
内存
用vmstat监控内存使用。vmstat所带参数用man vmstat查看
ossdb2:/#vmstat
System configuration: lcpu=4 mem=7936MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 213520 1709438 0 0 0 0 0 0 7 783 68 0 0 99 0
Procs
r: 运行队列中的进程数,在一个稳定的工作量下,应该少于5
b: 等待队列中的进程数(等待I/O),,通常情况下是接近0的.
memory
avm:活动虚拟页面,在进程运行中分配到工作段的页面空间数
fre:空闲列表的数量.一般不少于120,当fre少于120时,系统开始自动的kill进程去释放
page
re:回收的页面
pi:进入页面数(k表示)(一般不大于5)
po:出页面数(k表示)
fr:空余的页面数(k表示)
sr:通过页面置换算法搜索到的页面数
cy: 页面置换算法的时钟频率
faults
in:设备中断
sy:系统中断
cs 内核进程前后交换中断
CPU
cs:用户进程使用的时间
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
wa: 等待i/o的时间
一般us+sy 在单用户系统中不大于90,在多用户系统中不大于80.wa时间一般不大于40.
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
I/O
度量磁盘输入输出性能
sar -d 5 5 可用于查看磁盘情况
ossdb2:/#sar -d 5 1 --每隔5秒 输出一次
AIX ossdb2 3 5 0001F101D600 08/12/11
System configuration: lcpu=4 drives=13 mode=Capped
15:19:06 device %busy avque r+w/s Kbs/s avwait avserv
15:19:11 hdisk0 0 0.0 0 0 0.0 0.0
hdisk1 0 0.0 0 0 0.0 0.0
dac0 0 0.0 0 0 0.0 0.0
dac0utm 0 0.0 0 0 0.0 0.0
dac2 0 0.0 0 0 0.0 0.0
dac2utm 0 0.0 0 0 0.0 0.0
hdisk2 0 0.0 0 0 0.0 0.0
hdisk3 0 0.0 0 0 0.0 0.0
hdisk4 0 0.0 0 0 0.0 0.0
hdisk5 0 0.0 0 0 0.0 0.0
hdisk6 0 0.0 0 0 0.0 0.0
hdisk7 0 0.0 0 0 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
%busy:设备忙于传输请求百分比;
avque:队列值,一般在峰值情况下也不超过2;
r+w/s:每秒磁盘读写次数;
Kbs/s:每秒传输的量,kb单位;
avwait:每个请求平均等待时间(毫秒单位);
avserv:每个请求服务时间(毫秒单位)。
sql查看I/O分布:
SELECT d.name,
f.phyrds,--记录从盘上读每个数据库文件的次数
f.phywrts,--记录往盘上写数据库文件的次数
f.readtim / decode(f.phyrds, 0, 1, f.phyrds) readtime,
f.writetim / decode(f.phywrts, 0, 1, f.phywrts) wrtime
FROM v$datafile d, v$filestat f
WHERE d.file# = f.file#
ORDER BY d.name;
临时表空间:V$TEMPFILE和V$TEMPSTATS
iostat查看I/O统计数据
ossdb2:/#iostat
System configuration: lcpu=4 drives=13 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait --tty and CPU Utilization Report
0.0 2.9 0.1 0.1 99.8 0.0
Disks: % tm_act Kbps tps Kb_read Kb_wrtn --Disk Utilization Report
hdisk0 0.3 7.0 0.6 400611 197307
hdisk1 0.3 4.7 0.6 204871 197307
dac0 0.0 0.0 0.0 0 0
dac0utm 0.0 0.0 0.0 0 0
dac2 0.0 0.0 0.0 0 0
dac2utm 0.0 0.0 0.0 0 0
hdisk2 0.0 0.0 0.0 0 0
hdisk3 0.0 0.0 0.0 0 0
hdisk4 0.0 0.0 0.0 0 0
hdisk5 0.0 0.0 0.0 0 0
hdisk6 0.0 0.0 0.0 0 0
hdisk7 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
tin:从tty设备读取的总字节数。
tout:写到tty设备的总字节数。
% user:用户使用的cpu; % sys:系统使用的cpu; % idle:系统请求完成后空闲的cpu; % iowait:系统存在请求时空闲的cpu。
% tm_act:磁盘处于活动状态的时间百分比;
Kbps:硬盘每秒读写的总数据量(单位KB);
tps:每秒某个硬盘有多少个数据传输次数;
Kb_read:读取的总数据量;Kb_wrtn:写入的总数据量。
减少磁盘争用方法:
1)增加磁盘数目
2)分散数据文件和重做日志文件
重做日志文件是顺序写入磁盘的,所以尽量不要将重做日志文件跟数据文件存放在同一个磁盘上。如果不得不将数据文件跟重做日志文件存放在同一个磁盘
上,那么该盘空间不应该属于SYSTEM表空间、RBS表空间,以及其它如DATA和INDEX表空间。它们都会直接导致与重做日志文件之间的争用,而且还会有增加
写入日志数据库读写速度的可能性
3)对于较大表,使用分区
网络性能
netstat命令。
top命令(aix下为topas):综合监控系统的命令