优化AIX 7内存性能第二部分监视内存的使用情况并分析其结果【ps+sar+svmon +vmstat】
简介
内存子系统调优中最重要的部分并不涉及实际的调优工作。在对系统进行调优之前,必须弄清楚主机系统的实际运行情况。要做到这一点,AIX® 7 管理员必须知道应该使用何种工具以及如何对将要捕捉的数据进行分析。
再次重申前面的调优文章(见 参考资料)中所介绍的原则:必须先监视主机,才能对系统进行正确地调优,无论它是作为逻辑分区 (LPAR) 运行还是在自己的物理服务器上运行。可以使用许多命令来捕捉和分析数据,所以需要了解这些命令,以及其中的哪些命令最适合想要进行的工作。在捕捉了数据之后,需要对结果进行分析。有些问题初看起来像是 CPU 的问题,但是经过分析之后,可以诊断出是内存或 I/O 问题,前提是使用合适的工具捕捉数据并知道如何进行分析工作。只有在正确地完成了这些工作之后,才可以考虑对系统进行实际的更改。如果医生不了解病史和目前的症状,就无法诊治疾病;同样,也需要在优化子系统之前对其进行诊断。如果在出现 CPU 或者 I/O 瓶颈的情况下对内存子系统进行优化,这将是毫无帮助的,甚至可能会影响主机的正常运行。
本文将帮助您理解正确地进行诊断的重要性。您将看到,性能调优远不只是实际的调优工作本身。在您将要学习的工具中,有一些是通用的监视工具,所有版本的 UNIX® 都提供这些工具,另外一些工
具是专门为 AIX 7 编写的。必须获得基准数据;这是已知环境的关键数据,调优决策都以此作为基础。
不要等到用户开始向服务台抱怨糟糕的性能时,才开始监视系统。应该在将服务器投入生产环境中后尽快捕捉数据。如果做到了这一点,那么就可以积极主动地进行调优,其目标是在用户指出问题之前到它。如果不了解系统正常运行时的数据,那么就无法确定所查看的数据是否表示存在性能问题。这是所有适当的性能调优方法的一部分;必须有效地捕捉数据,并正确地分析结果和趋势。我们来仔细地讨论内存监视。
UNIX 通用的内存监视
在本节中,我们概述在所有 UNIX 发行版中都可以使用的一些通用 UNIX 工具,包括 ps、sar 和 vmstat。其中的大多数工具都允许快速地对性能问题进行故障排除,但是它们并不适用于进行历史趋势研究和分析。
大多数管理员不经常使用 ps 命令对可能存在的内存瓶颈进行故障排除。但是,ps 可以提供关于系统运行情况的大量信息,因此有助于了解使用内存的情况。ps 最常用的功能是查看系统中正在运行的进程(见 清单 1)。
清单 1. 使用 ps 查看系统中正在运行的进程
# ps -ef | more
提交更改是内存条吗UID        PID    PPID  C    STIME    TTY  TIME  CMD
root        1      0    0  Jul 30    -  0:01  /etc/init
root    1442014 3211408  0  Jul 30    -  0:00 /usr/sbin/snmpd
root    1638422 3211408  0  Jul 30    -  0:00 /usr/sbin/rsct/bin/IBM.DRMd pconsole 1769544 5570756  0  Jul 30    -  1:53 /usr/java5/bin/java -Xmx512m -Xms20m
-Xscmx10m -Xshareclasses                                                  -ding=UTF-8  root    1900682    1    0  Jul 30    -  0:00 /usr/lib/errdemon
root    2031702    1    0  Jul 30    -  0:00 /usr/ccs/bin/shlap64
root    2097252    1    0  Jul 30    -  1:20 /usr/sbin/syncd 60
root    2162756 3211408  0  Jul 30    -  0:00 /usr/sbin/qdaemon
root    2556078    1    0  Jul 30    -  0:01
/opt/ibm/director/cimom/bin/tier1slp
root    2687168    1    0  Jul 30    -  0:25 [cimserve]
root    2752744 3211408  0  Jul 30    -  0:00
/opt/freeware/cimom/pegasus/bin/cimssys
platform_agent
root    2949134 3211408  0  Jul 30    -  0:00
/opt/freeware/cimom/pegasus/bin/cimssys
cimsys
root    3211408    1    0  Jul 30    -  0:00 /usr/sbin/srcmstr
root    3408036 3211408  0  Jul 30    -  0:00 /usr/sbin/sshd
root    3473482    1    0  Jul 30    -  1:14 /usr/bin/topasrec  -L -s 300 -R 1 -r 6
-
o /etc/perf/daily/
-ypersistent=1 -O
type=bi
root    3539136    1    0  Jul 30    -  0:06 bin/nonstop_aix @config/                                                  nonstop.properties
root    3670254 3211408  0  Jul 30    -  3:53 /usr/sbin/rsct/bin/rmcd -a                                                  IBM.LPCommands -r
root    3735688  1      0  Jul 30      -  0:35
/opt/ibm/icc/cimom/bin/dirsnmpd
daemon  3801316 3211408  0  Jul 30      -  0:00 /usr/sbin/rpc.statd -d 0 -t 50
root    3866638 3211408  0  Jul 30      -  0:00 /usr/sbin/rpc.lockd -d 0 root    3932310 3211408  0  Jul 30      -  0:04 /usr/sbin/snmpmibd
root    3997880  1      0  Jul 30      -  0:00 /usr/sbin/uprintfd
root    4063408 3211408  0  Jul 30      -  0:00 /usr/sbin/inetd
root    4128912  1      0  Jul 30      -  0:00
/opt/freeware/cimom/pegasus/bin
/CIM_diagd
root    4260046 3539136  0  Jul 30      -  7:33
/var/opt/tivoli/ep/_jvm/jre/bin/java
-Xmx384m -Xminf0.01
-Xmaxf0.4 -i
.dgc.cli
root    4325546  1      0  Jul 30      -  2:36 ./slp_srvreg -D
root    4391132 3211408  0  Jul 30      -  0:00 /usr/sbin/writesrv
root    4456636  1      1  Jul 30      - 13:45 /usr/sbin/getty /dev/console root    4522186 3211408  0  Jul 30      -  1:23 sendmail: accepting connections
root    4718632 3211408  0  Jul 30      -  0:50 /usr/sbin/aixmibd
root    4784288 3211408  0  Jul 30      -  6:03 /usr/sbin/syslogd
root    4849826 3211408  0  Jul 30      -  0:00 /usr/sbin/biod 6
root    4915382 3211408  0  Jul 30      -  0:05 /usr/sbin/hostmibd
root    4980920 3211408  0  Jul 30      -  0:05 /usr/sbin/portmap
root    5111980    1    0  Jul 30      -  0:00 /usr/dt/bin/dtlogin -daemon root    5177510    1    0  Jul 30      -  0:07 /usr/sbin/cron
root    5243044    1    0  Jul 30      -  0:10 /usr/bin/cimlistener
root    5505206 3211408  0  Jul 30      -  0:00 /bin/ksh /pconsole/lwi/bin/                                               
lwistart_src.sh
pconsole 5570756 5505206  0  Jul 30      -  0:00 /bin/ksh /pconsole/lwi/bin/                                                lwistart_src.sh
root    5701642 3211408  0  Jul 30      -  0:00
/usr/sbin/rsct/bin/IBM.ServiceRMd
root    6094978 7602204  11 09:16:46  pts/0 0:00 ps -ef
u0009539 6881324 7733258  0 08:09:42  pts/0 0:00 -ksh
root    7602204 6881324  0 08:09:45  pts/0 0:00 -ksh
u0009539 7733258 8126660  1 08:09:42      -  0:00 sshd: u0009539@pts/0 root    8126660 3408036  0 08:09:38      -  0:00 sshd: u0009539 [priv]
最常见的 ps 输出格式对于研究内存问题不太有用,但是有时候能让您回忆起在使用大量内存的系统上运行的一个进程。
但是,还有其他输出格式,其中最有用的是使用 BSD 风格的格式 u 或 v,它们显示每个进程的内存使用情况报告。下面的示例显示系统中每个活动进程的内存使用情况,并以恰当的方式排序。
清单 2. 每个活动进程的内存使用情况
.
# ps gv | head -n 1; ps gv | egrep -v "RSS" | sort +6b -7 -n -r
PID    TTY STAT  TIME PGIN  SIZE  RSS  LIM  TSIZ  TRS %CPU %MEM COMMAND ...lines skipped for clarity
4980920      - A  0:05  14  972  1028 32768    41    56  0.0  0.0 /usr/sb 5111980      - A  0:00  12  620  772 32768  135  152  0.0  0.0 /usr/dt 5177510      - A  0:07  20  580  656 32768    58    76  0.0  0.0 /usr/sb
5243044      - A  0:10    1  7176  7232 32768    34    56  0.0  0.0 /usr/bi 5505206      - A  0:00    4  560  840 32768  241  280  0.0  0.0 /bin/ks 5570756      - A  0:00    5  564  844 32768  241  280  0.0  0.0 /bin/ks 5701642      - A  0:00  118  1772  1984    xx  258  212  0.0  0.0 /usr/sb 6881324  pts/0 A  0:00    0  556  836 32768  241  280  0.0  0.0 -ksh 7602204  pts/0 A  0:00    0  560  840 32768  241  280  0.
0  0.0 -ksh 7667774  pts/0 A  0:00    0  720  828 32768    82  108  0.0  0.0 ps gv 7733258      - A  0:00    0  828  1052 32768  450  556  0.0  0.0 sshd: u 8126660      - A  0:00    0  704  928 32768  450  556  0.0  0.0 sshd: u    264      - A  1:20    0  448  448    xx    0    0  0.0  0.0 swapper
各个列提供关于内存使用情况的详细信息:
•RSS —每个进程用于文本和数据段的 RAM 量。PID 15256 使用 7232k 内存。这是此进程正在使用的真实内存。
•%MEM — RSS 的实际量 / RAM 总量。应该进一步检查使用的内存百分比高的进程,但是应该记住数据库和 HPC 应用程序在正常情况下可以使用大量内存,可以不理会它们。
在通用的系统上,任何进程都可能使用大量内存。
•TRS —用于进程文本段的 RAM 量(单位为 KB)。
•SIZE —为此进程(文本和数据)分配的分页空间的实际大小。
尽管这个命令提供一些有价值的信息,但是除非有可信的管理员已经诊断出系统中存在某种内存问题,否则我们通常不会首先使用这个命令。应该使用 vmstat 来确定瓶颈的原因,即使在尚未确定它是
否与内存有关的时候。vmstat 报告内核线程、CPU 活动、虚拟内存、分页、阻塞的磁盘 I/O 以及相关信息(见 清单 3)。要了解系统的运行情况,这是最快捷且最直接的方法。
清单 3. 使用 vmstat 确定瓶颈的原因
# vmstat 1 4
System configuration: lcpu=4 mem=2048MB ent=0.25
kthr    memory              page              faults              cpu      ----- ----------- ------------------------ ------------
-----------------------
r  b  avm  fre  re  pi  po  fr  sr  cy  in  sy  cs us sy id wa    pc  ec
0  0 419100 30643  0  0  0  0    0  0  36  241 271  0  7 93  0  0.03  13.7
0  0 419100 30643  0  0  0  0    0  0  44  40 250  0  7 93  0  0.03  12.5
0  0 419100 30643  0  0  0  0    0  0  22  155 242  0  7 93  0  0.03  12.2
0  0 419101 30642  0  0  0  0    0  0  60  62 259  0  8 92  0  0.03  13.5
我们先来说明这些列所表示的含义:
•内存数据
o avm —正在使用的活动虚拟内存量(4k 页面的数量),不包括文件页面。
o fre —内存空闲列表的大小。在大多数情况下,当这个值变得很小时我们并不担心,因为 AIX 7 总是会充分地使用内存,不会像希望的那样尽早地释放内存。这个设
置由vmo命令的 minfree 参数确定。归根结底,分页信息更加重要。
o pi —从分页空间换入的页面数。
o po —换出到分页空间的页面数。
o fr —空闲的(被替换的)页面数。
o sr —为了判断是否需要替换而扫描的页面数。
o cy —为了替换而扫描页面所用的时钟周期数。
•CPU 和 I/O
o r —在指定的时间间隔内,可运行内核线程的平均数量。
o    b —在指定的时间间隔内,位于虚拟内存等待队列中的内核线程的平均数量。如果r 不大于b,通常是 CPU 问题的现象,这可能是由于 I/O 或者内存瓶颈造成的。
o us —用户时间。
o sy —系统时间。
o id —空闲时间。
o wa —等待 I/O。
o ec —消耗容量的百分比,即,在运行共享处理器的系统上,您正使用的分配 CPU 时间多少的一个指标。
o rc —消耗的共享处理器资源的百分比。
对于工作负载分区 (WPAR),还应该监视特定 WPAR 的内存使用情况,从而了解是否需要重新配置 WPAR。可以使用 -@ 命令行参数并指定 WPAR 名称来查明这一信息。
让我们回到 vmstat 的输出,系统究竟出现了什么问题呢?首先是一条警告:请不要只根据 vmstat 的简单输出,向高级管理人员提交详细的分析和调优战略建议。必须做更多的工作,才能正确地诊断出系统的问题。当碰到生产性能问题并需要立即了解系统的运行状况时,应该使用 vmstat,以便可以警告其他人出现了什么问题,或者马上采取合适的措施(如果可行的话)。
在 vmstat 的输出中,要查看的主要内容是分页信息。如果有大量页面换出活动 (po),这常常说明真实内存不足,VMM 正在把分配的内存页面发送到磁盘上,以便为要换入的其他进程的页面让出空间。另外,要注意 I/O 统计数据,当发现阻塞的进程或者等待 I/O 的值 (wa) 很高时,这通常表示出现了实际的 I/O 问题,可能是正在等待文件访问,或者是与由于系统缺少内存而引起的分页相关的 I/O 问题。在这个示例中,看起来是后一种情况。我们碰到了 VMM 问题,这些问题可能导致了阻塞的进程和等待 I/O 的状况。通过优化内存参数,或者执行动态的 LPAR (DLPAR) 操作并在 LPAR 中添加更多 RAM,可以解决这个问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。