Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7292998
  • 博文数量: 444
  • 博客积分: 10593
  • 博客等级: 上将
  • 技术积分: 3852
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 15:26
文章分类

全部博文(444)

文章存档

2014年(1)

2013年(10)

2012年(18)

2011年(35)

2010年(125)

2009年(108)

2008年(52)

2007年(72)

2006年(23)

分类:

2011-04-01 18:27:08

性能调优
虽然性能分析和调整没有绝对的准则,但我们可以遵循一些通用的流程。检测系统性能的顺序非常重要,正确的顺序应该是:CPU、内存、I/O、网络,以下是性能调优的流程图:

1)
首先使用sar、vmstat、topas监控工具是否是cpu的原因?
如果是cpu不足的问题,可以采用的解决办法有:优化系统内核参数、优化应用程序重新安排作业运行的时间表、升级cpu的解决办法。
2)
用vmstat检测是否是内存的原因?
如果是内存不足,可以采用的解决办法有:优化系统内核参数、优化应用程序的内存参数(如informix的buffer和lock参数、scu的maxmemtl(最大内存表)参数)、增加内存等解决办法。
3)
用iostat检查是否是硬盘IO的读写原因:
如果是硬盘读写IO速度太慢,可以采用的解决办法有:重新划分存储进行调带处理,增加交换区,更换光存储硬盘等解决办法。
4)
用netstat检查是否是网络的原因
如果是网络速度过慢,可以采用的解决办法有:修改网络参数、远程数据本地化、更换网络适配器和网络链路等解决办法。
3.5.2 性能分析工具
3.5.2.1
vmstat工具
vmstat是unix通用的性能检测工具,该命令能够提供关于各种系统资源及相关性能问题的非常快速和简洁的信息。vmstat命令可以报告出以下统计信息:运行队列和等待队列中的内核进程、内存、paging、磁盘、中断、系统调用、线程间切换(Context
Switch)和CPU活动。其中CPU活动按百分比分成用户模式、系统模式、空闲时间和等待I/O时间。
vmstat命令可以找出三个方面可能的性能问题:CPU、内存和I/O。
vmstat命令的用法是:
vmstat [-ifs] [devices] [interval] [count]
vmstat –s
加 –s 参数可以报告从系统启动到现在的paging和系统事件的概要信息。输出形式如下:
# vmstat -s
2895207 total
address trans. faults
145740 page
ins
83203 page
outs
3436 paging
space page ins
7844 paging
space page outs
0 total
reclaims
1260991 zero
filled pages faults
5360 executable
filled pages faults
1171187 pages
examined by clock
35 revolutions
of the clock hand
72712 pages
freed by the clock
16984 backtracks
0 lock
misses
1904 free
frame waits
0 extend
XPT waits
58771 pending
I/O waits
111921 start
I/Os
111921 iodones
12935949 cpu
context switches
74569755 device
interrupts
0 software
interrupts
0 traps
54273766 syscalls
vmstat –f
加 –f 参数可以报告从系统启动到现在fork出的进程或线程的数目。
加 –i 参数可以报告从系统启动到现在或每个时间间隔内的设备中断情况。输出形式如下:
# vmstat -i
priority level
type count module(handler)
0 80
hardware 0
/usr/lib/drivers/planar_pal_chrp(1df7acc)
0 81
hardware 0 /usr/lib/drivers/planar_pal_chrp(1df7af0)
0 81
hardware 0
/usr/lib/drivers/pci/s_scsiddpin(1e2ec28)
3 19
hardware 119054 /etc/drivers/ssapin(1e69d10)
3 20
hardware 128930 /etc/drivers/ssapin(1e69d10)
3 35
hardware 21182617 /usr/lib/drivers/pci/phxentdd(1fbb464)
3 40
hardware 3974529 /usr/lib/drivers/pci/phxentdd(1fbb464)
3 49
hardware 2925178 /usr/lib/drivers/pci/s_scsiddpin(1e2eb2c)
3 50
hardware 60
/usr/lib/drivers/pci/s_scsiddpin(1e2eb2c)
4 1
hardware 853
/usr/lib/drivers/isa/kbddd_chrp(1fd5170)
4 12
hardware 3217
/usr/lib/drivers/isa/msedd_chrp(1fdb2f0)
vmstat [interval] [count]
vmstat后面跟时间间隔和显示次数可以周期性地报告进程、paging、内存和CPU的利用情况。在下面的vmstat输出中,我们可以看出一个占用CPU资源很多的程序启动和停止的过程:
# vmstat 2 7
kthr
memory page faults cpu
----- ----------- ------------------------
------------ -----------
r b
avm fre re pi po
fr sr cy
in sy cs us sy id wa
1 1 51971
5339 0 0
0 10 28 0
174 120
81 0 1 98 1
0 0 51975
5335 0 0
0 0 0 0
151 2123 52 0 0
99 0
0 0 51975
5335 0 0
0 0 0 0
149 2067 51 1 0
99 0
0 0 51975
5335 0 0
0 0
0 0 148 2071 51 85 15 0 0
0 0 51975
5335 0 0
0 0 0 0
162 2079 54 78 21 1 0
0 0 51975
5335 0 0
0 0 0 0
154 2067 50 0 0
99 0
0 0 51975
5335 0 0
0 0 0 0
144 2119 49 0 1
99 0
在这个例子中我们可以发现,前三行的输出中CPU空闲的比率为95%以上。然后一个占用CPU资源很多的程序启动,此时CPU空闲为0,可以看出CPU资源明显不足。该程序停止后,CPU的利用率又回到起始值。
要检查CPU是否为性能瓶颈,我们应该关注cpu下面的四列和kthr(Kernel Threads)下面的两列。下面详细介绍这六列的含义。
CPU列
表示在指定时间间隔内CPU的利用情况。
us列显示消耗在用户模式的CPU时间的百分比。UNIX进程可以运行在用户模式,也可以运行在系统模式。当运行在用户模式时,进程执行自己的应用代码,不需要内核资源来执行计算、管理内存或设置变量。
sy列显示程序运行在系统模式的CPU时间的百分比。这包括内核进程和其它需要访问内核资源的进程所消耗的CPU时间。如果一个进程需要内核资源,它必须执行一个系统调用,然后切换至系统模式,获得资源。
理想的CPU工作时间应该是100%,这在不需要共享CPU的单用户系统下是正确的。通常情况下,如果一个单用户系统的 us+sy 时间小于90%,就可以认为CPU不是性能瓶颈。然而在多用户系统中,如果us+sy 时间大于80%,进程就要在运行队列中等待CPU,响应时间和吞吐量都会受到影响,此时CPU就可以被认为是性能瓶颈。
id列显示CPU空闲或等待的百分比。这个百分比中不包括等待磁盘I/O的时间。如果当前没有进程需要运行,系统会分派一个叫做wait的进程给CPU运行。
wa列显示CPU等待磁盘I/O的空闲时间的百分比。当wait进程运行时,如果存在至少一个为完成的磁盘I/O,CPU时间就记入wa列。等待磁盘I/O的进程被放在等待队列,一旦该进程的I/O请求结束,它就被放入运行队列。
如果wa值大于25%,就表示磁盘子系统可能不平衡,或者应用是对磁盘敏感的。
KTHR列
表示在指定时间间隔内每秒种放入不同队列中的内核线程数。
r列表示在指定时间间隔内每秒种放入运行队列中的内核线程的平均数,也就是可以运行的线程数。在单CPU的系统中,这个值应该小于5。对于SMP系统,这个值应该小于:
5 × ( Ntotal - Nbind )
其中Ntotal 表示总的CPU个数,Nbind 表示被绑定到某个进程的CPU数。如果r的值快速增加,就可能说明CPU资源紧张,需要查看一下应用程序。
b列表示在指定时间间隔内每秒种放入等待队列中的内核线程的平均数,这些线程在等待资源或I/O。b的值通常应该接近0。
当需要判断系统是否缺少内存或内存需要调整时,最简便的方法是运行vmstat命令,查看pi和po列。
在vmstat的输出中,与虚拟内存有关的是memory中的两列和page中的四列,下面详细解释这几列的含义:
MEMORY列
提供实际内存和虚存的信息。
avm代表Active Virtual
Memory,即活动的虚存大小。这一列给出了Paging
Space中分配的页数。当进程执行时,运转存储段的空间被分配在Paging Space中。avm值可用来计算已分配的Paging Space的大小,用avm值除以256就是Paging Space分配的MB数。
fre列显示空闲内存页的平均数。系统总会在内存中维持一定大小的、当系统需要内存时可以马上得到的空闲内存页,称作空闲列表。VMM空闲列表的最小页数由vmtune中的minfree参数决定。缺省时,minfree值由实际内存大小决定,对于64MB以上的内存,minfree值一般为120页。
如果空闲列表中的页数小于minfree值,VMM就会开始置换页面,直到空闲列表中的页数大于maxfree值为止。maxfree值等于minfree值加8。
PAGE列
显示页面置换活动的信息。
pi列表示每秒钟从Paging Space置换到内存的页数。
po列表示每秒钟从内存置换到Paging
Space的页数。
如果这两列持续大于零,则系统的性能瓶颈很可能是内存。
fr列表示每秒钟页面置换算法释放的页数。
sr列表示每秒钟页面置换算法检查的页数。
3.5.2.2
Ps工具
如果我们用vmstat等命令查出CPU是性能的瓶颈,那么接下来的任务就是找出占用CPU时间最多的进程。ps命令是一个非常灵活的工具,它的一些选项可以可以帮助我们实现目标。以下是运行ps命令的一个例子:
# ps au
USER
PID %CPU %MEM SZ RSS
TTY STAT STIME TIME COMMAND
root
14192 0.0 0.0
752 772 lft0 A
Aug 30 0:00 /usr/sbin/getty /
root
20720 0.0 0.0
416 428 pts/0 A
14:51:26 0:00 ps au
root
17100 0.0 0.0 1064 1072
pts/0 A 12:31:49 0:00 -ksh

其中%CPU列和TIME列显示出每个进程占用CPU的时间。%CPU是指从进程开始到现在占用的CPU的百分比,计算公式如下:
%CPU=(进程的CPU时间÷进程总时间)×100
SIZE列表示以KB为单位的进程数据段占用的虚存的大小。
RSS列表示KB为单位的进程占用的实际内存的大小。
%MEM列表示进程占用内存的百分比,等于RSS除以实际内存的KB数。

3.5.2.3
topas工具
topas是aix的一个专有性能监控工具,非常直观的输出了cpu、内存、硬盘io、网络状态的信息。
#topas

3.5.2.4
sar命令
sar命令是用来收集系统统计信息的标准UNIX命令。虽然它能够收集到很多有用的信息,但它的缺点是占用系统资源较大,有可能加剧已存在的性能问题。
sar命令的选项非常多,可以提供队列、paging、TTY以及其它很多统计信息。sar命令在RS/6000平台上的一个重要的新功能是它不但能够统计整个系统的CPU利用率,还可以报告每个CPU的统计信息。因此sar命令对于SMP系统非常有用。
以下介绍sar命令的一些有用的选项:
sar –u
加 –u 参数可以报告CPU利用率的统计信息。输出结果与vmstat命令相同。
sar –P
加 –P 参数可以报告每个CPU利用率的统计信息。
sar –c
加 –c 参数可以报告系统调用的统计信息。
sar –q
加 –q 参数可以显示运行队列和交换队列的大小。
# sar -u 1 10
AIX mscp01 1 5 0001AC2F4C00 09/06/05
12:40:58 %usr %sys
%wio %idle
12:40:59 0 0
0 100
12:41:00 0 1
0 99
12:41:01 0 1
0 99
12:41:02 0 0
0 100
12:41:03 0 0
0 100
12:41:04 0 0
0 100
12:41:05 0 8
18 74
12:41:06 0 0
0 100
12:41:07 0 2
3 95
12:41:08 0 3
6 91
Average
0 1 3
96

3.5.2.5
iostat命令
iostat命令虽然主要用于查看I/O的统计信息,它也可以用来查看CPU的利用情况。在CPU方面,iostat和vmstat的用法和输出结果基本上是相同的。iostat命令的用法是:
iostat [-t] [-d] [devices] [interval]
[count]
iostat –t
加 –t 参数可以报告TTY和CPU的统计信息。
iostat –d
加 –d 参数可以报告磁盘的统计信息。
–t 参数和–d 参数不能同时使用。
iostat [interval] [count]
iostat后面跟时间间隔和显示次数可以周期性地报告TTY、CPU和磁盘的统计信息。
# iostat 1 1
tty:
tin tout avg-cpu:
% user % sys % idle
% iowait

0.5 27.2 0.1 1.2
97.5 1.2
Disks:
% tm_act Kbps tps
Kb_read Kb_wrtn
hdisk0
0.0 0.0 0.0 64
18596
hdisk1
0.0 0.0 0.0 0
18584
hdisk5
0.0 0.0 0.0 0 0
hdisk2
0.0 0.0 0.0 0
0
hdisk7
0.0 0.0 0.0 0 0
hdisk6
0.0 0.0 0.0 0 0
hdisk4
0.0 0.0 0.0 0 0
hdisk3
0.0 0.0 0.0 0 0
hdisk8
0.0 0.0 0.0 0 0
cd0
0.0 0.0 0.0 0 0

3.5.3 核心参数的调整
为了优化智能网应用的运行效率,需要修改以下内核参数:
3.5.3.1
修改系统环境变量
# smit
顺序选择:
System
Environments-> Change/Show Characteristics of Operating Systm
在出现的界面中,修改以下两个参数的值:
HIGH water mark for pending write I/Os per
file [33]
LOW water mark for pending write I/Os per
file [24]
修改系统运行参数
打开/sbin/rc.boot,查找“syncd”,将其参数修改为10:
nohup
/usr/sbin/syncd 10 > /dev/null 2>&1
&
3.5.3.2
配置系统的AIO
激活系统中的AIO设备
# smit aio
选择:
Change / Show
Characteristics of Asynchronous I/O
在出现的界面中,修改以下参数的值:
STATE to be
configured at system restart available
然后按键执行。
3.5.3.3
设置系统参数fullcore
进程一旦运行异常,发生core dump,系统会产生core文件,将发生异常的进程的相关信息收集起来,便于用户进行定位分析。系统参数fullcore决定在进程发生core dump时,是否将数据段一起core dump,即是否将数据段信息收集保存在core文件中。设置为true,则表示将数据段信息保存,设置为false则表示不收集保存。这里要设置为true。
smitty->
System Environments-> Change / Show Characteristics of Operating System
将参数Enable full CORE dump的值设置为true。
3.5.3.4
调整系统内核参数
设置进程可申请的最大内存数目,以满足系统进程运行时的需求。
打开/etc/security/limits文件,修改其中的data参数的取值。
将“default:”下面中配置项“data”的值修改为524288。修改后,保存文件。
注意:修改以上内核参数后需要重新启动系统,使上面的设置生效。
3.5.4 交换区的设置
1.系统安装好以后默认是rootvg中的hd6,交换区大小可是使用lsps –a查看大小。
# lsvg -l rootvg
rootvg:
LV NAME TYPE LPs
PPs PVs LV STATE MOUNT POINT
hd5 boot 1
2 2 closed/syncd N/A
hd6 paging 32
64 2 open/syncd N/A
hd8 jfslog 1
2 2 open/syncd N/A
hd4 jfs 31
62 2 open/syncd
/
hd2 jfs 62
124 2 open/syncd /usr
hd9var jfs 31
62 2 open/syncd /var
hd3 jfs 62
124 2 open/syncd /tmp
hd1 jfs 16
32 2 open/syncd /home
hd10opt jfs 62
124 2 open/syncd /opt
lvsoft jfs 250
250 2 open/syncd /soft

# lsps -a
Page Space
Physical Volume Volume
Group Size %Used
Active Auto Type
hd6
hdisk0 rootvg 512MB 1
yes yes lv
系统默认的交换区太小,需要手工增加交换区。
2.交换区大小的设置应参照内存的大小来调整大小,下表为参照值。


内存大小


交换区大小



内存大小


内存大小*2



4G内存大小


6G



内存大小>=6G


6G


使用mkps命令动态增加一个交换区,直接生效,系统不用重启。
在rootvg中增加一个交换区,大小为20个pp,每个pp=128M,总共2G,命令如下:
mkps -a -n –s20 rootvg
或使用菜单添加交换区:
smitty mkps
引用链接:
阅读(3312) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~