1)CPU
$ vmstat 5 5
System configuration: lcpu=8 mem=7744MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 5 1943309 1817 0 341 109 2018 6836 0 1246 3524 5000 34 3 32 31
1 8 1943312 861 0 23 812 1975 2909 0 1227 776 4348 13 3 45 39
2 6 1945483 1855 0 78 737 1189 1880 0 639 1287 2119 30 1 39 30
2 5 1949024 1921 0 307 73 1002 2973 0 511 3190 1719 57 1 20 22
4 9 1959284 2146 0 400 35 2745 21198 0 824 21885 3045 62 2 12 24
从上面结果看出,CPU的idle在12-45之间,wait在22-39之间,表示目前处于空闲状态的CPU基本属于正常;但是处于等待状态的CPU较多,即有较多的进程在等待获取资源后才能进入CPU运行。
2)内存
$ vmstat 5 5
System configuration: lcpu=8 mem=7744MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 5 1943309 1817 0 341 109 2018 6836 0 1246 3524 5000 34 3 32 31
1 8 1943312 861 0 23 812 1975 2909 0 1227 776 4348 13 3 45 39
2 6 1945483 1855 0 78 737 1189 1880 0 639 1287 2119 30 1 39 30
2 5 1949024 1921 0 307 73 1002 2973 0 511 3190 1719 57 1 20 22
4 9 1959284 2146 0 400 35 2745 21198 0 824 21885 3045 62 2 12 24
从上面看出,avm(激活虚拟内存页)为1.95M*4K=7.8G;fre(物理内存中的空闲页)为1.9k*4k=7.6M,而物理内存有8G,表示物理内存已经被充分利用。
IBM默认采用LATE模式来调度内存和交换空间的使用,即进程需要内存时,则调度数据进入实际物理内存;而在AIX按照“最近最少使用算法”调度该段数据到交换空间时,才分配实际的虚拟内存给此进程。所以物理内存的充分利用是IBM调度机制决定的,并不能确切反映内存是否不足。
而从交换空间的使用达到7.8G看,内存空间略现不足。
Pi 和po 值在23-400之间,表示每秒从内存换入和换出的数据达到102k-1600k,同时fr:sr大部分时间在1:1以上,表示为获得可用的物理内存,需要检查更多的物理内存页。综合结论:内存页面调度频繁,内存容量出现瓶颈。
3)硬盘I/O
$ iostat 5 5
System configuration: lcpu=8 drives=14 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 11.7 56.6 1.1 20.2 22.1
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0 0.0 0.0 0.0 0 0
dac0-utm 0.0 0.0 0.0 0 0
dac1 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0
hdisk1 92.3 842.4 210.6 4252 0
hdisk0 74.1 691.8 172.4 3492 0
dac3 0.0 0.0 0.0 0 0
dac3-utm 0.0 0.0 0.0 0 0
dac2 0.0 75.3 12.5 192 188
dac2-utm 0.0 0.0 0.0 0 0
hdisk2 1.8 75.3 12.5 192 188
hdisk3 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
hdisk4 0.0 0.0 0.0 0 0
从上面看出,hdisk0和hdisk1 (为操作系统安装盘)磁盘利用率达到74%和92%,非常繁忙,同时Kb_read为3000k到4000k每秒,而Kb_wrtn则为0,表示目前系统的主要I/O为读操作。而在hdisk0和hdisk1上各建有8G的页面空间作为虚拟内存,再考虑到1)中pi 和po比较大的情况,可以推论是由于页面空间交换频繁,导致hdisk0和hdisk1的I/O比较高。
综合结论:由于内存瓶颈,导致页面交换频繁,从而导致操作系统盘I/O过量,影响系统响应速度。
但是导致页面频繁交换的根本原因是什么呢?通过分析下面的参数,以及结合AIX操作系统内存调度机制,分析如下:
4) 进一步分析
机器虚拟内存参数设置情况如下:
# vmo -a
maxclient% = 80
maxfree = 1088
maxperm = 1525023 (大约6.1G)
maxperm% = 80
maxpin = 1585972
memplace_unmapped_file = 2
mempools = 2
minfree = 960
minperm = 381255(大约1.5G)
minperm% = 20
nokilluid = 0
vm_modlist_threshold = -1
vmm_fork_policy = 1
# topas 命令的部分结果如下:
Real,MB 7743
% Comp 64.8
% Noncomp 35.9
% Client 36.3
4个参数的解释:
minfree 和 maxfree 参数的值
使用空闲列表的目的是保持跟踪进程终止释放的实内存的页帧,向要求者立即提供页帧,而不是等待页面窃取和与之相连的输入输出的结束。minfree 限制了空闲列表的容量,低于该数值时必须开始窃取页充入空闲列表。当大于maxfree 参数时页窃取会停止。
minperm 和 maxperm 参数的值
操作系统通过把在曾经读写的内存页留在实内存一满足不同要求。如果文件页面在它们的页帧被重新分配前被请求,那就节省了输入输出操作。该文件页面可以来自本地的或远程的(如 NFS)系统。
页帧使用的文件相对用于计算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
如果 RAM 中文件页面所占的百分比高于 maxperm,页面替换的窃取只用于文件页。
如果 RAM 中文件页面所占的百分比低于 minperm,页面替换的窃取同时用于文件页和计算页。
如果 RAM 中文件页面所占的百分比介于 minperm 和 maxperm之间,页面替换只窃取文件页,除非文件页的重调入数量大于计算页数。
其中Noncomp在20%-80%之间,此时内存页交换算法通常只交换文件缓存页,但如果文件缓存页的交换率大于程序页时,程序页也同样被交换。由于SGA属于Comp页,数据文件缓存属于Noncomp页,而在数据大量访问时,文件缓存页的交换率大于程序页(SGA),因此大量的SGA页面被交换;为避免大量SGA页被交换,需要降低maxperm%值到35%以下,这样就只有文件缓存页面被交换,减少了SGA交换的次数。
5)结论
调整maxperm%和minperm%的值,可以将MINPERM和MAXPERM分别设为5%和20%甚至更小,从而使内存更多地被用于Oracle的SGA而不是系统的文件缓存。
具体命令:# vmo -o minperm%=5 -o maxperm%=20
注意:加-p参数可以永久更改系统的配置,否则只改动当前的系统配置,重新启动后则失效。
1)CPU
$ vmstat 5 5
System configuration: lcpu=8 mem=7744MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 5 1943309 1817 0 341 109 2018 6836 0 1246 3524 5000 34 3 32 31
1 8 1943312 861 0 23 812 1975 2909 0 1227 776 4348 13 3 45 39
2 6 1945483 1855 0 78 737 1189 1880 0 639 1287 2119 30 1 39 30
2 5 1949024 1921 0 307 73 1002 2973 0 511 3190 1719 57 1 20 22
4 9 1959284 2146 0 400 35 2745 21198 0 824 21885 3045 62 2 12 24
从上面结果看出,CPU的idle在12-45之间,wait在22-39之间,表示目前处于空闲状态的CPU基本属于正常;但是处于等待状态的CPU较多,即有较多的进程在等待获取资源后才能进入CPU运行。
2)内存
$ vmstat 5 5
System configuration: lcpu=8 mem=7744MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 5 1943309 1817 0 341 109 2018 6836 0 1246 3524 5000 34 3 32 31
1 8 1943312 861 0 23 812 1975 2909 0 1227 776 4348 13 3 45 39
2 6 1945483 1855 0 78 737 1189 1880 0 639 1287 2119 30 1 39 30
2 5 1949024 1921 0 307 73 1002 2973 0 511 3190 1719 57 1 20 22
4 9 1959284 2146 0 400 35 2745 21198 0 824 21885 3045 62 2 12 24
从上面看出,avm(激活虚拟内存页)为1.95M*4K=7.8G;fre(物理内存中的空闲页)为1.9k*4k=7.6M,而物理内存有8G,表示物理内存已经被充分利用。
IBM默认采用LATE模式来调度内存和交换空间的使用,即进程需要内存时,则调度数据进入实际物理内存;而在AIX按照“最近最少使用算法”调度该段数据到交换空间时,才分配实际的虚拟内存给此进程。所以物理内存的充分利用是IBM调度机制决定的,并不能确切反映内存是否不足。
而从交换空间的使用达到7.8G看,内存空间略现不足。
Pi 和po 值在23-400之间,表示每秒从内存换入和换出的数据达到102k-1600k,同时fr:sr大部分时间在1:1以上,表示为获得可用的物理内存,需要检查更多的物理内存页。综合结论:内存页面调度频繁,内存容量出现瓶颈。
3)硬盘I/O
$ iostat 5 5
System configuration: lcpu=8 drives=14 paths=2 vdisks=0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 11.7 56.6 1.1 20.2 22.1
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
dac0 0.0 0.0 0.0 0 0
dac0-utm 0.0 0.0 0.0 0 0
dac1 0.0 0.0 0.0 0 0
dac1-utm 0.0 0.0 0.0 0 0
hdisk1 92.3 842.4 210.6 4252 0
hdisk0 74.1 691.8 172.4 3492 0
dac3 0.0 0.0 0.0 0 0
dac3-utm 0.0 0.0 0.0 0 0
dac2 0.0 75.3 12.5 192 188
dac2-utm 0.0 0.0 0.0 0 0
hdisk2 1.8 75.3 12.5 192 188
hdisk3 0.0 0.0 0.0 0 0
cd0 0.0 0.0 0.0 0 0
hdisk4 0.0 0.0 0.0 0 0
从上面看出,hdisk0和hdisk1 (为操作系统安装盘)磁盘利用率达到74%和92%,非常繁忙,同时Kb_read为3000k到4000k每秒,而Kb_wrtn则为0,表示目前系统的主要I/O为读操作。而在hdisk0和hdisk1上各建有8G的页面空间作为虚拟内存,再考虑到1)中pi 和po比较大的情况,可以推论是由于页面空间交换频繁,导致hdisk0和hdisk1的I/O比较高。
综合结论:由于内存瓶颈,导致页面交换频繁,从而导致操作系统盘I/O过量,影响系统响应速度。
但是导致页面频繁交换的根本原因是什么呢?通过分析下面的参数,以及结合AIX操作系统内存调度机制,分析如下:
4) 进一步分析
机器虚拟内存参数设置情况如下:
# vmo -a
maxclient% = 80
maxfree = 1088
maxperm = 1525023 (大约6.1G)
maxperm% = 80
maxpin = 1585972
memplace_unmapped_file = 2
mempools = 2
minfree = 960
minperm = 381255(大约1.5G)
minperm% = 20
nokilluid = 0
vm_modlist_threshold = -1
vmm_fork_policy = 1
# topas 命令的部分结果如下:
Real,MB 7743
% Comp 64.8
% Noncomp 35.9
% Client 36.3
4个参数的解释:
minfree 和 maxfree 参数的值
使用空闲列表的目的是保持跟踪进程终止释放的实内存的页帧,向要求者立即提供页帧,而不是等待页面窃取和与之相连的输入输出的结束。minfree 限制了空闲列表的容量,低于该数值时必须开始窃取页充入空闲列表。当大于maxfree 参数时页窃取会停止。
minperm 和 maxperm 参数的值
操作系统通过把在曾经读写的内存页留在实内存一满足不同要求。如果文件页面在它们的页帧被重新分配前被请求,那就节省了输入输出操作。该文件页面可以来自本地的或远程的(如 NFS)系统。
页帧使用的文件相对用于计算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
如果 RAM 中文件页面所占的百分比高于 maxperm,页面替换的窃取只用于文件页。
如果 RAM 中文件页面所占的百分比低于 minperm,页面替换的窃取同时用于文件页和计算页。
如果 RAM 中文件页面所占的百分比介于 minperm 和 maxperm之间,页面替换只窃取文件页,除非文件页的重调入数量大于计算页数。
其中Noncomp在20%-80%之间,此时内存页交换算法通常只交换文件缓存页,但如果文件缓存页的交换率大于程序页时,程序页也同样被交换。由于SGA属于Comp页,数据文件缓存属于Noncomp页,而在数据大量访问时,文件缓存页的交换率大于程序页(SGA),因此大量的SGA页面被交换;为避免大量SGA页被交换,需要降低maxperm%值到35%以下,这样就只有文件缓存页面被交换,减少了SGA交换的次数。
5)结论
调整maxperm%和minperm%的值,可以将MINPERM和MAXPERM分别设为5%和20%甚至更小,从而使内存更多地被用于Oracle的SGA而不是系统的文件缓存。
具体命令:# vmo -o minperm%=5 -o maxperm%=20
注意:加-p参数可以永久更改系统的配置,否则只改动当前的系统配置,重新启动后则失效。