欢迎来到必胜文档网!

2023年aix系统性能管理及oracle案例分析

文章来源:网友投稿 时间:2022-10-25 09:45:03

下面是小编为大家整理的2023年aix系统性能管理及oracle案例分析,供大家参考。

2023年aix系统性能管理及oracle案例分析

aix 系统性能管理及 oracle 案例分析 关于 AIX 主机的性能评估,我们从下面的 4 个方面来逐一介绍:CPU、MEMORY、I/O 系统与网络这 4个方面来描述。

  一、CPU 性能评估 首先,我们还是先来看一下 CPU 的性能评估。下面先要紧介绍几个看 CPU 性能的命令。

  1、使用 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 3091988 2741152 0 0 0 0 0 0 1849 26129 4907 8 1 88 3 0 0 3091989 2741151 0 0 0 0 0 0 2527 32013 6561 15 2 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 1 2 AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07 System configuration: lcpu=16 17:52:26 %usr %sys %wio %idle physc 17:52:27 19 7 0 75 8.00 17:52:28 19 6 0 75 8.01 Average 19 7 0 75 8.01 在这里,sar 命令输出的是一个整体的 cpu 使用情况的一个统计,统计分项目的内容也比较直观,通过名字就能够懂得涵义。这里有一点比较方便的就是,在最后一行有一个汇总的 average 行,作为上述统计的一个平均。另外,补充说明一点的就是,通常来说,第一行统计信息包含了 sar 命令本身启动的 cpu 消耗,因此往往是偏高的,因此导致 average 值也往往是偏高一点的。当然,这不可能对结果产生多大影响。

  当我们有多个 cpu 的时候,而程序使用的是单线程,有的时候候会出现一种情况,我们检查发现,cpu 总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一个 cpu,导致这个 cpu100%占用,处理只是来,而其他的 cpu 却闲置。这时能够对 cpu 分开查询,统计每个 cpu 的使用情况。

  #sar -P ALL 1 2 Sar 还有其他一些比较特殊的使用方法,比如:

  假如希望多个采样与多个报告,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式为:

  sar -A -o /temp/sar_result.log 5 300 > /dev/null & 关于 sar 其他的一些使用方法,这里不再详述。

  3、第三个能够用来使用的命令是 iostat. $ iostat -t 2 4 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 0.0 0.0 0.1 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 命令用于统计每个进程的 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 进程,能够说明这个系统是一个完全空闲的系统。

  在 AIX 5L 下,你用 ps aux 会发现有一些 root 的 wait 进程 #ps aux |head -20 wait 就是 CPU 空闲的时候运行的空闲进程,AIX4 上叫 kproc。因此这个进程占用越大,表示机器越空闲。Wait 进程的数量是由机器上的逻辑 CPU 的个数决定的,有几个逻辑 CPU,就有几个 wait 进程. 5、ps 这个命令使用本身也比较复杂,在这里只介绍如何查看 cpu 占用最高的进程。比如下:

  #ps aux | head -25 在这个输出结果中,排在前面的是 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 ASC 6、解决 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 704738 1523728 0 55 15 aee1400 544 f100009e63c23e30 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 704740 1523728 0 60 20 32ec6400 472 f100009e63c23e30 pts/1 0:00 vmstat64 能够看到默认的情况下,系统使用的 nice=20,pri=60 。

  实际上在 nice 指定的时候,也能够使用超出闭区间[-20,20]的值如:#nice –n -33 vmstat 2 10 >vmstat.out # ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 200001 A 0 319652 1523728 0 40 0 82ef0400 544 f100009e63c23e30 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 1630282 680062 0 100 40 413e8400 472 484 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 1630282 680062 0 50 10 413e8400 472 484 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 间的...

推荐访问:标签 案例分析 性能

本文来源:http://www.triumph-cn.com/fanwendaquan/gongwenfanwen/2022/1025/55088.html

推荐内容