Archive

Posts Tagged ‘aix’

man vmstat on AIX

June 22nd, 2010 No comments
vmstat Command
Purpose
       Reports virtual memory statistics.

Read more…

Categories: ibm aix Tags: ,

Oracle在AIX平台用裸设备,打补丁要谨慎!

March 8th, 2009 No comments
2008-05-09 11:30

Oracle在AIX平台用裸设备,打补丁要谨慎!

听到和碰到了几次了。

Oracle 10g rac 环境打完AIX的补丁,OCR的裸设备可能出问题了,不得已恢复OCR.

Oracle 9.2.0.4 环境打完AIX的补丁,裸设备全部报数据文件不可用了.

还听到一个:没有停库,打完操作系统补丁,数据库起不来…具体情况没细问。

 

打操作系统补丁也要谨慎啊!

Categories: DBA工作备忘录, ibm aix Tags: , ,

多核技术与并发多线程技术介绍

March 7th, 2009 No comments

      多核技术可以看成是一种CPU的集成技术,在一个CPU处理模块上,可以集成2个或者是多个CPU,但是,他们还是单独的物理CPU。并发多线程技术则需要OS的支持,是在OS级别上,可以实现一个物理CPU的多线程并发处理,提高oltp环境模式下的CPU利用率。

      先说多核技术,如在IBM的POWER5中,就有如下几种不同的CPU集成模式:如Dual-Core Module(双核),表示一个CPU模块中其实有2个物理的CPU(也叫core),他们共享L2与L3 cache。这种CPU模块一般用在520/550上,所以,象采用这种模式的550最多可以有4颗CPU(2个CPU模块)。而Quad Core Module [QCM],这个不知道怎么翻译了,这种技术下,在一个CPU模块中,有4个物理CPU,相当与2个Dual-Core Module集成在一个CPU模块中,从55Q以后的机型,如55Q、55A都支持这样的CPU模块,所以,如果采用这样的模块,55A就可以达到8颗物理CPU。最后说Multi-Chip Module,这个就叫多核技术了,如一个CPU模块中,可以有8个物理CPU,相当于4个Dual-Core Module,一般用在590与595上。如图,则是一个采用了Multi-Chip Module技术的CPU模块:

      从以上的图片与描述可以看到,这种多核技术不过是物理CPU的高集成度技术,让更小的地方,可以放更多的CPU,如550空间大小不变,同样2个CPU模块,如果采用双核的CPU模块,则只可以支持4颗CPU,如果采用Quad Core Module [QCM]技术的CPU模块,则最多可以支持到8颗CPU。

      需要注意的是,这个时候550的CPU模块(CPU插槽)并没有增加,所以,如果在开始选型的时候,只选择4颗CPU(或以下),而又想留有扩展余地的话,则一定要选择Quad Core Module [QCM]技术的CPU模块,否则,以后只能通过更换CPU模块(而不是增加CPU模块)来升级CPU个数了,这样会比较麻烦。

      在不同的厂商,对这个多核技术可能略有差别,如Sun將其多核心架构命名为CMT(Chip Multi-Threaded),把一个芯片(类似IBM的CPU模块,内含2个或多个core)叫成一个CPU(physical processor)。CMT技术能够将更多的晶体管压缩到一个芯片中,同时能够简化每一个CPU的设计,把更多的CPU压在一个芯片当中以提高整个芯片处理交易事务的能力。需要知道的是,这里与ibm的core的定义将有所差别,IBM认为一个core是一个CPU(physical processor),而SUN认为一个芯片是一个CPU。更多的人习惯拿CMT技术与下面说的SMT技术来对比,但是CMT是硬件技术,SMT更多是软件技术,所以,我个人认为与多核技术对比比较合适。

      因为以上的差别,以CPU为收费对象的厂商,如Oracle,则在不同的CPU类型上,一般有不同的处理方式,现在一般已经不在按物理的CPU来购买license,而是CPU模块方式来购买,例如oracle规定,在IBM Dual-Core Module(双核模块)的POWER芯片上,一个双核模块(内含2颗物理CPU)只需要购买1.5个license。

      看了多核技术,我们再说并发多线程技术,在POWER5的构架上,以及AIX 5.3以上,或运行在其上的linux 2.6核心以上,都可以支持这个技术,也叫SMT(simultaneous multi-threading)技术。一个物理的CPU,在IBM中也就是一个core,在OS层面上,将显示为2颗(或多颗,这需要看未来的发展可能性)逻辑的CPU。

      注意的是,这种技术与硬件构架以及OS都是有关系的,如SMT就是POWER5才支持的,而且也要特定的OS,如Aix 5.3才支持,也就是说,POWER5上跑5.2,也是不支持这样的技术的。在这样的技术中,每个POWER5 CPU两个硬件线程,SMT旨在利用POWER5处理器的超标量特性,以便同时执行多个指令。它的基本理念是:没有一个单一应用可使向POWER5这样的超标量处理器达到完全饱和的状态,因此,部署同时提供输入的多个应用效果更理想。如图,如果把CPU的指令处理分成很多小的单元的话,它们是可以并发的。

      那么,按照这样的设计思想,那么,SMT技术将在细小的OLTP应用中受益,而大型的计算业务,如浮点密集型的工作(耗费单个CPU很长时间,对浮点单元与内存带宽消耗比较大),是不适合使用SMT技术的。当然,我们可以在OS级别决定是否打开SMT技术,主要取决于这个技术是否为我们带来好处,默认则是打开SMT。

      在实际的使用中,我们可能发现,一个物理CPU分化的2个逻辑CPU可能存在分配不平等的现象,如topas可以看到:

 

#topas
CPU      User%   Kern%   Wait%   Idle%
CPU6      31.7       7.5         51.6       9.1
CPU4      30.4      10.1        45.2      14.3
CPU0      19.4       6.6         28.2       45.8
CPU2      15.4       5.7         31.4       47.5
CPU3       0.0       1.5          0.0         98.5
CPU5       0.0       1.3          0.0         98.7
CPU7       0.0       1.3          0.0         98.7
CPU1       0.0       1.6          0.0         98.4
      如以上,1,3,5,7比较闲,而2,4,6,8会比较忙,按照IBM的官方说法是,在SMT技术中,如果仅仅是其中一半的逻辑CPU(对应到具体个数的物理CPU)能满足需求的话,另外的一半逻辑CPU将一般比较闲置,只有当系统业务比较繁忙的时候,另外一半的逻辑CPU是可以参与计算的。我猜想,估计这样处理的规则是,避免在简单任务的时候,也采用复杂的分发机制。

      以上介绍了多核技术与多线程技术,多核技术一般指CPU的集成度,一般的厂家规则都是一个core对应到一个物理CPU,所以,一个CPU模块中可能存在多个物理CPU,而并发多线程技术(SMT)则是指单一物理处理器能够同时分发来自多于一个硬件线程上下文的指令,可以虚化成2个逻辑的CPU。我们看一个POWER5的Dual-Core Module技术的CPU模块与逻辑CPU的对照图:

      我们也可以采用如下的命令查看AIX 5L上物理CPU的个数,他们的数目不同于开启过SMT技术以后的topas中的CPU个数,简单的说,采用SMT技术的os上,topas看到的CPU个数是物理CPU的2倍。

查看系统物理CPU的个数: 

# lsdev -Cc processor
proc0 Available 00-00 Processor
proc2 Available 00-02 Processor

查看系统逻辑CPU的个数: 

# bindprocessor -q
The available processors are: 0 1 2 3
 
# vmstat
System configuration: LCPU=4 mem=3920MB
kthr    memory              page              faults        CPU  
—– ———– ———————— ———— ———–
r b   avm   fre re pi po fr   sr cy in   sy cs us sy id wa
1 1 145025 840638   0   0   0   0    0   0   1 1336 67 0 0 99 0

查看CPU位数

# prtconf | grep CPU
CPU Type: 64-bit

查看CPU的详细信息,如主频,是否支持SMT,是否开启了SMT等等:

#lsattr -El proc0
frequency   1896102000     Processor Speed       False
SMT_threads 2              Processor SMT threads False
state       enable         Processor state       False
type        POWERPC_POWER5 Processor type        False

查看CPU类型

# prtconf | grep Type
Processor Type: PowerPC_POWER5
CPU Type: 64-bit
Kernel Type: 64-bit
 
# lsattr -El proc0/2
frequency   1898100000     Processor Speed       False
smt_enabled true           Processor SMT enabled False
smt_threads 2              Processor SMT threads False
state       enable         Processor state       False
type        PowerPC_POWER5 Processor type        False

查看各个逻辑CPU处理不同大小数据包的状态

# netstat -m
Kernel malloc statistics:
******* CPU 0 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
32                  102       108      0         0      26    5016       0
64                   52     14268      0         1      76    5016       0
128                376      2449      0        11      72    2508       0
256                 264      7493      0        16     120    5016       0
512                4285 152507777      0       531     195    6270       0
1024                117      2486      0        35      27    2508       0
2048               4128     58476      0      2100     112    3762       0
4096                 70        92      0         6       3    1254       0
8192                  2        86      0        13      25     627       0
16384              1008      1099      0       130       7     313       0
32768                 0       252      0         5      12     156       0
65536                 1        30      0         5       5     156       0
131072                2         2      0         0      98     196       0
 
******* CPU 1 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
64                    8      4750      0         0      56    5016       0
128                   0        25      0         0      32    2508       0
256                   0       842      0         0      32    5016       0
512                   0   7120495      0         0     168    6270       0
1024                  0      1681      0         1       4    2508       0
2048                 16     13800      0        29      66    3762       0
4096                  0         5      0         1       9    1254       0
8192                  0        13      0         2       2     627       0
16384                 0        35      0         3       4     313       0
32768                 0       150      0         5      12     156       0
65536                 0        17      0         3       4     156       0
131072                0         0      0         0       8      16       0
 
******* CPU 2 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
32                   23        27      0         0     105    5016       0
64                   59      9257      0         2      69    5016       0
128                  39      1663      0         1      57    2508       0
256                  13      6609      0         1     195    5016       0
512                  48 151786408      0         8     200    6270       0
1024                 41      2191      0        15      19    2508       0
2048                 38     46224      0        55     104    3762       0
4096                  0        26      0         3       6    1254       0
8192                  2        72      0        14      21     627       0
16384                16        72      0         5       5     313       0
32768                 0       178      0         4      12     156       0
65536                 0        53      0         5       5     156       0
131072                2         2      0         0      11      22       0
 
******* CPU 3 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
64                    5      4287      0         0      59    5016       0
128                   0         4      0         0      32    2508       0
256                   0       712      0         0      16    5016       0
512                   5   6319949      0         0     163    6270       0
1024                  0      1163      0         1       4    2508       0
2048                  9     12104      0        35      75    3762       0
4096                  0         5      0         1       5    1254       0
8192                  0        17      0         3       6     627       0
16384                 0        41      0         4       5     313       0
32768                 0       191      0         4      11     156       0
65536                 0         8      0         2       4     156       0
131072                0         0      0         0       8      16       0

 查看整体的SMT信息,更多的信息可以查看man SMTctl:

#SMTctl
This system is SMT capable.
SMT is currently enabled.
SMT boot mode is not set.
SMT threads are bound to the same physical processor.
 
proc0 has 2 SMT threads.
Bind processor 0 is bound with proc0
Bind processor 1 is bound with proc0
 
proc2 has 2 SMT threads.
Bind processor 2 is bound with proc2
Bind processor 3 is bound with proc2
 
proc4 has 2 SMT threads.
Bind processor 4 is bound with proc4
Bind processor 5 is bound with proc4
 
proc6 has 2 SMT threads.
Bind processor 6 is bound with proc6
Bind processor 7 is bound with proc6

删除系统可用的CPU
如果需要动态减少系统可用的CPU,可以使用’CPU_DEALLOCATE CPU_ID’命令减去指定ID的CPU

#CPU_deallocate logical_CPU_id

 

CPU_deallocate的使用方法很简单,只是在后面加上CPU的ID号即可。

#CPU_deallocate
CPU_deallocate requires a logical CPU number
Usage: CPU_deallocate logical_CPU_id [-P]

 比如,删去ID号为16的CPU,如下:

 

#CPU_deallocate 16

查看系统errpt,可以看到记录信息如下:

#errpt
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTIO
804E987A 0415140308 I O proc16 CPU DEALLOCATED
1B963892 0415140208 P H proc16 CPU FAILURE PREDICTEDb

查看系统CPU的资源使用情况
查看系统CPU资源整体使用情况,可以使用’vmstat’、’sar’命令或是’topas’。vmstat和sar在监控系统CPU资源表现时,都是需要加时间间隔和运行次数参数的;不同的是vmstat统计的是整体变化,sar可以列出每个CPU的表现。topas则统计的系统资源更为丰富一些。
比如,每隔2s统计CPU资源,共统计5次,

# vmstat 2 5
System configuration: lCPU=4 mem=3920MB
kthr    memory              page              faults        CPU   
—– ———– ———————— ———— ———–
 r b   avm   fre re pi po fr   sr cy in   sy cs us sy id wa
 0 0 855942 2675   0   0   0   0    0   0 90 1890 290 2 0 96 1
 0 0 855941 2672   0   0   0   0    0   0 57 1760 197 1 0 98 0
 0 0 855942 2663   0   0   0   0    0   0 42 1559 191 1 0 97 2
 0 0 855942 2654   0   0   0   0    0   0 22 1537 136 1 0 98 1
 0 0 855942 2646   0   0   0   0    0   0 76 1935 235 2 0 97 1
 
# sar -P ALL 2 5
AIX IBMSim 3 5 00059EC6D700    08/18/08
System configuration: lCPU=4
12:51:03 CPU    %usr    %sys    %wio   %idle   physc
12:51:05 0        0       1       0      99    0.53
          1       0       0       0     100    0.47
          2        4       0      2      94    0.55
          3        0       0       0     100    0.45
          -        1       0       1      98    2.00
12:51:07 0        2       1       1      96    0.53
          1        0       0       0     100    0.47
          2        2      0       2      96    0.55
          3        0       0       0     100    0.45
          -        1       0       1      98    2.00
12:51:09 0        1       0       2      96    0.53
          1        0       0       0     100    0.47
          2        1       0       1      98    0.55
          3        0       0       0     100    0.45
          -        1       0       1      98    2.00
12:51:11 0        2       1       2      95    0.53
          1        0       0       0     100    0.47
          2        0       0       1      98    0.55
          3        0       0       0     100    0.45
          -        1       0       1      98    2.00
12:51:13 0        2       1       2      95    0.53
          1        0       0       0     100    0.47
          2        1       0       0      99    0.55
          3        0       0       0     100    0.45
          -        1       0       0      98    2.00
 
Average   0        2       1       2      96    0.53
          1        0       0       0     100    0.47
          2        2       0       1      97    0.55
          3        0       0       0     100    0.45
          -        1       0       1      98    2.00
 
#topas
Name            PID CPU% PgSp Owner
oracle      1114294   1.4   4.5 oracle
oracle      1241342   0.3   4.9 oracle
oracle       868490   0.3   4.9 oracle
oracle       766004   0.2   5.3 oracle
dtgreet      114772   0.1   1.3 root
topas       1126546   0.1   1.3 root
oracle      1249510   0.0   4.5 oracle
oracle      1061108   0.0   4.4 oracle
gil           69666   0.0   0.9 root
xmgc          49176   0.0   0.4 root
oracle       348330   0.0   8.8 oracle
oracle       360630   0.0   4.1 oracle
aioserve     417996   0.0   0.4 root
oracle       356526   0.0   4.9 oracle
X            143470   0.0   3.6 root
nfsd         831622   0.0   1.8 root
rpc.lock     204976   0.0   1.2 root
netm          65568   0.0   0.4 root
xmwlm        319680   0.0   0.8 root
syncd        135292   0.0   0.5 root

如果需要监控某个CPU一定时期的资源表现,则需要使用sar命令,比如:
监控ID为0、2的CPU资源表现,每隔2s统计1次,共统计4次,使用命令如下:

# sar -P 0,2 2 4
AIX IBMSim 3 5 00059EC6D700    08/18/08
System configuration: lCPU=4
12:56:21 CPU    %usr    %sys    %wio   %idle   physc
12:56:23 0        2       1       6      91    0.53
          2        1       0       2      97    0.55
12:56:25 0        1       0       4      94    0.53
          2        0       0       4      96    0.55
12:56:27 0        3       1       1      96    0.53
          2       10       1       1      89    0.57
12:56:29 0        1       1       3      95    0.53
          2        1       0       4      94    0.55
 
Average   0        2       1       3      94    0.53
          2        3       0       3      94    0.55

 

 注:HMT的激活将导致一些性能检测工具统计异常。

激活HMT的方法:
bosdebug -H on
关闭HMT的方法:
bosdebug -H off
显示HMT的方法:
bosdebug,如果HMT处于激活状态,可以看到HMT on字样。

 

进程绑定
绑定某个进程在指定的CPU上,使用命令’bindprocessor PID CPUID’
比如绑定’vmstat’的进程在ID为3的CPU上运行

#ps -ef|grep vmstat
root 168232 151706 0 13:48:56 pts/2 0:00 vmstat 1
root 172342 118896 0 13:49:35 pts/4 0:00 grep vmstat
#bindprocessor 168232 3
Categories: ibm aix, OS & 小型机 Tags: ,

vi--强大的全屏幕编辑器

March 7th, 2009 No comments

 
vi 简介

文本编辑大概是系统运行中最为频繁的操作了,而在Unix/Linux下有一种标准而功能极为强大的编辑器,那就是Vi(Visual Edtior)。

对于Unix/Linux的初学者来说,vi可能显得极为不友好――所有操作都要用特殊的击键或者组合键来控制,而且似乎这些命令跟要执行的操作并没有什么关系,非常难记,比起Windows下的notepad实在是”恐怖”多了。其实这只是转移工作环境中的正常现象,如果经过大量的实践,你会发现其实vi对于键盘的利用非常合理,如果用的熟练了,vi不仅可以成为你的文本编辑利器,而且对于系统配置甚至编程都有莫大的帮助。
vi实用操作指南

作为一个Unix系统下标准的全屏幕文本编辑器,vi可以方便的实现插入、修改、拷贝粘贴三种基本的编辑操作。但是不像其他的字处理器,vi是以指令模式作为缺省的模式运行的。

更复杂的操作可以用一系列的按键来完成。

【进入vi 与退出】

Vi 有三种模式,输入模式(Inserting Mode)、指令模式(Command Mode)以及ex模式(Ex Mode)。在输入模式下可以输入文字,而指令模式下可以执行编辑文件、存档等等指令;Ex模式用于执行另外一些功能,如查找、替换文本、多文件的操作等等。 要进入vi可以直接在Shell提示符下键入vi [文件名称],如果该文件在当前目录不存在,则vi创建之。
为了进入输入模式,有好几种方法:

新增 (append)
a: 从光标所在位置后面开始添加内容,光标后的内容随新增字符向后移动。
A: 从光标所在列最后面的地方开始添加内容。

插入 (insert)
i: 从光标所在位置前面开始插入内容,光标后的内容随新增内容向后移动。
I: 从光标所在列的第一个非空白字符前面开始插入内容。

开始 (open)
o: 在光标所在列下新增一列并进入输入模式。
O: 在光标所在列上方新增一列并进入输入模式。

可以随时用ESC键切换到指令模式,连续按一两次就够了,这时系统会发出哔哔声以确定进入指令模式。然后再指令模式下有多种退出方法:
ZZ 保存并退出

:x 保存并退出

:wq 保存并退出

:w 保存并返回指令模式

:30,60w [新文件] 将30到60行的内容写入[新文件]

:30,60w>> [文件] 将第30到60行的内容写入[文件]的末尾

:q 退出

:q! 退出并丢掉所有未保存信息

Q 退出vi,激活ex

:e file2 在不离开vi的条件下编辑file2

:n 编辑下一个文件

:e! 回到当前编辑文件上次保存的状态
vi 基本编辑

【移动光标】

移动光标自然是编辑过程中的基本技能,这个步骤一定要熟练掌握。

常用的移动命令键有:

h 左移一个字符

j 下移一行

k 上移一行

l 右移一个字符

w,W 跳至后一个字(W忽略标点)

b,B 跳至前一个字(B忽略标点)

$ 至行尾

^ 至本行第一个非空字符

0 至行首

G 至缓冲区的起始处

nG n是整数,至第n行

CTRL-d 向下半页

CTRL-u 向上半页

CTRL-f 向下一页

CTRL-b 向上一页

H 移动到当前窗口的第一列

M 移动到当前窗口的中间列

L 移动到视窗的最后列 │

e 移动到下个字的最后一个字母

n- 减号移动到上一列的第一个非空白字符,前面加上数字可以指定移动到以 上 n 列

n+ 加号移动到下一列的第一个非空白字符,前面加上数字可以指定移动到以下 n 列

fx 往右移动到 x 字符上

Fx 往左移动到 x 字符上

tx 往右移动到 x 字符前

Tx 往左移动到 x 字符前

; 配合 f 和 t 使用,重复一次

, 配合 f 和 t 使用,反方向重复一次
【编辑】

x 删除光标所在字符,同时所在行的位于光标后的文字一起左移一格;如果删除的是某行的最后一个字符,则删除后光标左移一格

d 是删除命令,它作用于文本对象,即可被移动命令跨过的文本块。例如w可以用来跳至下一个字开始处,那么dw从光标位置所在字删至下一字开始处;6w将删至光标所在字后第六个字开始处等等

dd 删除光标所在的行

r 修改光标所在字符,r 后接着要修改的字符

R 进入取代状态,新增内容会覆盖原先内容,直到按 [ESC] 回到指令模式下止

s 删除光标所在字符,并进入输入模式

S 删除光标所在的列,并进入输入模式

u 撤消最近一次对文本的改动。标准版的vi只能执行一级撤消,而vim则可以多级

U 行撤消命令,用来撤消从光标最近一次移到该行时起对光标所在行做的全部改动

n( 左括号移动到句子的最前面,前面加上数字可以指定往前移动 n 个句子.句子以! . ? 三种符号来界定

n) 右括号移动到下个句子的最前面,前面加上数字可以指定往后移动 n 个句子

n{ 左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落。段落以段落间的空白列界定

n} 右括弧移动到下个段落的最前面,前面加上数字可以指定往后移动 n 个段落
看到这里,恐怕有的读者已经开始吐舌头了:这么多”莫名其妙”的指令来编辑文本实在是太复杂了!还是那句话,”熟能生巧”。如果用的熟练了,利用这些命令来移动、编辑简直都不是大脑在控制,你的手指已经足够熟练为你做好任何你想做的事情
【指令组成】

现在可以提一下vi的指令组成。上面也看到了,很多指令都是控制键和数字等结合起来控制的。没错!其中很多大致是由指令与范围所构成。例如 dw 是由删除指 d 与范围 w 所组

成,代表删除一个字 d(elete) w(ord) 。

指令列表有:

d 删除(delete)

y 复制(yank)

p 放置(put)

c 修改(change)

范围可以是下列几个:

e 光标所在位置到该字的最后一个字母

w 光标所在位置到下个字的第一个字母

b 光标所在位置到上个字的第一个字母

$ 光标所在位置到该列的最后一个字母

0 光标所在位置到该列的第一个字母

) 光标所在位置到下个句子的第一个字母

( 光标所在位置到该句子的第一个字母

) 光标所在位置到该段落的最后一个字母

{ 光标所在位置到该段落的第一个字母

其实组合命令远远不止这些,更多的需要在实践中慢慢体会。
【查找样本】

在文本内移动的时候经常需要查找一定模式(Pattern)构成的文本,vi也提供了相应的命令键

/pattern 移至下一个包含pattern的行

?pattern 移至上一个包含pattern的行

/ 往下重复查找

? 往上重复查找

n 在同一方向重复查找

N 在相反方向重复查找

/pattern/+n 移至下一个pattern所在行后的第n行

?pattern?-n 移至上一个Pattern所在行前的第n行

/pattern/z- 重绘屏幕,使下一个包含pattern的行位于屏幕的最底行

% 移至与光标所在的括弧匹配成对的圆括弧或大括弧
【标记文本】

也可以将某段文本标记起来,方便以后跳转

mchar 用字母char标记当前光标的位置

`char 移至char所标记处

‘char 移至char标记所在行的开头处

” 移至当前行上一次所在位置(在光标移动之后)――一个双引号

” 移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
【缓冲区】

vi的缓冲区功能也是它的一大特色。它分为几个大类

1. 有名缓冲区

如果要把几个不同的文本同时保存在不同的缓冲区内以便放置,需要使用有名缓冲区。

有名缓冲区可以开辟出多达26个独立的存储区,用于存放删除或者取样操作的文本。它以双引号”后接小写字母命名,从”a到”z。在命令前添加缓冲区的名字可以将取样或者删除操作

的文本送入某缓冲区。下面是有关有名缓冲区的一些命令:

“azdw 删除后两个字,将他们放入缓冲区a

“jD 删除从光标至行尾的内容,并放入缓冲区j

“jp 在光标后放置缓冲区j的内容

“by) 从光标处至句尾的内容取样放到缓冲区b

“a2yy 取样两行到缓冲区a,删除缓冲区a中原有的内容

“Ad4w 删除光标后4个字,附加到缓冲区a

“Ay) 取样从光标到行尾的内容,并附加到缓冲区a

2. 删除缓冲区

另外,vi还有有编号的删除缓冲区。撤消命令只能恢复上一次的删除,当且仅当这个删除是最后一次操作。但是,vi可以把最近9次删除的内容都放入9个编号从1到9的缓冲区内。最

近一次删除保存在缓冲区1,次近的在缓冲区2,依此类推。例如,”2p可以放置第二个删除缓冲区中的内容。
【跟Unix Shell的结合】

作为Unix各种系统的标准配置,vi还提供了跟Shell的良好的接口。下面是一些常用命令:

:sh 运行shell直到用Ctrl-D命令退出为止

:! Cmd 执行Shell命令Cmd,然后回到vi。另外,这里的cmd可以使用某些特殊的扩展字符(vi中的定义),如#可扩展为备份文件名;%可扩展为当前文件名;!可扩展为前一个

shell命令

:!! 重复前一个shell命令

:o bject cmd 执行shell命令,用cmd的输入替换文本对象object。如果cmd接受标准输入,则必须用特定的文本对象

n !! cmd 执行shell命令cmd。用cmd的输入内容替换从当前行开始的n行文本。n的缺省值是1。如果cmd接收标准输入,则必须用特定的行
【EX功能汇总】
vi是类Unix操作系统中使用极为广泛的文本编辑器之一。无论是Unix、Solaris或Linux都默认提供这个工具。可以说只要熟悉了vi,在任何一种类Unix的操作系统平台上都可以自如地进行文本编辑。关于vi的基本用法的资料有很多,本文的目的不是重复这些基本的用法,而是想给初步掌握vi基本用法的人提供一些实用技巧,使之能更快捷、高效地利用vi编辑文件。
vi有命令模式和插入模式之分。vi启动后就处于命令模式。在命令模式下,可以随意移动光标、进行复制和粘贴文本等操作。利用“a”、“i”、“c”、“C”、“O”和“o”等命

令可以从命令模式切换到插入模式。在插入模式下,可以输入文本,按Esc键切换回命令模式。为了区别不同模式下的命令,本文在介绍时会注明是何种模式下的操作。
另外,本文的所有操作都是在Red Hat 9.0所带的vim中进行。本文介绍的各种技巧多数在各种vi版本中也都是可行的。

替换操作(经常用到的一些简单替换命令有:
◆ s 将当前字符替换为一个或多个字符,例如5 s 表示将从当前字符开始的5个字符替换为一个或多个字符;
◆ S 将当前行替换为一个或多个字符;
◆ r 单个字符替换。

文本格式转换
将DOS格式文本转成Unix格式文本,命令如下:
:1,$s/^M//g
其中^M是同时Ctrl+V+M按出来的,表示回车。

在行首尾添加字符串
用下列命令在文本每行的行首添加字符串“NewString”,请注意空格的存在。
:g/^/s//NewString/g
:%s/^/NewString/g

用下列命令在每行的行尾添加字符串“NewString”:
:g/$/s//NewString/g
:%s/$/NewString/g

 从文本的第3行至最后一行的行首全部插入字符串“NewString”:
:3,$s/^/NewString/

 

在整个文件中替换
在整个文件中替换特定字符串,所用的命令如下:
:%s/old_string/new_string/g
如果仅将文件中的第3行到第7行中的“old_string”替换成“new_string”,那么使用下列命令:
:3,7s/old_string/new_string/

注意,其中“s”为表示替换动作,“%”表示所有行,“g”表示全文,“^”表示行首,“$”表示行尾。

Categories: hp-ux, ibm aix, linux, OS & 小型机 Tags: ,

IBM相关学习资料集

March 7th, 2009 No comments

IBM的官方资料:
1)《AIX管理员快速入门》课程,非常好的一个中文入门教材,由IBM公司资深工程师讲解,提供PPT和视频讲解的下载。
2)
《AIX操作系统的备份与恢复》,同样由IBM公司资深工程师讲解,主要包含认识AIX上的磁带设备,选择适合的备份工具,备份操作系统数据,使用备份恢复操作系统,备份用户数据和恢复用户数据六个部分,同样可以下载Flash版本课程和演示文档。
3)《HACMP5.X 概念、规划和实施》一个非常好的介绍HACMP的中文教程,讲解了HACMP的基本概念、工作原理、安装和配置过程以及接管测试方法等内容,也提供Flash版本课程和演示文档的下载。
4)IBM中国技术支持网站-网络课堂,在这里你可以找到更多关于IBM产品、技术、方案等等方面的介绍、课程和手册等资料。
5)《监视磁盘空间和使用情况》,这篇文章着重介绍监视磁盘空间、发现究竟是哪些文件、用户或应用程序占用了大部分的空间、以及如何使用配额和其他解决方案查找需要的信息的方法。
6)AIX 中Paging Space 使用率过高的分析与解决,这篇文章对 Paging Space 使用率过高的常见原因进行了分析,并给出了相应的解决方案。
7)IBM developerWorks 中国: AIX and UNIX 技术资源,在这里你可以找到各种各样有用的文章和教程,可以找到提供的下载工具和CD,还有丰富的学习资源以及各个专题的社区。

8)System p 服务器技术支持服务
9)High Availability Cluster Multi-Processing for AIX-HACMP文档
10)IBM System p 和 AIX 信息中心
11)IBM eserver pSeries 和 AIX 信息中心
12)IBM技术支持服务指南
13)AIX的用户安全策略
14)两篇介绍如何配置使用NTP服务的文章:
如何统一局域网中服务器的系统时间
在AIX中使用NTP服务
15)AIX 性能调优-性能调优技术读物及免费工具下载

AIX相关下载链接:
1)Fix Central-下载补丁
2)Microcode downloads-下载微码
3)AIX Toolbox for Linux Applications

AIX的参考书籍:
1)《IBM UNIX&Linux-AIX 5L 系统管理技术》-于宁斌,电子工业出版社,2005年5月
2)《Unix Shell 编程》-中国铁道出版社,2004年4月
3)《sed 与 awk》-O’REILLY,机械工业出版社,2003年6月

认证考试相关信息:
1)认证介绍-Test 222: pSeries Administration and Support for AIX 5L V5.3
2)考试报名-Thomson Prometric
3)考试报名-Pearson VUE

Categories: ibm aix, OS & 小型机 Tags: , ,

AIX查看资源使用情况命令

March 7th, 2009 No comments

y200861112240

Categories: ibm aix, OS & 小型机 Tags: , , ,

IBM小型机巡检基本知识

March 7th, 2009 No comments

一、检查机房温度和湿度
参考值:温度(摄氏 ℃)        10 ℃-40℃
          湿度                   8% -80%

二、检查电源的检测
参考值:零-地电压        小于1V
          火-地电压        200-240V
补充:当然59系列的机器相间380V,相地240V。

三:查看报错信息
主要查看硬件的永久性报错   #errpt -dH | pg
软件的永久性报错   #errpt -dS | pg
系统报警灯

四、机器的序列号
# uname -Mu
IBM,9131-52A IBM,030666C5G

五、操作系统版本:#oslevel -r     
# oslevel -r
5300-05
注:有时候不能使用是因为系统版本低的原因。

六、其他检测

1、执行sysdumpdev –l检查dump是否设置为always allow sysdump;
# sysdumpdev -l
primary              /dev/hd6
secondary            /dev/sysdumpnull
copy directory       /var/adm/ras
forced copy flag     TRUE
always allow dump    FALSE
dump compression     ON

2、执行sysdumpdev –e检查当前dump大小应该为主dump设备的大小的80%以下;
# sysdumpdev -e
0453-041 Estimated dump size in bytes: 170498457

3、执行lsvg -l rootvg检查有否”stale”状态的逻辑卷;
# 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     2     4     2    open/syncd    N/A
hd8                 jfs2log    1     2     2    open/syncd    N/A
hd4                 jfs2       40    80    2    open/syncd    /
hd2                 jfs2       8     16    2    open/syncd    /usr
hd9var              jfs2       1     2     2    open/syncd    /var
hd3                 jfs2       8     16    2    open/syncd    /tmp
hd1                 jfs2       40    80    2    open/syncd    /home
hd10opt             jfs2       1     2     2    open/syncd    /opt
fwdump              jfs2       1     2     2    open/syncd    /var/adm/ras/platform

4、执行lsps -s检查内存交换区占用情况;
# lsps -s
Total Paging Space   Percent Used
      512MB               1%

# lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg         512MB     1   yes   yes    lv

5、执行df -m检查文件系统的分配状况,一般不要超过80%;
# df -m
Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4       10240.00   6614.88   36%    18551     2% /
/dev/hd2        2048.00    667.25   68%    37425    20% /usr
/dev/hd9var      256.00    246.13    4%      477     1% /var
/dev/hd3        2048.00   1212.24   41%     2864     2% /tmp
/dev/fwdump      256.00    255.64    1%        4     1% /var/adm/ras/platform
/dev/hd1       10240.00   7713.15   25%     2526     1% /home
/proc                 -         -    -         -     -  /proc
/dev/hd10opt     256.00    205.61   20%      976     3% /opt

6、执行lsdev –Cc disk检查硬盘状态为available;
# lsdev -Cc disk
hdisk0 Available 04-08-00-8,0 16 Bit LVD SCSI Disk Drive
hdisk1 Available 04-08-00-5,0 16 Bit LVD SCSI Disk Drive

7、执行lsdev –Cc adapter检查PCI卡状态为available;
# lsdev -Cc adapter
ent0      Available 09-08 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)
ent1      Available 09-09 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)
ide0      Available 03-08 ATA/IDE Controller Device
lai0      Available 0C-00 GXT135P Graphics Adapter
sisscsia0 Available 04-08 PCI-X Dual Channel Ultra320 SCSI Adapter
usbhc0    Available 08-08 USB Host Controller (33103500)
usbhc1    Available 08-09 USB Host Controller (33103500)
vsa0      Available       LPAR Virtual Serial Adapter
vsa1      Available       LPAR Virtual Serial Adapter

8、执行lsdev –Cc tape检查磁带机状态为available;
# lsdev -Cc tape
rmt0 Available 04-08-00-0,0 LVD SCSI 4mm Tape Drive

9、执行lsdev – Cc processor检查CPU状态为available;
# lsdev -Cc processor
proc0 Available 00-00 Processor
proc2 Available 00-02 Processor

10、执行lsattr –El sys0|grep autorestart检查系统crash后是否自动重新启动;
# lsattr -El sys0 |grep autorestart
autorestart     true               Automatically REBOOT system after a crash         True

# chdev -l sys0 -a autorestart=false修改autorestart值为False;

11、执行lsattr –El sys0|grep cpuguard检查CPU GUARD是否开启;
# lsattr -El sys0 |grep cpuguard
cpuguard        enable             CPU Guard                                         True

# chdev -l sys0 -a cpuguard=false修改cpuguard值为False;

12、执行lsattr –El mem0检查内存状态,正常状态size=goodsize;
# lsattr -El mem0
goodsize 3920 Amount of usable physical memory in Mbytes False
size     3920 Total amount of physical memory in Mbytes  False

13、执行 vmstat、iostat、topas观察us,sy,pi,po,内存占用率,硬盘读写速度等检查是否有性能瓶颈;
a) CPU性能:使用vmstat, topas来检查;
b) 内存使用情况:也是使用topas,vmstat来检查;
c) 检查IO平衡使用情况:使用iostat来检查;
d) 交换空间使用情况:使用lsps –a来检查;

# vmstat
System configuration: lcpu=4 mem=3920MB

kthr    memory              page              faults        cpu   
—– ———– ———————— ———— ———–
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  1 147268 831951   0   0   0   0    0   0   2 1350  67  0  0 99  0

# topas
Topas Monitor for host:    IBMSim               EVENTS/QUEUES    FILE/TTY
Mon Feb 25 16:21:13 2008   Interval:  2         Cswitch      66  Readch        6
                                                Syscall    1375  Writech     176
Kernel    0.1   |#                           |  Reads         0  Rawin         0
User      0.1   |#                           |  Writes        0  Ttyout      176
Wait      0.0   |                            |  Forks         0  Igets         0
Idle     99.8   |############################|  Execs         0  Namei         0
                                                Runqueue    0.0  Dirblk        0
Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out  Waitqueue   0.0
en1       0.2      0.5     0.5     0.0     0.2
en0       0.0      0.0     0.0     0.0     0.0  PAGING           MEMORY
lo0       0.0      0.0     0.0     0.0     0.0  Faults        0  Real,MB    3920
                                                Steals        0  % Comp     15.9
Disk    Busy%     KBPS     TPS KB-Read KB-Writ  PgspIn        0  % Noncomp   2.1
hdisk0    0.0      0.0     0.0     0.0     0.0  PgspOut       0  % Client    2.1
hdisk1    0.0      0.0     0.0     0.0     0.0  PageIn        0
cd0       0.0      0.0     0.0     0.0     0.0  PageOut       0  PAGING SPACE
                                                Sios          0  Size,MB     512
Name            PID  CPU%  PgSp Owner                            % Used      1.1
dtgreet       94318   0.1   1.3 root            NFS (calls/sec)  % Free     98.8
topas        323676   0.0   1.0 root            ServerV2       0
gil           69666   0.0   0.9 root            ClientV2       0   Press:
X            131180   0.0   3.6 root            ServerV3       0   “h” for help
rpc.lock     303278   0.0   1.2 root            ClientV3       0   “q” to quit
sendmail     233586   0.0   0.9 root
netm          65568   0.0   0.4 root
xmwlm        188642   0.0   0.8 root
syncd        127070   0.0   0.5 root
xmgc          49176   0.0   0.4 root
IBM.CSMA     307368   0.0   1.9 root
psmd          24588   0.0   0.5 root
wlmsched      73764   0.0   0.5 root
j2pg          82000   0.0   2.0 root
usbCfgDe      86080   0.0   0.4 root
dtlogin       90238   0.0   0.4 root
vmptacrt      20490   0.0   0.4 root
aioserve      98496   0.0   0.4 root
lvmbb        102476   0.0   0.4 root
dog          106622   0.0   0.9 root

# iostat
System configuration: lcpu=4 drives=3 paths=2 vdisks=0
tty:      tin         tout    avg-cpu: % user % sys % idle % iowait
          0.0          2.5                0.1   0.1   99.8      0.0

Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk0           0.1       0.9       0.2      87764    153601
hdisk1           0.1       0.6       0.1       8694    153601
cd0              0.0       0.0       0.0          0         0

# lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
hd6             hdisk0            rootvg         512MB     1   yes   yes    lv

14、执行ifconfig -a查看网卡是否启动(UP);
# ifconfig -a
en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN>
        inet 192.168.3.1 netmask 0xffffff00 broadcast 192.168.3.255
         tcp_sendspace 131072 tcp_recvspace 65536
en1: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN>
        inet 192.168.7.8 netmask 0xff37ff00 broadcast 192.232.7.255
         tcp_sendspace 131072 tcp_recvspace 65536
lo0: flags=e08084b<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT>
        inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
        inet6 ::1/0
         tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

#ifconfig en0 up/down修改网卡状态;

15、执行netstat -in和netstat -rn观察网络状态;
# netstat -rn
Routing tables
Destination      Gateway           Flags   Refs     Use  If   Exp  Groups

Route Tree for Protocol Family 2 (Internet):
default          192.168.7.253     UG        1      6141 en1      -      -  
127/8            127.0.0.1         U         5       339 lo0      -      -  
192.32.7.0       192.168.7.8       UHSb      0         0 en1      -      -   =>
192.32.7         192.168.7.8       U         2     20955 en1      -      -  
192.168.3.0      192.168.3.1       UHSb      0         0 en0      -      -   =>
192.168.3/24     192.168.3.1       U         0         2 en0      -      -  
192.168.3.1      127.0.0.1         UGHS      7       313 lo0      -      -  
192.168.3.255    192.168.3.1       UHSb      0         4 en0      -      -  
192.168.7.8      127.0.0.1         UGHS      0         1 lo0      -      -  
192.232.7.255    192.168.7.8       UHSb      0         4 en1      -      -  

Route Tree for Protocol Family 24 (Internet v6):
::1              ::1               UH        0         0 lo0      -      -  

# netstat -in
Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll
en0   1500  link#2      0.14.5e.97.1.14        215     0      561     3     0
en0   1500  192.168.3   192.168.3.1            215     0      561     3     0
en1   1500  link#3      0.14.5e.97.1.15      37254     0    27106     7     0
en1   1500  192.32.7    192.168.7.8          37254     0    27106     7     0
lo0   16896 link#1                             655     0      661     0     0
lo0   16896 127         127.0.0.1              655     0      661     0     0
lo0   16896 ::1                                655     0      661     0     0

16、执行entstat -d enX检测网卡运行速率与交换机速率是否匹配(网卡速率由10M半工改为自适应时,缺省网关会丢失。更改网卡速率后需要在系统中执行smitty route操作重新激活缺省路由。如果进行网卡速率的调整,请务必小心);
# entstat -d en0
————————————————————-
ETHERNET STATISTICS (en0) :
Device Type: 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)
Hardware Address: 00:14:5e:97:01:14

17、执行ping命令检查网络连接状况;

18、执行lsdev -C|grep aio检查异步IO是否可用;
# lsdev -C |grep aio
aio0       Available               Asynchronous I/O (Legacy)
posix_aio0 Defined                 Posix Asynchronous I/O

19、执行lssrc -g cluster查看是否有三个进程均为active状态;
# lssrc -g cluster

20、执行/usr/sbin/cluster/clstat –a查看cluster状态是否正常;

21、检查/etc/hosts,确保双机配置中IP别名不会存在包含关系(share_ip1包含了share_ip);

22、执行more /usr/es/adm/cluster.log、more /usr/es/sbin/cluster/history/*、cat /tmp/hacmp.out检查这三个日志中是否有error或者fail;

23、检查7133面板上的指示灯,如果黄灯亮则需要诊断问题;

24、HOTspare 磁盘检测
(1)、检查是否有raid保护 # smitty ssaraid—>List All Defined SSA RAID Arrays
(2)、检查是否有Hot Spare # smitty ssaraid—>List Components in a Hot Spare Pool
对于7133,执行Smitty ssaraid List All Defined SSA RAID Arrays查看7133 raid状态,正常应该为good状态。
对于7133,执行Smitty ssaraidChange/Show Use of an SSA Physical Disk查看7133硬盘状态,正常应该为member或者spare状态
对于FastT,分别登录上两个controller,查看是否有错误日志。

Categories: 巡检, OS & 小型机 Tags: , ,

AIX系统性能管理之Oracle案例分析

March 6th, 2009 No comments

   在这个案例中,主要重点就io这一块作分析。对于其他的,在这里就不作讨论。

      应用环境:

      两台P570作HA(Rotating方式),AIX 5.3 安装oracle 9206,磁阵DS4300,14块盘,6块作raid10为hdisk4,另外8块盘作raid10为hdisk5

      两台P630作HA(Rotating方式),AIX 5.1 安装oracle 9206,磁阵7133

      两个数据库各分担一定的功能。P570压力比较大。

      性能问题:

      最近,P570数据库上的数据库性能急剧下降,报表统计跑将近24个小时才能完成,严重影响白天正常的业务,给主机带来比较大的性能负担。

      检查过程(主要在P570上操作):

      1、使用topas查看一下操作系统的load情况。结果没想到topas无法运行了,得到的结果如下,根本无法刷新数据。

    Topas Monitor for host:    jsdxh_db01           EVENTS/QUEUES    FILE/TTY
    Thu Oct 25 13:58:32 2007   Interval:  2         Cswitch          Readch
                                                    Syscall          Writech
    Kernel          |                            |  Reads            Rawin
    User            |                            |  Writes           Ttyout
    Wait            |                            |  Forks            Igets
    Idle            |                            |  Execs            Namei
                                                    Runqueue         Dirblk
    Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out  Waitqueue
                                                    PAGING           MEMORY
                                                    Faults           Real,MB
                                                    Steals           % Comp
    Disk    Busy%     KBPS     TPS KB-Read KB-Writ  PgspIn           % Noncomp
                                                    PgspOut          % Client
                                                    PageIn
                                                    PageOut          PAGING SPACE
                                                    Sios             Size,MB
                                                                     % Used
                                                    NFS (calls/sec)  % Free
                                                    ServerV2
                                                    ClientV2           Press:
                                                    ServerV3           “h” for help
                                                    ClientV3           “q” to quit
    2、安装nmon_aix53(操作系统为5.3),结果nmon_aix53运行也报错。

    #./nmon_aix53
    ERROR: Assert Failure in file=”nmon11.c” in function=”main” at line=3239
    ERROR: Reason=NULL pointer
    ERROR: Expression=[[q->procs = MALLOC(sizeof(struct procentry64 ) * n )]]
    ERROR: errno=12
    ERROR: errno means : Not enough space
    3、检查进程情况

      #ps -ef | wc -l
      9947
      竟然总共已经产生了9000多个进程。在这众多的进程中可以发现有很多的defunct进程。

    #ps -ef |grep defunct | wc -l
    9331
    ##ps -ef | grep defunct | more
        root   159952        1   0                  0:00 <defunct>
        root   172052        1   0                  0:00 <defunct>
        root   225294        1   1                  0:00 <defunct>
        root   262236        1   0                  0:00 <defunct>
        root   290902        1   0                  0:00 <defunct>
      在网上随便查一下defunct,就可以知道,这是孤儿进程。已经找不到父进程,所以把init(PID 1)作为他的父进程。上面的结果中就是PPID=1。孤儿进程无法用kill -9 来清除,即使是root用户也不行,只能重启。这些孤儿进程一般情况下都是由于不当的fork ()/execve()造成的。

      继续检查系统,不知道这么多的孤儿进程是哪个产生的。看一下主机系统的报错情况。

    #errpt |more
    IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
    A63BEB70   1025140007 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED
    A63BEB70   1025133007 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED
    A63BEB70   1025130007 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED
    A63BEB70   1025123007 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED
    A63BEB70   1025120007 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED
      在这里,可以看到频繁的这个报错。基本每隔半个小时报错一次。再检查详细的错误。可以定位到原来是由于一个网管监控软件造成的这个错误。基本也可以判断,由于整个软件的不当的fork调用,导致了数量惊人的孤儿进程。

      现在孤儿进程的问题基本确定了,但是这个孤儿进程到目前为止,对系统造成的影响有多大?网上搜了一把,孤儿进程一般不占用内存,不占用空间,只不过是在进程列表中占了一个位置,所以并不会对系统性能产生太严重的影响。当然,如果任期发展,有可能就会使主机hang住。在这里,网管系统是以root用户运行的,进程数的限制非常大。所以,这里孤儿进程应该只是一个安全隐患,并不是对当前性能造成影响的原因。

    4、检查cpu的使用情况,

    #vmstat 1 10
    System configuration: lcpu=16 mem=23552MB
    kthr    memory              page              faults        cpu
    —– ———– ———————— ———— ———–
     r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
     4  0 3533226 2251446   0   0   0   0    0   0 3167 323907 7321 22  9 32 37
     1  0 3533229 2251443   0   0   0   0    0   0 1863 313913 4784 18  8 40 34
     2  0 3533229 2251443   0   0   0   0    0   0 3004 319720 6939 19  9 35 38

      Cpu的使用率基本在65%左右,wa基本在35%到40%,io等待比较严重。

#iostat 1 2
    System configuration: lcpu=16 drives=11 paths=4 vdisks=0
    tty:      tin         tout    avg-cpu: % user % sys % idle % iowait
              0.0         60.0               26.6   9.6   38.4     25.4
    Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
    hdisk1          37.0     350.0      70.0          0       350
    hdisk0          31.0     354.0      70.0          0       354
    hdisk2           0.0       0.0       0.0          0         0
    hdisk3           0.0       0.0       0.0          0         0
    dac0             0.0     9780.0     1199.0       2000      7780
    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
    hdisk4          49.0     3141.0     389.0        520      2621
    hdisk5          99.0     6639.0     810.0       1480      5159
    cd0              0.0       0.0       0.0          0         0
    tty:      tin         tout    avg-cpu: % user % sys % idle % iowait
              0.0        902.0               30.2   8.4   38.9     22.5
    Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
    hdisk1           0.0       0.0       0.0          0         0
    hdisk0           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
    dac0             0.0     13080.0     1497.0       1616     11464
    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
    hdisk4          63.0     3866.0     405.0        296      3570
    hdisk5         100.0     9214.0     1092.0       1320      7894
    cd0              0.0       0.0       0.0          0         0

      在上面的两份报告中,可以发现,系统对磁盘的负载不均。Hdisk5基本上长期维持在100%,而hdisk4则基本上维持在50%左右。再检查这两个hdisk的详细情况:

    #lspv hdisk5
    PHYSICAL VOLUME:    hdisk5                   VOLUME GROUP:     oravg
    PV IDENTIFIER:      00c2c1eb0bcfbdd4 VG IDENTIFIER     00c2c1eb00004c0000000110153a551d
    PV STATE:           active
    STALE PARTITIONS:   0                        ALLOCATABLE:      yes
    PP SIZE:            64 megabyte(s)           LOGICAL VOLUMES:  120
    TOTAL PPs:          8718 (557952 megabytes)  VG DESCRIPTORS:   1
    FREE PPs:           1206 (77184 megabytes)   HOT SPARE:        no
    USED PPs:           7512 (480768 megabytes)  MAX REQUEST:      1 megabyte
    FREE DISTRIBUTION:  00..00..00..00..1206
    USED DISTRIBUTION:  1744..1744..1743..1743..538
    #lspv hdisk4
    PHYSICAL VOLUME:    hdisk4                   VOLUME GROUP:     oravg
    PV IDENTIFIER:      00c2c1eb0bcfb8b3 VG IDENTIFIER     00c2c1eb00004c0000000110153a551d
    PV STATE:           active
    STALE PARTITIONS:   0                        ALLOCATABLE:      yes
    PP SIZE:            64 megabyte(s)           LOGICAL VOLUMES:  128
    TOTAL PPs:          6538 (418432 megabytes)  VG DESCRIPTORS:   2
    FREE PPs:           100 (6400 megabytes)     HOT SPARE:        no
    USED PPs:           6438 (412032 megabytes)  MAX REQUEST:      1 megabyte
    FREE DISTRIBUTION:  00..00..00..00..100
    USED DISTRIBUTION:  1308..1308..1307..1307..1208

    6、检查一下内存,

    #lsps -a
    Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type
    paging00        hdisk2            rootvg       12288MB     1   yes   yes    lv
    hd6             hdisk0            rootvg       12288MB     1   yes   yes    lv
    #svmon -G -i 1 5
                   size      inuse       free        pin    virtual
    memory      6029312    3780159    2249153     446200    3535574
    pg space    6291456      17540
                   work       pers       clnt
    pin          445938        262          0
    in use      3535574     244585          0
                   size      inuse       free        pin    virtual
    memory      6029312    3780168    2249144     446205    3535578
    pg space    6291456      17540

      这台机器内存比较大,24G物理内存,从这里看,free的空间也挺多,交换区也基本没怎么使用,在这里内存肯定不会造成问题。

    查看一下参数设置情况:

    #vmo -a | grep perm
                   maxperm = 4587812
                  maxperm% = 80
                   minperm = 1146952
                  minperm% = 20
    #vmo -a | grep client
                maxclient% = 80
      这里,两套系统都使用的是裸设备,这几个参数完全没必要设这么高,这会造成系统的内存争用。P570内存比较大,这种情况还没多大影响,但是在P630上,就可以看到已经比较危险了。下面是nmon输出的一个内存统计结果,可以看到物理内存已经被消耗殆尽,交换也已经使用了62.6%的空间了。但实际上这个数据库是比较空闲的,cpu使用率不超过10%,io的量基本为0,内存的消耗实际上就是被maxperm给吃了,被文件页面的缓存给占用了。这个系统就必需要调整maxperm和minperm的值,否则如果业务繁忙起来,将导致oracle操作系统的内存争用,影响性能。

     Memory
              Physical  PageSpace |        pages/sec  In     Out | FileSystemCache
    % Used       99.4%     62.6%  | to Paging Space   0.0    0.0 | Process & 13.3%
    % Free        0.6%     37.4%  | to File System    0.0   14.2 |  System   86.1%
    MB Used    8141.4MB  2563.9MB | Page Scans        0.0        |
    MB Free      50.6MB  1532.1MB | Page Cycles       0.0        | Free       0.6%
    Total(MB)  8191.9MB  4096.0MB | Page Steals       0.0        |           ——
                                  | Page Faults      18.9        | Total    100.0%
    ———————————————————— |
    Min/Maxperm     1540MB( 19%)  6162MB( 75%) <–% of RAM       |
    Min/Maxfree     120    128       Total Virtual   12.0GB      |
                                                                   Pinned     7.1%

   7、顺带再检查一下,网络基本没什么问题。

    #netstat -i
    Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll
    en7   1500  link#2      0.14.5e.c5.5d.2e  3133315897     0 2978410586     4     0
    en7   1500  10.33.102.9 jsdxh_db_svc      3133315897     0 2978410586     4     0
    en9   1500  link#3      0.14.5e.c5.64.b8  16814726     0  3897247     3     0
    en9   1500  192.168.0   jsdxh_db01_stby   16814726     0  3897247     3     0
    lo0   16896 link#1                        13949555     0 13969868     0     0
    lo0   16896 127         loopback          13949555     0 13969868     0     0
    lo0   16896 ::1                           13949555     0 13969868     0     0
      从上面对数据库主机的操作系统层面的情况检查来看,大致可以判断造成问题主要应该是在io上面。尤其是hdisk5,hdisk5的io负担过重,可以考虑与分担一部分的量到hdisk4上,以平衡磁盘io,减少io等待。下面对数据库部分的分析也主要在io这一块,其他方面在这里就不作分析了。

      下面对数据库部分的分析思路大致如下:找到读写最频繁读写的lv(有可能是表,索引或者其他的),分布其流量。

    下面再对数据库来作分析。

    1、检查了一下alert日志。

    $ tail -100 alert_ora92.log |more
    Thu Oct 25 17:43:29 2007
    Thread 1 advanced to log sequence 68444
      Current log# 3 seq# 68444 mem# 0: /dev/rlv_redo13
      Current log# 3 seq# 68444 mem# 1: /dev/rlv_redo16
    Thu Oct 25 17:47:26 2007
    Thread 1 advanced to log sequence 68445
      Current log# 4 seq# 68445 mem# 0: /dev/rlv_redo11
      Current log# 4 seq# 68445 mem# 1: /dev/rlv_redo14
    Thu Oct 25 17:51:16 2007
    Thread 1 advanced to log sequence 68446
      Current log# 5 seq# 68446 mem# 0: /dev/rlv_redo12
      Current log# 5 seq# 68446 mem# 1: /dev/rlv_redo15
      从日志中看,redo切换的频率相当高,基本上是4分钟不到,就会作一次日志的切换操作。Redo是3个组,每组2个member,每个member 500M。

    2、statspack

    Top 5 Timed Events
    ~~~~~~~~~~~~~~~~~~                                                     % Total
    Event                                               Waits    Time (s) Ela Time
    ——————————————– ———— ———– ——–
    log file sync                                     483,667      84,354    64.69
    db file sequential read                           469,344      35,231    27.02
    enqueue                                            82,536       5,747     4.41
    CPU time                                                        2,150     1.65
    db file parallel write                             11,919       1,245      .96

    从top 5事件看,

      日志的写入速度太慢。这需要对应用作调整,将频繁commit的改为批量提交。但是在这里我想可能更大的原因是磁盘io的原因。检查一下相关的日志文件,以及相关redo的lv情况:

    QL> /
        GROUP# STATUS  TYPE    MEMBER
    ———- ——- ——- ——————————
             3         ONLINE  /dev/rlv_redo13
             3         ONLINE  /dev/rlv_redo16
             4         ONLINE  /dev/rlv_redo11
             4         ONLINE  /dev/rlv_redo14
             5         ONLINE  /dev/rlv_redo12
             5         ONLINE  /dev/rlv_redo15
    SQL> !
    $ lslv -l lv_redo13
    lv_redo13:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk4            008:000:000   0%            000:000:000:000:008
    $ lslv -l lv_redo16
    lv_redo16:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk5            008:000:000   0%            000:000:008:000:000
    $ lslv -l lv_redo11
    lv_redo11:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk4            008:000:000   0%            008:000:000:000:000
    $ lslv -l lv_redo14
    lv_redo14:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk5            008:000:000   0%            008:000:000:000:000
    $ lslv -l lv_redo12
    lv_redo12:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk4            008:000:000   0%            000:000:000:000:008
    $ lslv -l lv_redo15
    lv_redo15:N/A
    PV                COPIES        IN BAND       DISTRIBUTION
    hdisk5            008:000:000   0%            008:000:000:000:000
      在这里,每个组中的两个member一个在hdisk4,一个在hdisk5,分布在磁盘的边缘。可以考虑改变一下内策略,将redo分布调整到磁盘的中间位置。因为本身是raid10的方式,或者干脆不要两个member,只使用其中的一个member,这个有可能带来其他的问题,如果非不得已,不考虑这种方法。

      另外一个等待事件,顺序读。这个事件一般是由于不当的选择索引或者表的连接。但在这里,我想可能并不是这个原因,而主要还是磁盘繁重的io造成的。看一下物理读排序的SQL语句:

    SQL ordered by Reads for DB: ORA92  Instance: ora92  Snaps: 47 -48
    -> End Disk Reads Threshold:      1000
                                                         CPU      Elapsd
     Physical Reads  Executions  Reads per Exec %Total Time (s)  Time (s) Hash Value
    ————— ———— ————– —— ——– ——— ———-
            170,449      206,955            0.8   33.1   279.55  20719.02 4053432766
    Module: Das.exe
    BEGIN  p_mc_sce_addsms(:p0,:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8); END
    ;
            142,856      233,890            0.6   27.8    74.05   9616.88 1594289970
    Module: Das.exe
    SELECT MAX(T.ACTIVE_FLAG), MAX(T.SECOND_NO) FROM T_MC_MCN_USERIN
    FO T WHERE T.USER_NO = :B1 AND T.PARTCOL_USERNO = SUBSTR(:B1 , -
    3, 2) AND ROWNUM <= 1

     我想,在这里我们对比cpu time和Elapsd time就可以发现,这里I/O等待的情况非常严重。当然,也可以进一步检查过程内语句的执行计划情况,看是否合理。在这里,还是来关注io的情况。

      在表空间的io统计中,比较繁忙的表空间是:

    ->ordered by IOs (Reads + Writes) desc
    Tablespace
    ——————————
                     Av      Av     Av                    Av        Buffer Av Buf
             Reads Reads/s Rd(ms) Blks/Rd       Writes Writes/s      Waits Wt(ms)
    ————– ——- —— ——- ———— ——– ———- ——
    TBS_MCN_HIS_IDX
           109,393      61   94.2     1.0      421,033      233      8,004    1.8
    TBS_MCN_LOG_IDX
           101,915      56   74.3     1.0      416,523      231     34,705    2.8
    TBS_MCN_MAIN_IDX
           110,871      61   43.9     1.0      200,902      111     15,797    1.4
    TBS_MCN_MAIN_DAT
           108,012      60   79.2     1.2       68,267       38      9,668    0.9
      在看file io之前,先看一下hdisk4和hdisk5的各自拥有的lv情况。

    #lspv -l hdisk4
    hdisk4:
    LV NAME               LPs   PPs   DISTRIBUTION          MOUNT POINT
    lv_data052            64    64    00..00..64..00..00    N/A
    lv_data009            64    64    00..64..00..00..00    N/A
    lv_data053            64    64    00..00..64..00..00    N/A
    …
    #lspv -l hdisk5
    hdisk5:
    LV NAME               LPs   PPs   DISTRIBUTION          MOUNT POINT
    lv_data143            64    64    00..00..64..00..00    N/A
    lv_data100            64    64    00..64..00..00..00    N/A
    lv_data244            64    64    00..00..00..00..64    N/A
    lv_data142            64    64    00..00..64..00..00    N/A
    lv_data099            64    64    00..64..00..00..00    N/A
      通过观察,可以分布的大致情况是,080以上的lv基本在hdisk5中,080以下lv基本都在hdisk4中。现在再对比一下file io的统计:

      根据file io的统计,去计算一下,在hdisk4和hdisk5中的物理读的数量差不多是

      Hdisk4:132,578

      Hdisk5:261,996

      Hdisk5的io量差不多就是hdisk4的两倍。这和前面iostat的统计的结果也基本差不多。

      下面几个是file io统计中最繁忙的几个lv。

    TBS_MCN_LOG_IDX          /dev/rlv_data096
            50,938      28   74.8     1.0      209,422      116     17,496    2.6
                             /dev/rlv_data097
            50,977      28   73.7     1.0      207,101      115     17,209    3.0
    TBS_MCN_MAIN_DAT         /dev/rlv_data009
            15,625       9   20.6     1.0          985        1          0
                             /dev/rlv_data010
            33,026      18   18.0     1.5       26,717       15      9,658    0.7
                             /dev/rlv_data091
            37,009      21  118.5     1.2       38,190       21          9  107.8
                             /dev/rlv_data092
            22,352      12  145.5     1.0        2,375        1          1   70.0

    TBS_MCN_MAIN_IDX         /dev/rlv_data018
            26,666      15   17.6     1.0       35,333       20      4,023    1.8
                             /dev/rlv_data019
            26,661      15   17.3     1.0       35,216       20      3,368    0.9
                             /dev/rlv_data020
            30,600      17   17.1     1.0       93,095       52      4,274    1.1
                             /dev/rlv_data093
            26,944      15  126.8     1.0       37,258       21      4,132    1.8
    再来统计一下,表的读写情况。

      通过上面的file io以及表的统计,再结合实际的业务情况,可以明确,这里最繁忙的是表空间TBS_MCN_LOG_DAT中的表T_MC_SMS_SMSNOTI以及其上位于表空间TBS_MCN_LOG_IDX中的索引。并且,这两部分全部集中再hdisk5上,所以后面的平衡io的优化操作就是将该表以及索引部分分布到hdisk4上。

Categories: 案例 Tags: , ,

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin