PMON是监控摄像头功率还是多功

aix系统性能管理及oracle案例分析
&&&&目录aix 5.3 主机性能评估 .................................................................................................................... 2 一、cpu 性能评估 ......................................&&&&............................................................................ 2 1、vmstat .......................................................................................................................... 2 2、sar ................................................................................................................................ 3 3、iostat ............................................................................................................................ 5 4、tprof ............................................................................................................................. 6 5、ps ................................................................................................................................. 8 6、解决 cpu 占用的惩罚机制 nice 和 renice ................................................................ 9 7、小结........................................................................................................................... 10 二、memory 性能评估 .......................................................................................................... 11 1、vmm 的管理简介 .................................................................................................... 11 2、使用 vmstat 确定内存的使用情况 .......................................................................... 14 3、svmon 命令 ............................................................................................................... 14 4、内存的调整............................................................................................................... 15 三、磁盘的 i/o 性能评估 ..................................................................................................... 17 1、iostat 查看 ................................................................................................................. 17 2、sar –d 查看 ................................................................................................................ 20 3、使用 lslv –l lvname 来评估逻辑卷的碎片情况 ...................................................... 22 4、lslv –p 评估物理布局 .............................................................................................. 23 5、使用 vmstat 命令评估调页空间的 i/o ................................................................. 23 6、使用 filemon 命令监控系统 i/o .............................................................................. 24 7、监视磁盘 i/o 的小结 ............................................................................................. 26 8、案例........................................................................................................................... 26 9、raid10 和 raid5 的比较 ...................................................................................... 28 四、network 性能评估 .................................................................................................... 31 1、ping 命令查看网络的连通性 ................................................................................... 31 2、netstat –i 检查网络的接口 ....................................................................................... 32 3、netstat –r 检查主机的路由情况 ............................................................................... 32 4、netpmon..................................................................................................................... 34 5、其他一些常用的命令 ............................................................................................... 36 五、补充:关于 topas 的使用说明 ...................................................................................... 36 六、主机日常检查脚本 ......................................................................................................... 39 aix 5.3 主机性能评估对于 aix 主机的性能评估,我们从下面的 4 个方面来逐一介绍:cpu、memory、i/o 系统和网络这 4 个方面来描述。一、cpu 性能评估首先, 我们还是先来看一下 cpu 的性能评估。 下面先主要介绍几个看 cpu 性能的命令。1、vmstat使用 vmstat 来进行性能评估,该命令可获得关于系统各种资源之间的相关性能的简要 信息。当然我们也主要用它来看 cpu 的一个负载情况。 下面是我们调用 vmstat 命令的一个输出结果: $vmstat 1 2 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 0 0
77 6 对上面的命令解释如下: kthr 段显示内容
r 列表示可运行的内核线程平均数目,包括正在运行的线程和等待 cpu 的线程。 如果这个数字大于 cpu 的数目,则表明有线程需要等待 cpu。
b 列表示处在非中断睡眠状态的进程数。包括正在等待文件系统 i/o 的线程,或由 于内存装入控制而被挂起的线程。 memory 段显示内容
avm 列表示活动虚拟内存的页面数,每页一般 4kb
fre 空闲的页面数,每页一般 4kb page 段显示内容
re –该列无效
pi 从磁盘交换到内存的交换页(调页空间)数量,4kb/页。调页空间是驻留在硬 盘上的虚拟内存的一部分。当内存使用过量时,会将溢出的工作组页面存储到调页 空间中(窃取页) 。当进程访问一个窃取页时,就产生了一个缺页故障,而这一页 页必须从调页空间中读入到内存中。
po 从内存交换到磁盘的交换页数量,4kb/页。如果窃取的工作也在调页空间中不 存在或者已经作了修改,则写入调页空间中。如果不被再次访问,它会留在调度空 间中直到进程终止或者放弃空间。
fr 根据页面替换算法每秒释放的页数。当 vmm 页面替换例程扫描页面帧表(page frame table,pft)时,它会根据一些条件选取需要窃取的页面以补充空闲列表。 该条件中包含工作页面和计算页面,释放的页面中,计算页面不产生 i/o,工作页 面如果数据没有发生修改,也不需要写回磁盘,也不会产生 i/o。
sr 根据页面替换算法每秒所检查的页数。sr 值比 fr 值高的越多,说明替换算法要 查找可以替换的页面就越困难。
cy 每秒页面替换代码扫描了 pft 多少次。因为增加空闲列表达到 maxfree 值,不 一定需要完全扫描 pft 表,而所有 vmstat 输出都为整数,所以通常 cy 列值为 0。 faults 段显示内容(其实这段内容不需太多关注)
in 在该时间间隔中观测到的每秒设备中断数。
sy 在该时间间隔中观测到的每秒系统调用次数。
cs 在该时间间隔中观测到的每秒钟上下文切换次数。 cpu 段显示内容
us 列显示了用户模式所消耗的 cpu 时间。
sy 列详细显示了 cpu 在系统模式所消耗的 cpu 时间。
id 列显示了没有未决本地磁盘 i/o 时 cpu 空闲或等待时间的百分比。
wa 列详细显示了有未决本地磁盘 i/o 时 cpu 空闲的时间百分比。wa 的值如果 超过 25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷 很重的结果。 如果在一个单用户系统中,us + sy 时间不超过 90%,我们就不认为系统的 cpu 是受限 制的。 如果在一个多用户系统中,us + sy 时间超过 80%, 我们就认为系统的 cpu 是受限的。 其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。 检查 cpu,我们主要关注报告中的 4 个 cpu 列和 2 个 kthr(内核线程)列。 在上面的示例中,我们可以观察到以下几个主要的信息: cpu idle 比较高,比较空闲;r 列为 0,表明线程不存在等待; wa 值不高,说明 i/o 压力不大; free 值比较大,pi,po 为 0,表明内存非常富裕。空闲较多。2、sar第二个常用的是 sar 命令,但是 sar 会增加系统的开销。当然有些情况下,我们使用 sar 比较方便。 sar 的输出结果与前面的基本类似,这里不再作详细的介绍,关于命令的语法,也不再 作详细的介绍,我们常用的命令格式: #sar 1 3 aix jsdxh_db02 3 5 00c2c1eb4c00 system configuration: lcpu=16 17:52:26 17:52:27 %usr 19 %sys 7 %wio 0 %idle 75 physc 8.00 10/24/07 17:52:28 17:52:29 average19 19 196 7 70 0 075 75 758.01 8.02 8.01在这里,sar 命令输出的是一个整体的 cpu 使用情况的一个统计,统计分项目的内容也 比较直观,通过名字就可以理解涵义。这里有一点比较方便的就是,在最后一行有一个汇总 的 average 行,作为上述统计的一个平均。另外,补充说明一点的就是,一般来说,第一行 统计信息包含了 sar 命令本身启动的 cpu 消耗,所以往往是偏高的,所以导致 average 值也 往往是偏高一点的。当然,这不会对结果产生多大影响。 当我们有多个 cpu 的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查 发现,cpu 总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一 个 cpu,导致这个 cpu100%占用,处理不过来,而其他的 cpu 却闲置。这时可以对 cpu 分开 查询,统计每个 cpu 的使用情况。 #sar -p all 1 2 aix jsdxh_db02 3 5 00c2c1eb4c00 system configuration: lcpu=16 18:03:30 cpu 18:03:31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18:03:32 0 1 2 3 4 5 %usr %sys %wio %idle physc 0 69 0 31 0.00 50 50 0 0 1.00 0 0 0 100 0.52 0 0 0 100 0.48 0 1 0 99 0.54 0 0 0 100 0.46 0 0 0 100 0.53 0 0 0 100 0.47 0 0 0 100 0.53 0 0 0 100 0.47 0 2 0 98 0.54 0 0 0 100 0.46 11 58 0 31 0.00 100 0 0 0 1.00 0 0 0 100 0.53 0 0 0 100 0.47 19 7 0 75 8.01 0 71 0 29 0.00 50 50 0 0 1.00 0 0 0 100 0.52 0 0 0 100 0.48 0 1 0 99 0.54 0 0 0 100 0.47 10/24/07 6 7 8 9 10 11 12 13 14 15 average 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -0 0 0 0 0 0 39 100 0 0 19 0 50 0 0 0 0 0 0 0 0 0 0 28 100 0 0 190 0 0 0 2 0 41 0 0 0 7 70 50 0 0 1 0 0 0 0 0 2 0 48 0 0 0 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0100 100 100 100 98 100 20 0 100 100 75 30 0 100 100 99 100 100 100 100 100 98 100 24 0 100 100 750.52 0.47 0.53 0.47 0.54 0.46 0.00 1.00 0.52 0.47 7.98 0.00 1.00 0.52 0.48 0.54 0.46 0.53 0.47 0.53 0.47 0.54 0.46 0.00 1.00 0.52 0.47 8.00上面是分 cpu 统计的情况,结果应该也比较直观吧。 sar 还有其他一些比较特殊的使用方法,比如: 如果希望多个采样和多个报告,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式 为: sar -a -o /temp/sar_result.log 5 300 & /dev/null & 关于 sar 其他的一些使用方法,这里不再详述。3、iostat第三个可以用来使用的命令是 iostat. $ iostat -t 2 4 tty: tin tout avg-cpu: % user % sys 0.0 0.0 0.0 0.1% idle % iowait 99.8 0.1 0.0 81.0 0.0 0.1 99.9 0.0 0.0 40.5 0.0 0.0 100.0 0.0 0.0 40.5 0.0 0.1 99.1 0.8 tty 的两列信息(tin 和 tou)显示了由所有 tty 设备读写的字符数 cpu 统计信息列(% user、% sys、% idle 和 % iowait)提供了 cpu 的使用情况。 注意:第一份报告为系统启动以来的一个累积值。4、tprof使用 tprof 命令用于统计每个进程的 cpu 使用情况 # tprof -x sleep 30 该命令的输出结果可查看 __prof.all 文件。 此命令运行 30 秒钟,在当前目录下创建一个名为_prof.all 的文件。30 秒钟内, cpu 被调度次数约为 3000 次。__prof.all 文件中的字段 total 为此进程调度到的 cpu 次数。如 果进程所对应的 total 字 段的值为 1500, 即表示该进程在 3000 次 cpu 调度中占用了 1500 次,或理解为使用了一半的 cpu 时间。tprof 的输出准确地显示出哪个进程在使用 cpu 时 间。 在我下面的这一份示例中,可以看到,大部分的 cpu 时间都是被 wait 所占用的。这里 的 wait 实际上是 idle 进程,可以表明这个系统是一个完全空闲的系统。 $ more __prof.all process pid tid total kernel user shared other ======= === === ===== ====== ==== ====== ===== wait
0 0 syncd 707 31 31 0 0 0 caiuxos
0 3 0 netm
1 1 0 0 0 hats_nim
0 1 0 snmpd64
0 0 0 rpc.lockd
0 0 0 tprof
0 1 0 trclogio
0 0 0 trace
0 1 0 clinfo
0 0 0 ======= === === ===== ====== ==== ====== ===== total
0 6 0process freq total kernel user shared other ======= === ===== ====== ==== ====== ===== wait syncd caiuxos netm hats_nim snmpd64 rpc.lockd tprof trclogio trace clinfo sh ======= total4
1 31 31 1 3 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 === ===== ====== 15 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 ==== ====== 0 60 0 0 0 0 0 0 0 0 0 0 0 ===== 0在这里,对 wait 进程作一点补充说明。 在 aix 5l 下,你用 ps aux 会发现有一些 root 的 wait 进程 #ps aux |head -20 user pid %cpu %mem sz rss tty stat stime time command oracle .7 0.0
-a 15:40:35 0:32 oracleora92 (loc root
0.0 40 40 -a jul 04 24793:53 wait root
0.0 40 40 -a jul 04 24633:59 wait root
0.0 40 40 -a jul 04 24600:21 wait root
0.0 40 40 -a jul 04 24397:54 wait root 286 3.1 0.0 40 40 -a jul 04 24371:55 wait root
0.0 40 40 -a jul 04 24312:40 wait root 822 3.0 0.0 40 40 -a jul 04 24303:36 wait root 554 3.0 0.0 40 40 -a jul 04 24261:50 wait root
0.0 40 40 -a jul 04 21502:46 wait root
0.0 40 40 -a jul 04 21439:31 wait root
0.0 40 40 -a jul 04 21423:47 wait root
0.0 40 40 -a jul 04 21398:24 wait root
0.0 40 40 -a jul 04 21357:07 wait root
0.0 40 40 -a jul 04 21324:26 wait root
0.0 40 40 -a jul 04 21293:06 wait root
0.0 40 40 -a jul 04 21195:47 wait oracle .3 0.0
-a jul 04 2663:08 ora_j000_ora92 oracle .3 0.0
-a jul 04 2220:57 ora_j001_ora92 wait 就是 cpu 空闲的时候运行的空闲进程,aix4 上叫 kproc。所以这个进程占用越大,表 示机器越空闲。wait 进程的数量是由机器上的逻辑 cpu 的个数决定的,有几个逻辑 cpu, 就有几个 wait 进程. 5、ps这个命令使用本身也比较复杂, 在这里只介绍如何查看 cpu 占用最高的进程。 使用举例 如下: #ps aux | head -25 user pid %cpu %mem sz rss tty stat stime time command root
0.0 40 40 -a jul 04 25578:42 wait root
0.0 40 40 -a jul 04 25415:54 wait root
0.0 40 40 -a jul 04 25377:03 wait root
0.0 40 40 -a jul 04 25170:12 wait root 286 3.1 0.0 40 40 -a jul 04 25144:00 wait root
0.0 40 40 -a jul 04 25082:32 wait root 822 3.0 0.0 40 40 -a jul 04 25072:25 wait root 554 3.0 0.0 40 40 -a jul 04 25034:14 wait root
0.0 40 40 -a jul 04 22181:27 wait root
0.0 40 40 -a jul 04 22118:00 wait root
0.0 40 40 -a jul 04 22102:02 wait root
0.0 40 40 -a jul 04 22077:18 wait root
0.0 40 40 -a jul 04 22036:44 wait root
0.0 40 40 -a jul 04 21998:53 wait root
0.0 40 40 -a jul 04 21967:17 wait root
0.0 40 40 -a jul 04 21865:51 wait oracle .3 0.0
-a jul 04 2707:30 ora_j000_ora92 oracle .3 0.0
-a jul 04 2266:20 ora_j001_ora92 oracle .2 0.0
-a jul 04 1765:58 ora_j002_ora92 oracle .2 0.0
-a jul 04 1426:40 ora_j003_ora92 oracle .1 0.0
-a jul 05 1159:17 ora_j004_ora92 oracle .1 0.0
-a jul 23 543:31 oracleora92 (loc oracle .1 0.0
-a jul 13 833:21 oracleora92 (loc oracle .1 0.0
-a jul 05 806:36 ora_j005_ora92 在这个输出结果中,排在前面的是 16 个 root 用户的 wait 进程,这其实是 cpu 空闲的 时候运行的空闲进程,之前已作说明。 所以 cpu 最高的几个进程其实是下面的 oracle 用户的 ora_j00*进程, 这是 oracle 的 job 进程。在这里,这些进程的开销很小。如果 oracle 的进程开销比较大,我们可以 用如下的方法来查询具体的进程在干什么事情,例如我们要查询进程 ora_j000_ora92, pid=344612,可以使用下面的方法: $su – oracle sql&sqlplus “/as sysdba” sql&oradebug setospid 344612 sql&oradebug event 10046 trace name context forever, level 8 sql&oradebug tracefile_name –这个命令我们获得输出文件的绝对路径和文件名 sql&oradebug event 10046 trace name context off $tkprof /opt/oracle/app/oracle/admin/ora92/bdump/ora92_j000_344612.trc tracepid.txt $more tracepid.txt 在 tracepid.txt 中,我们就可以看到这个进程中具体运行的语句、过程等,以及所有的 sql 的 cpu 消耗、物理读、逻辑读、执行计划等信息。 另外,我们也可以执行下面的语句查看进程具体运行的 sql 语句的文本: select /*+ ordered */ sql_text from v$sqltext a where (a.hash_value, a.address) in ( select decode (sql_hash_value,0, prev_hash_value,sql_hash_value), decode (sql_hash_value,0, prev_sql_addr, sql_address) from v$session b where b.paddr = (select addr from v$process c where c.spid = '&pid')) order by piece asc6、解决 cpu 占用的惩罚机制 nice 和 renice指定和修改命令的优先级。 系统中运行的每个进程都有一个优先级,我们可以用 ps 命令看到,这个优先级为 pri, pri 的值越小,优先级越高,能占用更多的 cpu 时间片。系统默认的 pri 为 60,我们可以 通过 nice 命令和 renice 命令来改变一个进程的优先级, 从而控制进程对 cpu 时间片的占用。 任何一个用户都可以使用 nice 命令来使他的进程以低于系统默认的 pri 运行。 但是只有 root 用户才可以使进程以高于默认的 pri 运行。 我们先来看一下 nice 命令的使用方法: #nice –n -5 vmstat 2 10 &vmstat.out # ps -el f s uid pid ppid c pri ni addr sz wchan tty time cmd 200001 a 0
15 aeee30 pts/1 0:00 vmstat 指定程序以 nice 值-5 开始运行。程序开始后,nice 的值为 15,pri 的值为 55。 nice 命令可以指定的范围为-20 (最高优先级)到 20 (最低优先级)。在 aix5.3 中,默认 的 nice 为 20。 # vmstat 2 10 &vmstat.out # ps -el f s uid pid ppid c pri ni addr sz wchan tty time cmd 200001 a 0
20 32ece30 pts/1 0:00 vmstat64 可以看到默认的情况下,系统使用的 nice=20,pri=60 。 实际上,在使用 nice 指定的时候,我们也可以使用超出闭区间[-20,20]的值,比如: nice –n -33 vmstat 2 10 &vmstat.out # ps -el f s uidpidppidc pri ni addrszwchantty time cmd200001 a 0
0 82efe30 pts/1 0:00 vmstat64 上例中,我们指定的 nice 小于-20,得到最高的优先级(pri=40) 。反之,如果我们指定 nice 的值超过 20,比如 nice=21,我们将得到最低的优先级值 pri=100。 renice 不能在具有固定优先级的进程上使用。 root 用户可以在一个或多个运行进程的 非 nice 值上加一个指定的值,但不能从中减去指定的值。也就是只能降低进程的优先级,而不 能增加优先级。 renice -n -10 pidnumber ,将指定的进程 nice 值减小 10。 renice -n +5 pidnumber ,将指定的进程 nice 值增加 5。 根据 nice 值的不同取值,这里 renice 的值可以取值的范围是闭区间[-40,40 ]。为什么取 值范围是这个呢我们可以这样来理解, 通过 ps –l 命令, 我们可以看到 ni 的取值范围是闭 区间[0,40],我们使用 renice 需要改变的也就是整个值,考虑两个极端的情况,假如现在为 0, 我们要把它改到 40, 就必须得 renice –n 40, 如果现在是 40, 我们要把它改为 0, renice 则 的值就得是-40 了。 当然,跟 nice 一样,在这里 renice 的值在命中使用的时候也可以超出这个闭区间,不 会报错,但有效的结果只落在这个闭区间内。 # ps l 1630282 fsuid pid ppid c pri ni addr sz rss wchan tty time cmd 200001 a 0 062 0 100 40 413e event pts/1 0:00 v # renice -n -30 1630282 # ps l 1630282 fsuid pid ppid c pri ni addr sz rss wchan tty time cmd 200001 a 0 062 0 50 10 413e event pts/1 0:00 v 我们可以总结一下,pri 值的取值公式大概如下: 优先级值(pri)= 基本优先级(60)+nice 损失 + 基于最近 cpu 使用情况的 cpu 损失 总的来说 nice 值越小,进程的优先级越高,能分配到更多的 cpu 时间片。反之,也成立。7、小结对于系统 cpu 的监控,建议: 1)使用 vmstat 进行分析 2)sar –p all 1 10 分析,多个 cpu 间的负载是否平衡 3)ps aux 查看 4)tprof 查看更详细的信息 二、memory 性能评估 1、vmm 的管理简介首先,还是简单讲解一下内存以及的 vmm 的一点工作原理。 内存和交换空间一般都是用页面来进行分配和管理的。在内存中存在两种类型的页面: 计算页面(一般为可执行文件段中的页面)和文件页面(存储的数据文件的页面) 。当我们 执行程序或者读入数据的时候,内存中的页面就逐渐被占用。当空闲的内存只剩 maxfree 的 时候,vmm 的调页就被唤醒,通过调页算法,将内存中的页面转移到交换空间中。一直到 空闲内存达到 maxfree,才停止调页。 在这里,我们涉及到两个参数: 1) minfree:最小空闲页链表尺寸。一旦低于该值,系统偷页以填充页链表,保证有足够 的内存页面。偷页就是将不常用的页面替换出去。 2) maxfree:最大空闲页链表尺寸。一旦高于该值,系统停止偷页。 如果发现空闲列表不足,可以用下面的方法增加 minfree 参数 #vmo -o minfree=1000 -o maxfree=1008 setting maxfree to 1008 setting minfree to 1000 #vmo –o minfree=1000 –o maxfree=1008 –p # -p 参数使修改永久生效 一般情况下,minfree 和 maxfree 通过下面的公式得到: maxfree=minmum(memory/128,128) ,minfree=maxfree-8 注意:在 aix 5.2 之前的版本请使用/usr/samples/kernel/vmtune 命令。 #/usr/samples/kernel/vmtune –f 1000 –f 1008 另外,关于内存的使用,我们还有两个经常碰到的参数需要关注: minperm:用户 i/o 文件访问的最小缓冲区页数 maxperm:用户 i/o 文件访问的最大缓冲区页数 minperm 和 maxperm 这两个参数的默认值分别为 20%和 80%。 在这里主要与性能相关 的是 maxperm 参数。maxperm 参数指定了文件页面可以占用内存的上限,因为文件页面不 主动释放,所以很容易造成内存的文件页面过高的占用,导致其他的应用内存使用紧张。调 整参数值的方法如下: #vmo -o maxperm%=80 -o minperm%=20 setting minperm% to 20 setting maxperm% to 80 在 aix 5.2 之前的版本请使用/usr/samples/kernel/vmtune 命令。 #/usr/samples/kernel/vmtune -p 20–p 80 将 min 和 max 的值分别设置为 20%和 80%。 查看当前的参数设置方法如下: 1)vmo –a 显示当前所有的参数设置 在 aix 5.2 之前的版本请使用 # /usr/samples/kernel/vmtune 显示当前所有的参数设置 #vmo -a cpu_scale_memp = 8 data_stagger_interval = 161 defps = 1 force_relalias_lite = 0 framesets = 2 htabscale = n/a kernel_heap_psize = 4096 large_page_heap_size = 0 lgpg_regions = 0 lgpg_size = 0 low_ps_handling = 1 lru_file_repage = 1 lru_poll_interval = 10 lrubucket = 131072 maxclient% = 80 maxfree = 1088 maxperm = 4587812 maxperm% = 80 maxpin = 4881650 maxpin% = 80 mbuf_heap_psize = 4096 memory_affinity = 1 memory_frames = 6029312 memplace_data = 2 memplace_mapped_file = 2 memplace_shm_anonymous = 2 memplace_shm_named = 2 memplace_stack = 2 memplace_text = 2 memplace_unmapped_file = 2 mempools = 4 minfree = 960 minperm = 1146952 minperm% = 20 nokilluid = 0 npskill = 49152 npsrpgmax = 393216 npsrpgmin = 294912 npsscrubmax = 393216 npsscrubmin = 294912 npswarn = 196608 num_spec_dataseg = 0 numpsblks = 6291456 page_steal_method = 0 pagecoloring = n/a pinnable_frames = 5601758 pta_balance_threshold = n/a relalias_percentage = 0 rpgclean = 0 rpgcontrol = 2 scrub = 0 scrubclean = 0 soft_min_lgpgs_vmpool = 0 spec_dataseg_int = 512 strict_maxclient = 1 strict_maxperm = 0 v_pinshm = 0 vm_modlist_threshold = -1 vmm_fork_policy = 1 vmm_mpsize_support = 1 2)vmstat -v # vmstat -v 6029312 memory pages 5734766 lruable pages 2801540 free pages 4 memory pools 406918 pinned pages 80.0 maxpin percentage 20.0 minperm percentage 80.0 maxperm percentage 2.3 numperm percentage 135417 file pages 0.0 compressed percentage 0 compressed pages 0.0 numclient percentage 80.0 maxclient percentage 0 client pages 0 remote pageouts scheduled 312417 pending disk i/os blocked with no pbuf 0 paging space i/os blocked with no psbuf 2878 filesystem i/os blocked with no fsbuf 0 client filesystem i/os blocked with no fsbuf 0 external pager filesystem i/os blocked with no fsbuf 显示 minperm 和 maxperm 和 numperm 的值。numperm 值给出的是内存中文件页数。 系统调页的规则: 1) 如果 numperm&maxperm,则只调出文件页面。 2) 如果 numperm&minperm,则同时调出文件页面和计算页面。 3) 如果 minperm&numperm&maxperm,则只调出文件页面,除非新调入的文件页面大 于计算页面的总和。 如果系统在向调页空间调出页面, 可能使因为内存中的文件页数低于 maxperm, 从而也 调出了部分的计算页面以达到 maxfree 的要求。 在这种情况下, 可以考虑把 maxperm 降低到 低于 numperm 的某个值,从而阻止计算页面的调出。在 5.2 ml4 以后的版本中,为了防止 计算页面被调出,可以采用另外一个方法,就是设置参数 lru_file_repage=0。将该参数设为 0,则告诉 vmm 在进行页面替换的时候,优先替换文件页面。 maxclient 通常应该设置为一个小于或者等于 maxperm 的值。 增强 jfs 文件系统为它的缓冲区高速缓存使用客户机文件, 这不受 maxperm 和 minperm 的影响。为了在限制增强 jfs 文件系统使用高速缓存,可以指定 maxclient 的值,避免在它 进行页面替换的时候,替换其他类型的页。2、使用 vmstat 确定内存的使用情况主要检查 vmstat 输出的 memory 和 pages 列和 faults 列。详细的说明见前一节 cpu 评估 说明。3、svmon 命令# svmon -g -i 2 2 memory pg space size 8576 work 960 size 8576 work 964 inuse
pers 246 41885 inuse
pers 246 41889 free 1860291 pin virtual 943clnt 0 0 free 1860283lpage 0 0 pin virtual 947pin in use memory pg spaceclnt 0 0lpage 0 0pin in usememory 段
size 物理内存总页数。4kb/页
inuse 物理内存中正在使用的内存页面数。包含活动进程和已经终止的进程的持久 文件页面。
free 空闲列表中的页面数量
pin 锁定在内存中的页面数量(锁定的意思就是不能被替换出去)
virtual pg space 段
pin 段&&&&inuse 段
size 调页空间总大小 inuse 已经分配页的总数,也就是已经使用的调页空间页数 work 物理内存中的工作页面数 pers 物理内存中的持久页面数 clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面) work 物理内存中的工作页面数 pers 物理内存中的持久页面数 clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)3、ps 命令显示当前运行的进程状态信息。 运行下列命令,显示内存占用前 10 位的进程。 # ps gv |sort +6b -nr |head -10 2490538 -a 191:56 0
0.1 0.0 ora_j00 2039970 -a 592:59 11
0.3 0.0 ora_j00 2588922 -a
0.6 0.0 ora_j0 2523168 -a 305:01 1
0.2 0.0 ora_j00 2474214 -a 0:01 0
0.1 0.0 ora_j00 2007282 -a 0:01 0
0.0 0.0 ora_j00 508120 -a 32:58 662
0.0 0.0 ora_dbw 1351908 -a 0:02 1
0.0 0.0 oracleo 3801250 -a 203:22 0
0.1 0.0 oracleo 3915976 -a 0:00 0
0.0 0.0 oracleo 如果是 oracle 的一些进程占用了过度的内存, 我们也可以通过前面类似的进程处理方法 来分析。4、内存的调整具体调整需要结合系统运行的应用程序对症下药,如调整 minperm/maxperm 将改变内 存与 paging space 之间的交换算法,调整 minpgahead/maxpgahead 将改变内存块请求机 制,调整 minfree/maxfree 将改变内存紧张时的内存清理刷新机制,等等。如果数据库使用 裸设备,并且没有太多其他的应用,因为裸设备不需要文件系统的缓存,所以可以降低 minperm,maxperm,maxclient 的默认值,降低操作系统对内存的不必要的占用。 案例: 计费数据库数据库响应变慢,内存 16g,裸设备,却存在很多的 pi,po 情况。 在检查与内存相关的系统参数,发现如下问题: minperm% = 20, maxperm% = 80, maxclient% = 80 说明:以上三个参数为系统缺省配置,其表示,使用文件系统时,最多可使用 80% * 16g=10.8g,用于缓存所访问的文件。 结论:由于以上参数采用系统缺省配置,文件系统缓存最大可以达到 10.8g,在执行大量 的文件 cp 操作后, 系统的可用内存量迅速下降, 在其后的计费过程中, 由于大量 page in/page out 操作引起系统严重性能瓶颈。 优化: 将 maxperm% = 30 ,maxclient% = 30 #vmo –o maxperm%=30 –p #vmo –o maxclient%=30 –p 5.2 以前版本 /usr/samples/kernel/vmtune –p 20 –p 30 /usr/samples/kernel/vmtune –t 30 三、磁盘的 i/o 性能评估对磁盘 io 的性能考虑: 1) 将频繁访问的文件系统和裸设备应尽可能放置在不同的磁盘上。 2) 在建立逻辑卷时尽可能使用 mklv 的命令开关给不同的文件系统和裸设备赋予不同的内 策略。 3) 使用磁盘设备驱动适配器的功能属性构建合适的 raid 方式,以获得更高的数据安全性 和存取性能。一般考虑采用 raid5 或者 raid10 方式,对于写要求比较高的系统,一般 建议采用 raid10 方式;关于 raid10 与 raid 5 的比较,可以见 piner 的文章,作为补 充我会在后面贴出。 4) 尽可能利用内存读写带宽远比直接磁盘 i/o 操作性能优越的特点,使频繁访问的文件或 数据置于内存中进行操作处理; 在这里,顺带提一下裸设备以及文件系统的对比。 裸设备的优点: 1) 由于旁路了文件系统缓冲器而进行直接读写, 从而具有更好的性能。 对硬盘的直接读写 就意味着取消了硬盘与文件系统的同步需求。这一点对于纯 oltp 系统非常有用,因为 在这种系统中, 读写的随机性非常大以至于一旦数据被读写之后, 它们在今后较长的一 段时间内不会得到再次使用。除了 oltp,raw 设备还能够从以下几个方面改善 dss 应 用程序的性能: 排序:对于 dss 环境中大量存在的排序需求,raw 设备所提供的直接写功能也非常有 用,因为对临时表空间的写动作速度更快。 序列化访问:raw 设备非常适合于序列化 i/o 动作。同样地,dss 中常见的序列化 i/o (表/索引的完全扫描)使得 raw 设备更加适用于这种应用程序。 2) 直接读写,不需要经过 os 级的缓存。节约了内存资源,在一定程度上避免了内存的争 用。 3) 避免了操作系统的 cache 预读功能,减少了 i/o。 4) 采用裸设备避免了文件系统的开销。比如维护 i-node,空闲块等。裸设备的缺点: 1、裸设备的空间大小管理不灵活。在放置裸设备的时候,需要预先规划好裸设备上的空间 使用。还应当保留一部分裸设备以应付突发情况。这也是对空间的浪费。 2、很多备份工具软件对裸设备的支持不足,导致备份等的操作和方法比较原始、麻烦。接下来,对于磁盘 i/o 的性能性能评估的方法。1、iostat 查看#iostat 1 3 system configuration: lcpu=16 drives=11 paths=4 vdisks=0 tty:tin 0.0tout avg-cpu: % user % sys % idle % iowait 59.7 30.4 17.0 25.6 27.1 % tm_act 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 74.7 99.6 0.0 kbps 4.0 4.0 0.0 0.0 .0 0.0 0.0 8.4 0.0 tps kb_read kb_wrtn 1.0 0 4 1.0 0 4 0.0 0 0 0.0 0 0 2
0 0 0.0 0 0 0.0 0 0 440.1 73.3 .0 0 0disks: hdisk1 hdisk0 hdisk2 hdisk3 dac0 dac0-utm dac1 dac1-utm hdisk4 hdisk5 cd0 tty: tin 0.0tout avg-cpu: % user % sys % idle % iowait 904.0 29.3 10.6 28.9 31.1 % tm_act 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 49.0 100.0 0.0 kbps 0.0 0.0 0.0 0.0 .0 0.0 0.0 6.0 0.0 tps 0.0 0.0 0.0 0.0 492.0 0.0 0.0 0.0 221.0 271.0 0.0 kb_read kb_wrtn 0 0 0 0 0 0 0 0
0 0 0 0 0 512 96 0 0disks: hdisk1 hdisk0 hdisk2 hdisk3 dac0 dac0-utm dac1 dac1-utm hdisk4 hdisk5 cd0 tty: tin 0.0tout avg-cpu: % user % sys % idle % iowait 898.2 41.6 8.9 21.2 28.3 % tm_act 0.0 0.0 0.0 0.0 0.0 0.0 0.0 kbps 0.0 0.0 0.0 0.0 .0 0.0 tps kb_read kb_wrtn 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 4
0 0 0.0 0 0disks: hdisk1 hdisk0 hdisk2 hdisk3 dac0 dac0-utm dac1 dac1-utm 0.0 0.0 0.0 0 0 hdisk4 67.8 .3 712 7221 hdisk5 99.7 4.5
cd0 0.0 0.0 0.0 0 0 注意:第一个报告代表自系统启动以来所有的活动。 下面对输出的结果说明如下:
tty tty 的两列信息(tin 和 tou)显示了由所有 tty 设备读写的字符数。
avg-cpu cpu 统计信息列(% user、% sys、% idle 和 % iowait)提供了 cpu 的使用 故障。如果 iostat 命令表明 cpu 受限的情况不存在,并且 % iowait 时间大于 20%, 则可能出现 i/o 或磁盘受限情况。这一情况可能在缺少实内存的情况下由过多调页产 生。也有可能是由于不平衡的磁盘负载、碎片数据或应用模式而产生。
% tm_act 指示物理磁盘活动所占总时间的百分比 (磁盘的带宽利用率) 或者换句话说, , 磁盘请求的总时间未达到。 驱动器在数据传送和处理命令时是活动的, 例如寻道至新的 位置。 “磁盘活动时间”百分比正比于资源争用,反比于性能。当磁盘使用率增加时, 性能就下降并且响应时间就增加。一般来说,当利用率超过 70% 时,进程将等待的时 间会比完成 i/o 所必需的时间更长,因为大多数 unix 进程在等待它们的 i/o 请求 完成时会阻塞(或休眠) 。查找相对空闲驱动器来说繁忙的驱动器。把数据从繁忙的驱 动器中移到空闲驱动器里可以帮助减轻磁盘的瓶颈。在磁盘中调入调出页面会使 i/o 负载增加。
kbps 指示了每秒钟多少 kb 的数据被传送(读或写) 。这是在系统报告时间间隔内 kb_read 加上 kb_wrtn 的总和并除以的这段时间间隔的总数的结果。
tps 指示了每秒钟物理磁盘传送的次数。一次传送是设备驱动程序级别到物理磁盘的 一次 i/o 处理请求。多重逻辑请求可以组合成单一的磁盘 i/o 请求。传送的大小是不 确定的。
kb_read 报告了在测量间隔中总的从物理卷中读取的数据量(以 kb 为单位) 。
kb_wrtn 显示了在测量间隔中总的写入物理卷中的数据量(以 kb 为单位) 。 我们也可以针对适配器作性能评估。想知道某个适配器是否饱和,使用 iostat 命令并 且把所有连接到这个适配器上的磁盘的 kbps 数量加起来。为了获得最大的聚集性能,总 的传送率 (kbps) 必须在磁盘适配器的吞吐量之下。 在大多数情况下, 使用 70% 的吞吐量, -a 或 -a 选项会显示这些信息。 #iostat -a 1 1 system configuration: lcpu=16 drives=11 paths=4 vdisks=0 tty: tin 0.0 tout avg-cpu: % user % sys % idle % iowait 59.8 20.8 7.8 34.9 36.5 kbps 0.0 % tm_act 0.0 0.0 tps 0.0 kbps 0.0 0.0 kb_read 0 tps 0.0 0.0 kb_wrtn 0 kb_wrtn 0 0adapter: sisscsia2 disks: hdisk1 hdisk0kb_read 0 0 adapter: sisscsia4 disks: hdisk2 hdisk3 adapter: fcs0 disks: dac0 hdisk4 hdisk5 adapter: vsa0 disks: dac0-utm dac1-utm adapter: fcs2 disks: dac1 adapter: ide0 disks: cd0kbps 0.0 % tm_act 0.0 0.0 kbps 12614.7 % tm_act 0.0 59.8 99.6tps 0.0 kbps 0.0 0.0kb_read 0 tps 0.0 0.0kb_wrtn 0 kb_wrtn 0 0kb_read 0 0tps kb_read kb_wrtn 0 10502 tps kb_read kb_wrtn 0
kb_read 0 tps 0.0 0.0 kb_wrtn 0 kb_wrtn 0 0kbps 5.0 8359.7 tps 0.0 kbps 0.0 0.0 tps 0.0 kbps 0.0 tps 0.0 kbps 0.0kbps 0.0 % tm_act 0.0 0.0 kbps 0.0 % tm_act 0.0 kbps 0.0 % tm_act 0.0kb_read 0 0kb_read 0 tps 0.0kb_wrtn 0 kb_wrtn 0kb_read 0kb_read 0 tps 0.0kb_wrtn 0 kb_wrtn 0kb_read 02、sar –d 查看#sar -d 1 2 aix jsdxh_db01 3 5 00c2c1bb4c00 system configuration: lcpu=16 drives=11 10/24/07 21:05:38 21:05:39device hdisk1 hdisk0 hdisk2 hdisk3 dac0 dac0-utm dac1 dac1-utm hdisk4 hdisk5 cd0%busy 0 0 0 0 0 0 0 0 80 100 0avque 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.6 0.0r+w/s 0 0 0 0
0 514 1536 0kbs/s 0 0 0 0
0avwait 0.0 0.0 0.0 0.0 20.1 0.0 0.0 0.0 1.2 26.4 0.0avserv 0.0 0.0 0.0 0.0 5.7 0.0 0.0 0.0 5.3 5.9 0.021:05:40hdisk1 hdisk0 hdisk2 hdisk3 dac0 dac0-utm dac1 dac1-utm hdisk4 hdisk5 cd00 0 0 0 0 0 0 0 84 100 00.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 3.2 0.00 0 0 0
0 270 830 00 0 0 0
0 0.0 0.0 0.0 0.0 34.0 0.0 0.0 0.0 7.7 42.6 0.00.0 0.0 0.0 0.0 11.8 0.0 0.0 0.0 14.2 11.0 0.0averagehdisk1 0 0.0 0 0 hdisk0 0 0.0 0 0 hdisk2 0 0.0 0 0 hdisk3 0 0.0 0 0 dac0 0 0.0
dac0-utm 0 0.0 0 0 dac1 0 0.0 0 0 dac1-utm 0 0.0 0 0 hdisk4 82 0.1 392 4450 hdisk5 100 2.9
cd0 0 0.0 0 0 输出结果说明:
device 设备的类型
%busy 报告设备忙于执行传输请求所用的时间
avque 该段时间内未完成的请求的平均值。
r+w/s 进车设备的读/写传送次数。0.0 0.0 0.0 0.0 27.1 0.0 0.0 0.0 4.5 34.5 0.00.0 0.0 0.0 0.0 8.7 0.0 0.0 0.0 9.7 8.4 0.0
blks/s 以 512 字节为单元的传送数 avwait 不执行,总是设置为 0.0 avserv 不执行,总是设置为 0.03、使用 lslv –l lvname 来评估逻辑卷的碎片情况# lslv -l hd2 hd2:/usr pv copies in band distribution hdisk0 114:000:000 22% 000:042:026:000:046 输出字段说明:
pv 物理卷名称
copies 三个字段分别代表 在物理卷上至少包含一个物理分区(没有副本)的逻辑分区的数量 在物理卷上至少包含两个物理分区(一个副本)的逻辑分区的数量 在物理卷上至少包含三个物理分区(两个副本)的逻辑分区的数量
in band center 分配策略占用的百分比。
distribution 分配在物理卷每个区域内:物理卷的外部边缘、外部中间、中间、中心 和内部边缘的物理分区的数目 对于该例中的结果说明如下: copies 显示逻辑卷 hd2 只复制了一份。in band 显示了内策略是如何遵循的。这个百 分比越高,分配效率就越好。在这个示例中,有总共 114 个逻辑分区(lp) ,42 个位于中部, 26 个位于中心, 还有 46 个位于内边缘。 band 占用 22% (42+26+46)。 in (26/ )distribution 显示物理分区的具体的内策略部署,格式如下: outer-edge : outer-middle : center : inner-middle : inner-edge 关于物理卷内分配策略说明: 指定物理卷上选择物理分区时使用何种策略。五种常用的策略时边缘、内层边缘、中部、内 层中部和中心。 鉴于磁盘的读取方式, 数据写入磁盘中心部分的寻道时间比写入外部边缘的 寻道时间短。 4、lslv –p 评估物理布局可以使用 lslv –p hdiskn 来查看在物理磁盘上的数据存储分布情况,同时也可以看到使 用该内策略的逻辑卷以及挂载的文件系统。 #lspv -p hdisk3 hdisk3: pp range state region lv name type mount point 1-30 free outer edge 31-110 used outer edge ocsapplv jfs /ocsapp 111-206 used outer middle paging00 paging n/a 207-219 free outer middle 220-328 free center 329-437 free inner middle 438-546 free inner edge5、使用 vmstat 命令评估调页空间的 i/o# vmstat -s
total address trans. faults 30613 page ins 2956863 page outs 0 paging space page ins 0 paging space page outs 0 total reclaims
zero filled pages faults 16710 executable filled pages faults 0 pages examined by clock 0 revolutions of the clock hand 0 pages freed by the clock 5333765 backtracks 0 lock misses 0 free frame waits 0 extend xpt waits 21434 pending i/o waits 2937501 start i/os 2937501 iodones
cpu context switches
device interrupts 0 software interrupts 0 traps
syscalls 以下的“前和后”vmstat -s 的报告显示了调页活动的累计情况。请记住是 paging space page ins 和 paging space page outs 代表了真实的调页空间 i/o。这个(未限定)的 page ins 和 page outs 报告了总的由调页机制执行的 i/o,即调页空间 i/o 和普通文件 i/o。该报告 已经经过编辑并且删除了和本讨论无关的信息。 # vmstat -s # before # vmstat -s # after 6602 page ins 7022 page ins 3948 page outs 4146 page outs 544 paging space page ins 689 paging space page ins 1923 paging space page outs 2032 paging space page outs 0 total reclaims 0 total reclaims 事实上在编译时产生比调页空间 page-outs 更多的 page-ins 意味着系统性能已被降至 颠簸的边缘。有些页面正在重新分配空间,因为在它们完成调度前其帧已被其他所用。6、使用 filemon 命令监控系统 i/ofilemon 命令监控文件系统和 i/o 系统事件的跟踪,并且报告一个周期内的文件和 i/o 的访问性能。监视文件系统的性能,并且报告代表逻辑文件、虚拟内存段、逻辑卷和物理卷 的 i/o 活动。 语法: filemon [ -d ] [ -i trace_file -n gennames_file] [ -o file] [ -o levels] [ -p ] [ -t n] [ -u ] [ -v ] 例如: # filemon -o fm.out - sleep 30 ; trcstop enter the &trcstop& command to complete filemon processing [filemon: reporting started] nlist failed. # more fm.out wed oct 24 21:23:56 2007 system: aix oracle1 node: 5 machine: c00 cpu utilization: 4.7% most active files -----------------------------------------------------------------------#mbs #opns #rds #wrs file -----------------------------------------------------------------------0.2 1 51 0 unix 0.0 5 10 0 ksh.catvolume:inode /dev/hd2:30816 /dev/hd2:109023 0.0 1 2 0 cmdtrace.cat /dev/hd2:.0 1 2 0 hosts /dev/hd4: 1 1 0 vmstat.cat /dev/hd2:109265 输出结果保存在 fm.out 中。输出字段说明如下: 最活跃的文件
#mbs 此文件在测量间隔时间内的传送量(以 mbs 为单位) 。各行按照此字段降序排 列。
#opns 在测量周期内的文件的打开次数。
#rds 文件读取调用的次数
#wrs 文件写入调用的次数
file 文件名称(文件路径全称在详细报告中) 。
volume:inode 文件驻留的逻辑卷和在相连文件系统总的 i-node 数目。此字段可以被用 来把文件和在详细的 vm 段报告中显示的其相应的永久段关联起来。此字段对在执行 过程中创建和删除的临时文件可以为空。 最活跃的段
#mbs 此段在测量间隔时间内的传送量(以 mbs 为单位) 。各行按照此字段降序排列。
#rpgs 从磁盘读入段中大小为 4-kb 的页面数
#wpgs 从段中写入磁盘大小为 4-kb 的页面数(page out)
#segid 内存段的 vmm 标识
segtype 段的类型:工作段、永久段(本地文件) 、客户机段(远程文件) 、页表段、系 统段或者包含文件系统数据的指定永久段。
volume:inode 对永久段来说,包含相关文件的逻辑卷名称和文件的 i-node 数目。此字 段可以被用来把段和在详细的文件状态报告中显示的其相应的文件关联起来。 对非永久 段来说,此字段为空。 最活跃的逻辑卷
util 逻辑卷使用率。
#rblk 从逻辑卷读取的大小为 512 字节的块数。
#wblk 写入逻辑卷大小为 512 字节的块数。
kb/s 每秒钟平均传送速率,单位 kb。
volume 逻辑卷名称。
description 文件系统安装点或是逻辑卷类型(paging, jfslog, boot, or sysdump) 。例如, 逻辑卷 /dev/hd2 是 /usr 类型;/dev/hd6 是 paging 类型以及 /dev/hd8 是 jfslog 类型。 有时也可能出现被压缩的这个字眼。这意味着所有的数据在被写入磁盘前都会以 lempel-zev(lz)压缩技术自动压缩,在从磁盘读取时则自动解压缩。 最活跃的物理卷
util 物理卷使用率。 注:逻辑卷 i/o 请求在物理卷 i/o 请求前后启动。 总的逻辑卷使用率将会看起来比总的 物理卷使用率高。使用率用百分比表示,0.10 是指 10% 的物理卷在测量时间间隔内繁忙。
#rblk 从物理卷读取的大小为 512 字节的块数。
#wblk 写入物理卷大小为 512 字节的块数。
kb/s 每秒钟平均传送速率,单位 kb。
volume 物理卷名称。 description 有关物理卷类型的简单描述, 例如, scsi 多媒体 cd-rom 驱动器或 16 位 scsi 磁盘驱动器。文件系统的安装点(mount point)及文件的 i 节点(inode)可与命令 ncheck 一起使用, 来找出 相对应的文件。7、监视磁盘 i/o 的小结一般来说, 高的 % iowait 表明系统存在一个应用程序问题、 缺少内存问题或低效的 i/o 子系统配置。例如,应用程序的问题可能是由于许多 i/o 请求,而不是处理许多数据。理 解 i/o 瓶颈并且要清楚解决瓶颈问题的关键在于提高 i/o 子系统的效率。磁盘的灵敏度可 以以几种方式出现,并具有不同的解决方法。一些典型的解决方案可能包括:
限制在特定的物理磁盘上活动逻辑卷和文件系统的数目。 该方法是为了在所有的物理磁 盘驱动器中平衡文件 i/o。
在多个物理磁盘间展开逻辑卷。该方法在当有一些不同的文件被存取时特别有用。
为一个卷组创建多个 journaled 文件系统(jfs)日志并且把它们分配到特定的文件系 统中(最好在快速写高速缓存驱动器中) 。这对应用程序创建、删除或者修改大量文件 特别是临时文件来说十分有益。
如果 iostat 命令的输出结果表明您的负载的 i/o 活动没有被均衡地分配到系统磁盘驱 动器中,并且一个或多个磁盘驱动器的使用率经常在 70-80 之间或更高,您就得考虑 重组文件系统, 例如备份和恢复文件系统以便减少碎片。 碎片将引起驱动器过多地搜索 并且可能产生大部分响应时间过长。
如果很大,i/o 增强的后台作业将涉及和相应时间交互,您可能希望激活 i/o 调步。
如果有迹象表明一小部分文件被一次又一次地读取, 您可以考虑附加的实存是否允许那 些文件更加有效地缓存。
如果负载的存取模式是随机占主导地位, 您可能要考虑增加磁盘并把按那些随机存取的 文件分布到更多的磁盘中。
如果负载的存取模式是顺序占主导地位并且涉及多个磁盘驱动器, 您可能要考虑增加一 个或多个磁盘适配器。 您也可以适当地考虑构建一个条带状逻辑卷来适应大型并且性能 关键的顺序文件。
使用快速写高速缓存设备。
使用异步 i/o。8、案例说明:这个案例不是我的,不记得在哪里找的: # sar 1 5 01:24:21 01:24:51 01:25:21 01:25:51 01:26:21 01:26:51%usr 46 46 47 44 45%sys 5 5 5 5 5%wio 28 29 30 29 28%idle 21 20 20 22 22average 46 5 29 21 在 cpu 资源尚未耗尽的情况下,有近 1/3 的 cpu 时间在等待磁盘 i/o,可以肯定系统资源 调度中 i/o 存在瓶颈;进而监控 i/o 使用情况: # iostat –d hdisk3 1 10 disks: % tm_act kbps tps kb_read kb_wrtn hdisk3 52.1 .6 7060 hdisk3 93.0 1.0 636 4068 hdisk3 98.0 .0 400 836 hdisk3 92.0 .0 780 776 hdisk3 81.0 760.0 178.0 696 64 hdisk3 89.0 .0 824 208 hdisk3 92.0 .0 708 668 hdisk3 99.0 .0 292 1596 hdisk3 98.0 .0 660 776 hdisk3 94.0 .0 852 772 hdisk3 99.0 .0 724 1688 可以发现 hdisk3 平均访问率非常高,几乎在 90%以上,但从数据传输量来看其真正的数据 量并不大,约为 1500kbps,而且读写均衡,说明运行的应用程序的对磁盘访问有小数据量频繁 存取的特点(其实即为电信应用中话务呼叫的应用特点);这里可以肯定的是系统整体性能的 瓶颈在于 hdisk3 的过度访问. 更进一步分析,使用系统监控命令 filemon 或 lvmstat 可以获得 以下信息: #filemon –o filemon. sleep 30; trcstop #vi filemon.out(部分截取) util #rblk #wblk kb/s volume description -----------------------------------------------------------------------1.00
1561.1 /dev/workdbslv1 raw 0.00 0
/dev/logiclogdbslv raw 0.00 8
/dev/tcom_filelv /tcom_file 0.00 0 120 0.9 /dev/hd4 / 0.00 0 144 1.1 /dev/hd2 /usr 0.00 0 88 0.7 /dev/loglv01 jfslog 0.00 0 272 2.1 /dev/tcomlv /tcom 0.00 0 32 0.3 /dev/hd8 jfslog 0.00 0 104 0.8 /dev/loglv00 jfslog 0.00 0 8 0.1 /dev/hd3 /tmp most active physical volumes -----------------------------------------------------------------------util #rblk #wblk kb/s volume description -----------------------------------------------------------------------0.91
1628.2 /dev/hdisk3 ssa logical disk drive 0.00 0 304 2.4 /dev/hdisk0 n/a 0.00 0 360 2.8 /dev/hdisk4 ssa logical disk drive hdisk3 的过分繁忙是由于其中的用于放置数据库表的/dev/workdbslv1 裸设备过度繁忙造成 的,至此我们可以通过调整裸设备的放置策略和数据库配置参数获得更好的 i/o 性能: 1.建立 workdbslv1 时裸设备时使用如下命令调整: # mklv -y workdbslv1 -t raw –a’c’ datavg 128 hdisk3 hdisk4 hdisk3 和 hdisk4 为属于同一个卷组的两个 7133raid 逻辑盘。指定内分配策略。9、raid10 和 raid5 的比较这篇是 piner 写的,我稍微增加了点点内容。 为了方便对比,这里拿同样多驱动器的磁盘来做对比,raid5 选择 3d+1p 的 raid 方案, raid10 选择 2d+2d 的 raid 方案,如图:1、安全性方面的比较 其实在安全性方面,勿须质疑,肯定是 raid10 的安全性高于 raid5。我们也可以从简单 的分析来得出。 当盘 1 损坏时, 对于 raid10, 只有当盘 1 对应的镜象盘损坏, 才导致 raid 失效。但是对于 raid5,剩下的 3 块盘中,任何一块盘故障,都将导致 raid 失效。 在恢复的时候,raid10 恢复的速度也快于 raid5。 2、空间利用率的比较 raid10 的利用率是 50%,raid5 的利用率是 75%。硬盘数量越多,raid5 的空间利 用率越高。 3、读写性能方面的比较 主要分析分析如下三个过程:读,连续写,离散写。 在介绍这三个过程之前,先介绍一个特别重要的概念:cache。 cache 已经是整个存储的核心所在,就是中低端存储,也有很大的 cache 存在,包括最简单 的 raid 卡,一般都包含有几十,甚至几百兆的 raid cache。 cache 的主要作用是什么呢体现在读与写两个不同的方面,如果作为写,一般存储阵 列只要求写到 cache 就算完成了写操作,所以,阵列的写是非常快速的,在写 cache 的数据 积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于 cache 数据的保护, 一般都依赖于镜相与电池(或者是 ups) 。 cache 的读一样不可忽视,因为如果读能在 cache 中命中的话,将减少磁盘的寻道,因 为磁盘从寻道开始到找到数据,一般都在 6ms 以上,而这个时间,对于那些密集型 io 的应 用可能不是太理想。但是,如果 cache 能命中,一般响应时间则可以在 1ms 以内。两者应该 相差 3 个数量级(1000 倍) 。 1)读操作方面的性能差异 raid10 可供读取有效数据的磁盘个数为 4,raid5 可供读取有效数据的磁盘个数也为 4 个 (校验信息分布在所有的盘上) ,所以两者的读的性能应该是基本一致的。2)连续写方面的性能差异 在连续写操作过程,如果有写 cache 存在,并且算法没有问题的话,raid5 比 raid10 甚至 会更好一些,虽然也许并没有太大的差别。 (这里要假定存储有一定大小足够的写 cache,而 且计算校验的 cpu 不会出现瓶颈) 。 因为这个时候的 raid 校验是在 cache 中完成,如 4 块盘的 raid5,可以先在内存中计算好 校验,同时写入 3 个数据+1 个校验。而 raid10 只能同时写入 2 个数据+2 个镜相。如上图所示,4 块盘的 raid5 可以在同时间写入 1、2、3 到 cache,并且在 cache 计算好校 验之后,这里假定是 6,同时把三个数据写到磁盘。而 4 块盘的 raid10 不管 cache 是否存 在,写的时候,都是同时写 2 个数据与 2 个镜相。 根据前面对缓存原理的介绍,写 cache 是可以缓存写操作的,等到缓存写数据积累到一 定时期再写到磁盘。但是, 写到磁盘阵列的过程是迟早也要发生的,所以 raid5 与 raid10 在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的 强连续写,只要不达到磁盘的写极限,差别并不是太大。 3)离散写方面的性能差异 例如 oracle 数据库每次写一个数据块的数据,如 8k;由于每次写入的量不是很大,而 且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满 raid5 的一个条带,比如 32k(保证每张盘都能写入) ,所以很多时候更加偏向于离散写入 (写入到已存在数据的条带中) 。 我们从上图看一下离散写的时候,raid5 与 raid10 工作方式有什么不同。如上图:我们 假定要把一个数字 2 变成数字 4, 那么对于 raid5, 实际发生了 4 次 io: 先读出 2 与校验 6, 可能发生读命中然后在 cache 中计算新的校验写入新的数字 4 与新的校验 8。 如上图我们可以看到:对于 raid10,同样的单个操作,最终 raid10 只需要 2 个 io, 而 raid5 需要 4 个 io. 这里我忽略了 raid5 在那两个读操作的时候,可能会发生读命中操作的情况。也就是 说,如果需要读取的数据已经在 cache 中,可能是不需要 4 个 io 的。这也证明了 cache 对 raid5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。 当然,并不是说 cache 对 raid10 就不重要了,因为写缓冲,读命中等,都是提高速度 的关键所在,只不过 raid10 对 cache 的依赖性没有 raid5 那么明显而已。 4)磁盘的 iops 对比 假定一个 case,业务的 iops 是 10000,读 cache 命中率是 30%,读 iops 为 60%,写 iops 为 40%,磁盘个数为 120,那么分别计算在 raid5 与 raid10 的情况下,每个磁盘的 iops 为多少。 raid5: 单块盘的 iops = (1.3)*0.6 + 4 * ())/120 = (4200 + 1 = 168 这里的 1.3)*0.6 表示是读的 iops,比例是 0.6,除掉 cache 命中,实际只有 4200 个 iops。 4 * () 表示写的 iops,因为每一个写,在 raid5 中,实际发生了 4 个 io,所以 写的 iops 为 16000 个 为了考虑 raid5 在写操作的时候,那 2 个读操作也可能发生命中,所以更精确的计算为: 单块盘的 iops = (1.3)*0.6 + 2 * ()*(1-0.3) + 2 * ())/120 = (4200 + 5600 +
= 148 计算出来单个盘的 iops 为 148 个,基本达到磁盘极限 raid10 单块盘的 iops = (1.3)*0.6 + 2 * ())/120 = (4200 +
= 102 可以看到,因为 raid10 对于一个写操作,只发生 2 次 io,所以,同样的压力,同样的磁盘, 每个盘的 iops 只有 102 个,还远远低于磁盘的极限 iops。 4、小结 所以要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用 raid5 比 较好。 相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用 raid10 的方式比较好。四、network 性能评估网络的性能可以通过以下一些方法进行监控和优化:1、ping 命令查看网络的连通性如果一旦发现网络发现问题, 我们最常规的使用方法就是使用 ping 命令来检查网络的连 通情况。 # ping 10.33.102.107 ping 10.33.102.107: (10.33.102.107): 56 data bytes 64 bytes from 10.33.102.107: icmp_seq=0 ttl=255 time=4 ms 64 bytes from 10.33.102.107: icmp_seq=1 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=2 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=3 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=4 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=5 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=6 ttl=255 time=0 ms 64 bytes from 10.33.102.107: icmp_seq=7 ttl=255 time=0 ms ^c ----10.33.102.107 ping statistics---8 packets transmitted, 8 packets received, 0% packet loss 上面的结果中,最后一行是一个总结,0% packet loss 可以检查网络的质量,丢包率。 从 time=0 ms,我们也可以来判断这两台主机之间网络传送的延时情况。 2、netstat –i 检查网络的接口这个命令可以用来检查网络的接口情况。 #netstat -i name mtu network address ipkts ierrs opkts oerrs coll en0 1500 link#2 0.d.60.b.98.e2
0 en0 .102.9 oracle1_boot
0 en2 1500 link#3 0.d.60.b.96.78
0 en2 .10 oracle1_stb
0 en3 1500 link#4 0.2.55.cf.4d.b9 0 0 7 0 0 en3 .2 oracle1 0 0 7 0 0 lo0 16896 link#1
0 lo0 16896 ::1
0 对于上述的输出结果,说明如下:
name 接口名称
mtu 最大传输单元,单位字节
ipkts 接收到的信息包总数量
ierrs 接收失败的包总数,比如,畸形的信息包、校验和错误或是设备驱动程序中的缓 冲空间不足。
opkts 发送的信息包总数量
oerrs 发送失败的包总数,比如,主机连接错误或者适配器输出队列超限。
coll 检测到包冲突的次数 如果 ierrs/ ipkts 超过 1%,就需要通过 netstat –m 来检查存储器的内存使用情况。 如果 oerrs/ opkts 超过 1%,就需要为这个接口增加发送队列的大小(xmt_que_size) , xmt_que_size 的值可以通过下面的命令来检查: #lsattr –el adapter 如果 coll/opkts 超过 10%,则网络的使用率比较高,有必要重新组合或是分区,使用 netstat –v 或者 enstat 命令可以确定冲突的比率。3、netstat –r 检查主机的路由情况netstat –r 可以用来检查主机的路由情况。在这里,default 表示的是默认路由。在很多 网络不通的时候,我们可以首先检查路由表的情况,如果路由表不存在太多的问题,可以再 使用 traceroute 命令来检查包的传送路径,从而定位网络问题。 #netstat -r routing tables destination gateway flags refs use if exp groups route tree for protocol family 2 (internet): default 10.33.102.96 10.33.102.96/28 jsdxh_db_svc 10.33.102.111 127/8 192.168.0.0 192.168.0/28 jsdxh_db01_stby 192.168.0.1510.33.102.97 jsdxh_db_svc jsdxh_db_svc loopback jsdxh_db_svc loopback jsdxh_db01_stby jsdxh_db01_stby loopback jsdxh_db01_stbyug 316
en7 uhsb 0 0 en7 u 195
en7 ughs 0 635942 lo0 uhsb 0 261 en7 u 44 8771083 lo0 uhsb 0 0 en9 u 2 3781828 en9 ughs 0 2463802 lo0 uhsb 0 272 en9-=&=&route tree for protocol family 24 (internet v6): ::1 ::1 uh 0 48 lo0 关于输出结果的一点说明: destination:表示路由的目的地。default 则表示该条路由位默认路由。在有些系统上,则使 用 0.0.0.0 来表示默认路由。 gateway:网关 flag:flag 的字段值比较多,不一一说明。这里的 u 表示 up。g 表示路由至网关。h 表示路 由至主机而不是网络。s 表示手工添加。b 表示该路由为广播地址。 refs:给出当前活动使用的路由数目。面向连接协议在连接持续时间内保留单独的路由,而 无连接协议在发送给同一目标时获取路由。 use:提供使用该路由发送的信息包数目的计数。 if:表示本路由利用的网络接口。其中 lo0 表示回环地址。en7 表示以太网口 7。 exp:该字段无效。 group:该字段无效。 下面是给出的一个 traceroute 示例: # traceroute 10.33.102.107 trying to get source for 10.33.102.107 source should be 10.33.102.105 traceroute to 10.33.102.107 (10.33.102.107) from 10.33.102.105 (10.33.102.105), 30 hops max outgoing mtu = 1500 1 oracle_svc (10.33.102.107) 1 ms 0 ms 0 msnetstat 命令的其他用法,简单介绍。 netstat –t 命令可以用来检查外部链接的情况,在这里可以看到链路所使用协议,以及端口 情况。 # netstat -ta |grep –v loopback | more active internet connections (including servers) proto recv-q send-q local address foreign address (state) tcp4 0 0 *.daytime *.* listen tcp 0 0 *.ftp *.* listen tcp tcp4 tcp4 tcp4 tcp4 tcp tcp tcp tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0*.telnet *.smtp *.time *.sunrpc *.smux *.exec *.login *.shell *.rmc jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm jsdxh_db_svc.ncube-lm*.* listen *.* listen *.* listen *.* listen *.* listen *.* listen *.* listen *.* listen *.* listen 10.37.131.7.iad1 established 10.33.102.104.nicelink established 10.33.102.104.cnrproto established 10.33.102.104.lmsocial established 10.34.131.74.prolink established 10.33.102.104.icp established 10.33.102.104.1124 established 10.33.102.104.1125 established 10.33.102.104.1126 established 10.33.102.104.1127 established4、netpmonnetpmon 命令用于监控与网络有关的 i/0 及 cpu 的使用情况。 以 root 身份运行下面的命令,可以找出进程使用的 cpu 时间,以及其中与网络有关的代码 使用的 cpu 时间: # netpmon -o /tmp/netpmon.out -o cpu -v; sleep 30; trcstop 此命令运行 30 秒钟,并在/tmp 目录下生成文件 netpmon.out。其中字段 cpu time 为进程 使用 cpu 的时间总值,cpu%对应其百分比,network cpu% 为进程中与网络有关的代码所占用的 cpu 百分比。如下所示: time: 30. trace off # more /tmp/netpmon.out wed aug 15 16:15:15 2007 system: aix oracle2 node: 5 machine: c00 trace -a -t 256000 -o -j 000,000,001,002,003,005,006,106,10c,139,134,135,100,200,102,103,101,104,465,467,46a, 00a,256,255,262,26a,26b,32d,32e,2a7,2a8,351,352,320,321,30a,30b,330,331,334,335,2c3,2 c4,2a4,2a5,2e6,2e7,2da,2db ,2ea,2eb,252,216,211 time: 0. trace on pid 1662992 tid 0x2a8015 time: 30. trace off hook counts ----------------------------trcon: 1 trcoff: 1 trchdr: 4 trctwrap: 187 dispatch: 26204 idle: 46017 fork: 1 exec: 1 exit: 8 flih: 25479 resume: 82837 slih: 10655 slihret: 10655 svcenter: 321792 svcreturn: 321731 createthread: 1 trcutil: 1001 ifen: 9257 socket: 836 hooks processed (incl. 1194 utility) 30.002 secs in measured interval ====================================================================== == process cpu usage statistics: ----------------------------process pid cpu time ---------------------------------------------------------oracle . 0.000 unknown . 0.000 oracle . 0.009 oracle . 0.007 oracle . 0.006 oracle . 0.006 oracle . 0.005 oracle . 0.005 oracle . 0.005 oracle . 0.005 network cpu % cpu % oracle oracle oracle oracle oracle oracle oracle oracle oracle …
0.8 0.3 0.9 0.3 0.16660.188 0.175 0.166 0.159 0.159 0.154 0.146 0.145 0.1390.004 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.0035、其他一些常用的命令arp route ifconfig nslookup 等等。 这些命令,在这里不再一一介绍,有兴趣的可以查看相关资料。五、补充:关于 topas 的使用说明topas 命令用于监控各种系统资源,如 cpu 的使用情况,cpu 事件和队列,内存和换页 空间的使用,磁盘性能,网络性能以及 nfs 统计等。它还会报告指派给不同 wlm 类的进 程对系统资源的消耗情况。它还能报告系统中最热门的进程和工作量管理器(wlm)的热 门类。有关 wlm 类信息只有在 wlm 激活时才会显示。topas 命令将热门进程定义为那些 使用大量 cpu 时间的进程。topas 命令没有作日志的选项,所有信息都是实时的。 topas 命令利用 system performance measurement interface(spmi)api 获得有关信息。正是 因为通过 spmi api, 使系统开销保持在最小程度。 topas 命令使用 perfstat 库调用访问 perfstat 内核扩展。 topas 命令提供了实时的对系统处理器的状态监视。它将显示系统中 cpu 最“敏感”的任务 列表。该命令可以按 cpu 使用。内存使用和执行时间对任务进行排序;而且该命令的很多 特性都可以通过交互式命令或者在个人定制文件中进行设定。 下面是该命令的语法格式: topas [-d number-of-monitored-hot-disks][-h] [-i monitoring-interval_in_seconds] [-n number-of-monitored-hot-network-interfaces] [-p number-of-monitored-hot-processes] [-w number-of-monitored-hot-wlm classes] [-c number-of-monitored-hot-cpus] [-p|-w] -d 指定要受监视的磁盘数目。缺省 2 个磁盘,在屏幕显示空间足够的情况下,全部显示。 -i 以秒为单位设置监视的时间间隔。缺省 2 秒。 d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。
q 该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么 top 将以尽可能高的优先级运行。
s 指定累计模式。
s 使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使 top 不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名。 top 命令显示的项目很多,默认值是每 5 秒更新一次,当然这是可以设置的。显示的各 项目为: uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近 1 秒,5 秒,15 秒的负载值) 。 processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休 眠的,停止的等很多种类。进程和状态显示可以通过交互命令 t 来实现。 cpu states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲 置等各种情况所占用 cpu 时间的百分比。优先级进程所消耗的时间也被列入到用户和系统 的时间中,所以总的百分比将大于 100%。 pid(process id) :进程标示号。 user:进程所有者的用户名。 pr:进程的优先级别。 ni:进程的优先级别数值。 virt:进程占用的虚拟内存值。 res:进程占用的物理内存值。 shr:进程使用的共享内存值。 s:进程的状态,其中 s 表示休眠,r 表示正在运行,z 表示僵死状态,n 表示该进程优先 值是负数。 mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和 缓存所占内存的情况。 swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。 pid 每个进程的 id。 ppid 每个进程的父进程 id。 uid 每个进程所有者的 uid 。 user 每个进程所有者的用户名。 pri 每个进程的优先级别。 ni 该进程的优先级值。 size 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是 kb。 tsize 该进程的代码大小。对于内核进程这是一个很奇怪的值。 dsize 数据和堆栈的大小。 trs 文本驻留大小。 d 被标记为“不干净”的页项目。 lib 使用的库页的大小。对于 elf 进程没有作用。 res 该进程占用的物理内存的总数量,单位是 kb。 share 该进程使用共享内存的数量。 stat 该进程的状态。其中 s 代表休眠状态;d 代表不可中断的休眠状态;r 代表运行 状态;z 代表僵死状态;t 代表停止或跟踪状态。 time 该进程自启动以来所占用的总 cpu 时间。如果进入的是累计模式,那么该时间 还包括这个进程子进程所占用的时间。且标题会变成 ctime。 %cpu 该进程自最近一次刷新以来所占用的 cpu 时间和总时间的百分比。 %mem 该进程占用的物理内存占总内存的百分比。 command 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会 有一个完整的命令行。 下面介绍在 top 命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌 握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了 s 选项,则可能其中一些命令会被屏蔽掉。 $#@60;空格立即刷新显示。 ctrl+l 擦除并且重写屏幕。 h 或者 显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程 pid,以及需要发送给该进程什 么样的信号。一般的终止进程可以使用 15 信号;如果不能正常结束那就使用信号 9 强制结 束该进程。默认值是信号 15。在安全模式中此命令被屏蔽。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序。 r 重新安排一个进程的优先级别。 s 切换到累计模式。 s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为 s。如果有小 数,就换算成 m s。输入 0 值则系统将不断刷新,默认值是 5 s。需要注意的是如果设置太 小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大 大增加。 f 或者 f 从当前显示中添加或者删除项目。 o 或者 o 改变显示项目的顺序。 l 切换显示平均负载和启动时间信息。 m 切换显示内存信息。 t 切换显示进程和 cpu 状态信息。 c 切换显示命令名称和完整命令行。 m 根据驻留内存大小进行排序。 p 根据 cpu 使用百分比大小进行排序。 t 根据时间/累计时间进行排序。 w 将当前设置写入~/.toprc 文件中。这是写 top 配置文件的推荐方法。六、主机日常检查脚本#!/bin/sh # # 首先载入配置文件,如果配置文件不存在,则报错退出 # source=$home/config/config check_source() { if [ -r $source ]; then . $source else echo &$(basename $0): cannot locate the default setting file.& exit 1 fi } # # 定义报表头 # report_header() { hostip=$(ifconfig -a | sed -n '2p' |awk '{print $2}') hostname=$(hostname) user=`who am i | cut -d & cat&&! hostname: $hostname user: $user server: $hostip time: $(date +%y'-'%m'-'%d' '%h':'%m':'%s) system check report =================== ! } # # 定义日志文件存放的目录和日志文件名,将当前用户目录设置为 log_path # log_path=$(echo $home) log_file=$log_path/log`date +%y%m%d%h%m%s` # # 备份历史文件 # cd $log_path test -f log2007* if [ &$& -eq 0 ];then mv $log_path/log2007* $log_path/niyl/ &/dev/null 2&&1 else : fi #define temp directory ,if not exist,create temp directory first. temp_path=$log_path/temp if [ -d $temp_path ];then : else mkdir $temp_path fi & -f1` # # 载入环境设置 # check_source # # 输出报表头信息 # report_header &&$log_file# 检查 cpu 的使用情况,这里使用 vmstat 命令 echo &***************************************** check cpu *****************************************&&&$log_file vmstat 1 10 | awk '{print $0;if($1 ~ /^[0-9].*/) (totalcpu+=$16);(avecpu=100-totalcpu/10)}; end {print &the average usage of cpu is :&avecpu}' &$temp_path/cpu_info cat $temp_path/cpu_info &&$log_file cpu_used_pct=`cat $temp_path/cpu_info | grep &the average usage of cpu is& |awk -f &:& '{print $2}' ` if [ &$cpu_used_pct& -gt &$cpu_value& ] ; then echo &log-warnning:`date +%y'-'%m'-'%d' '%h':'%m':'%s`, cpu 负载超过阀值设置,请检查系 统!!&&&$log_file else echo &&&&&cpu 负载正常!!&&&$log_file fi # # 内存使用监控,包括交换区的使用情况监控 # echo &&$log_file echo &&$log_file echo &***************************************** check memory useage *****************************************&&&$log_file cat $temp_path/cpu_info | awk '{print $0;if($1 ~ /^[0-9].*/) (totalpi+=$6)(totalpo+=$7)}; end {if(totalpi&10 && totalpo&10) print &
memory 负载正常!!&; if(totalpi&10 || totalpo&10) print &memory 负载异常,请检 查系统!!&} '&&$log_file ÷ # # 检查磁盘空间. ÷ # echo &&$log_file echo &&$log_file echo &***************************************** check disk space *****************************************&&&$log_file df -k &&$log_file df -k |grep -v proc |grep -v filesystem |awk '{x=1*$4}{print $1&,&$2&,&$3&,&$4&,&$5&,&$6&,&$7}'&$temp_path/disk_info cat $temp_path/disk_info | grep -v '^#' | while read line do item1=$(echo $line | awk -f ',' '{print $1}') item2=$(echo $line | awk -f ',' '{print $2}') item3=$(echo $line | awk -f ',' '{print $3}') item4=$(echo $line | awk -f ',' '{print $4}' |awk -f '%' '{print $1}') item5=$(echo $line | awk -f ',' '{print $5}') item6=$(echo $line | awk -f ',' '{print $6}') item7=$(echo $line | awk -f ',' '{print $7}') if [ &$item4& -gt &$disk_value& ]; then echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`, 磁盘$item7
剩余空间不足,请处 理!!& &&$log_file else echo &
磁盘空间$item7
使用正常!!& &&$log_file fi done # # 检查磁盘的 io 进行监控,iostat # echo &&$log_file echo &&$log_file echo &***************************************** check iostat *****************************************&&&$log_file iostat 1 3 &&$log_file # # 对网络流量进行监控,在这里可以作一个主机列表,对每个主机 ping 检查网络是否连通。 # echo &&$log_file echo &&$log_file echo &***************************************** check netstat *****************************************&&&$log_file netstat -i &&$log_file # # 检查主机的告警日志 # echo &&$log_file echo &&$log_file echo &***************************************** check system err *****************************************&&&$log_file errpt | head -10 &&$log_file day=`date +%d |awk -f &/& '{print $1$2}'` errpt | awk '{print $2}' | grep ^$day if [ $ -eq 0 ] ; then echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the system has found a error today.please check the error report.& &&$log_file else echo &&$log_file echo &
there is no system error report today.system is ok!!& &&$log_file fi # # 检查 ha 的运行是否正常 # echo &&$log_file echo &&$log_file echo &***************************************** check hacmp status *****************************************&&&$log_file /usr/es/sbin/cluster/clstat -o & $temp_path/ha_info lssrc -g cluster && $temp_path/ha_info cat $temp_path/ha_info &&$log_file echo &&$log_file cat $temp_path/ha_info| grep &node:& |awk -f ':' '{print $2,$3}' | awk '{print $1,$3}' | while read line do node=$(echo $line | awk '{print $1}')&'s& echo $line |grep up$ &/dev/null if [ &$& -eq 0 ]; then echo &
the node $node is ok!!& &&$log_file else echo &`date +%y'-'%m'-'%d' '%h':'%m':'%s`,log-warnning: the node $node status is down ,it was terminated .& &&$log_file fi done# # 检查数据库主要的 6 个进程是否正常. # echo &&$log_file echo &&$log_file echo ps -ef | &***************************************** grep ora_ | grep -v grep | awk -f '-' check '{print oracle $2}' | awk process '{print *****************************************&&&$log_file $2}' &/$temp_path/ora_process_info ps -ef | grep ora_ | grep -v grep &&$log_file # background process ckpt if [ `grep ora_ckpt_ora92 $temp_path/ora_process_info` ]; then count=1 else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_ckpt_ora92 was terminated!& fi # background process dbwr if [ `grep ora_dbw0_ora92 $temp_path/ora_process_info` ]; then count=$((count+1)) else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_dbw0_ora92 was terminated !& &&$log_file fi # background process reco if [ `grep ora_reco_ora92 $temp_path/ora_process_info` ]; then count=$((count+1)) else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_reco_ora92 was terminated !& &&$log_file fi # background process lgwr if [ `grep ora_lgwr_ora92 $temp_path/ora_process_info` ]; then &&$log_file count=$((count+1)) else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_lgwr_ora92 was terminated !& &&$log_file fi # background process pmon if [ `grep ora_pmon_ora92 $temp_path/ora_process_info` ]; then count=$((count+1)) else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_pmon_ora92 was terminated !& &&$log_file fi # background process smon if [ `grep ora_smon_ora92 $temp_path/ora_process_info` ]; then count=$((count+1)) else echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,the process ora_smon_ora92 was terminated !& &&$log_file fi if [ &$count& -eq 6 ];then echo &&$log_file echo &
the main six oracle processes is ok !!& &&$log_file else : fi# # check the oracle tablespace. # echo &&$log_file echo &&$log_file echo &***************************************** check oracle tablespace *****************************************&&&$log_file #su - oracle -c sqlplus dxh/dxh & /home/guest/dxhwh/niyl/tablespace_query.sql &&$log_file sqlplus -s xxx/xxx &&!eof & $temp_path/ts_info set pagesize 100 set linesize 100 col status for a10 col tablespace_name for a20 col contents for a10 col &size(m)& for a15 col used for a15 col pct for a10 select d.status, d.tablespace_name, to_char(nvl(a.bytes / , 0),'99g999g990') &size(m)&, to_char(nvl(a.bytes - nvl(f.bytes, 0),0)/, '99g999g990d00') from sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f where d.tablespace_name = a.tablespace_name(+) and d.tablespace_name = f.tablespace_name(+) order by tablespace_ exit !eof cat $temp_path/ts_info&&$log_file cat $temp_path/ts_info |grep online |awk '{print $2&:&$3&:&$4&:&$5}' |while read line do ts_name=$(echo $line |awk -f ':' '{print $1}') ts_total=$(echo $line |awk -f ':' '{print $2}') ts_used=$(echo $line |awk -f ':' '{print $3}') ts_used_pct=$(echo $line |awk -f ':' '{print $4}' |awk -f '%' '{print $1}'|awk -f '.' '{print $1}') if [ &$ts_used_pct& -gt &$ts_value& -o &$ts_used_pct& -eq &$ts_value& ]; then echo &log-warnning: `date +%y'-'%m'-'%d' '%h':'%m':'%s`,表空间$ts_name 的剩余空间紧张,请 尽快清理表空间!& else echo &
the tablespace of $ts_name
is ok!!& &&$log_file fi done # # check the oracle job. # echo &&$log_file echo &&$log_file echo &***************************************** check o

我要回帖

更多关于 视频监控功能 的文章

 

随机推荐