« June 2007 | Digest首页 | August 2007 »

July 28, 2007

vmstat 命令的用法说明

出处:http://www.eygle.com/digest

用途

报告虚拟内存统计信息。

语法

vmstat [ -f ] [ -i ] [ -s ] [ -I ] [ -t ] [ -v ] [ PhysicalVolume ... ] [ Interval [ Count ] ]

描述

vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

如果调用 vmstat 命令时不带标志,则报告包含系统启动后虚拟内存活动的摘要。如果指定 -f 标志,则 vmstat 命令报告自从系统启动后派生的数量。PhysicalVolume 参数指定物理卷的名称。

Interval 参数指定每个报告之间的时间量(以秒计)。第一个报告包含系统启动后时间的统计信息。后续报告包含自从前一个报告起的时间间隔过程中所收集的统计信息。如果没有指定 Interval 参数,vmstat 命令生成单个报告然后退出。Count 参数只能和 Interval 参数一起指定。如果指定了 Count 参数,其值决定生成的报告数目和相互间隔的秒数。如果 Interval 参数被指定而没有 Count 参数,则连续生成报告。Count 参数不允许为 0。

在 AIX 4.3.3 及更新版本包含有此方法的增强,用于计算 CPU 等待磁盘 I/O 所花时间(wio 时间)的百分比。某些情况下,AIX 4.3.2 以及该操作系统更早的版本中使用的该方法在 SMP 上会给出夸张的 wio 时间报告。

AIX 4.3.2 和更早版本中使用的方法如下:在每个处理器的每一次时钟中断(每个处理器一秒钟 100 次),确定上一个 10 毫秒时间要归入四种类别(usr/sys/wio/idle)中的哪一个。如果在时钟中断的时候,CPU 正忙于 usr 方式,那么 usr 将获取该时钟周期添加到其类别中。如果在时钟中断的时候,CPU 正忙于内核方式,那么 sys 类别获取该时钟周期。如果 CPU 不忙的话,则检测是否有磁盘 I/O 正在进行。如果有任何正在进行的磁盘 I/ O,则累加 wio 类别。如果没有磁盘 I/O 正在进行且 CPU 不忙,则 idle 类别获取该时钟周期。由于所有的空闲 CPU 都被归入 wio 类别,而不管正在等待 I/O 的线程数量,所以会产生夸大的 wio 时间报告。例如,只有一个 I/O 线程的系统可能会报告 90% 以上的 wio 时间,而不管它拥有的 CPU 数量。sar%wio)、vmstatwa)和 iostat% iowait)命令报告 wio 时间。

操作系统 AIX 4.3.3 及其更新版本使用的方法如下:如果一个未完成的 I/O 在空闲的 CPU 上启动,则操作系统 AIX 4.3.3 中的更改将只把该 CPU 标记成 wio。当只有少量线程在进行 I/O 而系统其它部分是空闲的,此方法能报告低得多的 wio 时间。例如,一个有四个 CPU 和一个正在进行 I/O 的线程的系统将报告最多 25% 的 wio 时间。有 12 个 CPU 和一个正在进行 I/O 的线程的系统只报告最大为 8% 的 wio 时间。NFS 客户机通过 VMM 读取/写入,biods 在 VMM 中花费的等待 I/O 完成的时间现在报告为 I/O 等待时间。

内核为内核线程、调页和中断活动维护统计信息,vmstat 命令通过使用perfstat 内核扩展来对其进行访问。磁盘输入/输出统计信息由设备驱动程序维护。对于磁盘,利用活动时间和传送信息数量来确定平均传送速率。活动时间的百分数根据报告期间驱动器忙的时间量来计算。

vmstat 命令生成的以下报告示例包含栏标题及其描述:

kthr:内核线程状态在采样间隔期间每秒钟更改一次。

r 置于运行队列中的内核线程数目。
b 置于等待队列(等待资源、等待输入/输出)的内核线程数目。

内存:关于使用虚拟内存和实内存的信息。如果虚拟页已经被访问的话,虚拟页可以被认为是活动的。一页为 4096 个字节。

avm 活动虚拟页。
fre 空闲列表的大小。
注:
大部分实内存都用作文件系统数据的高速缓存。对于保持较小的空闲列表,这是很正常的。

:关于缺页故障和调页活动的信息。这些是间隔的平均值,以秒为单位给出。

re 页面调度程序输入/输出列表。
pi 从调页空间调度进的页面。
po 调出到调页空间的页面。
fr 释放的页(页面替换)。
sr 通过页替换算法扫描的页面。
cy 按页替换算法的时钟周期。

故障:采样间隔平均每秒的捕获和中断率。

in 设备中断
sy 系统调用。
cs 内核线程上下文切换。

Cpu:CPU 使用时间故障百分比。

us 用户时间。
sy 系统时间。
id CPU 空闲时间。
wa CPU 空闲时间,在此期间系统有未完成的磁盘/NFS I/O 请求。请参阅上面的详细描述。

磁盘:每秒向指定物理卷提供的传送数目,该过程在采样间隔中发生。PhysicalVolume 参数可以用于指定一到四个名称。每个指定驱动器的传送统计信息按指定顺序给出。该计数代表向物理设备的请求数。它并不暗示读取或写入的数据量。几个逻辑请求可以组合成为一个物理请求。

如果指定一个 -I 标志,I/O 定向视图将会出现以下栏目变化。

kthr 除了栏 rb之外,栏 p 也将显示。
p
每秒等待实际物理 I/O 的线程数。
将显示新栏 fifo,代替 recy 栏。
fi
每秒调入的文件。
fo
每秒调出的文件。

标志

注:
如果在命令行中输入了 -f(或 -s)标志,系统将仅接受 -f(或 -s)标志,将忽略其它标志。如果同时指定了 -f-s 标志,系统将仅接受第一个标志,忽略第二个标志。
-f 报告从系统启动后的派生数目。
-i 显示从系统启动后每个设备造成的中断数目。
-I 用新的输出栏显示 I/O 定向视图,p 在标题 kthr 下;栏 fifo 在标题页面下,而不是栏下;recy 在页标题中。
-s 将总数结构中的内容写入到标准输出,该结构包含从系统初始化后调页事件的绝对计数。-s 标志只能与 -v 标志一起使用。如下描述了这些事件:
地址翻译错误
每次发生地址转换页面故障时增加。解决页面故障可能需要 I/O,也可能不需要。存储保护页面故障(失去锁定)不包含在此计数之内。
入页
随虚拟内存管理器读入的每页增加。计数随调页空间和文件空间的入页增加。它和出页统计信息一起表示实际 I/O(由虚拟内存管理器启动)的总量。
出页
随虚拟内存管理器写出的每页增加。计数随调页空间和文件空间的出页而增加。它和入页统计信息一起表示实际 I/O(由虚拟内存管理器启动)的总量。
调页空间入页
只随 VMM 启动的来自调页空间的入页而增加。
调页空间出页
只随 VMM 启动的来自调页空间的出页而增加。
总回收
当不启用一个新的 I/O 请求也可以满足地址翻译错误时增加。如果页面以前已经被 VMM 请求过的,但是 I/O 还没有完成;或者页面被预读算法提前提取,但是被故障段隐藏了;或者如果页面已经被放入空闲列表中,但还没有重新使用,则会发生此情况。
零填充页面故障
如果页面故障针对的是工作存储器,且可以通过指定一个帧并以零填充帧来满足它的话,则该值增加。
可执行填充页面故障
随着每个指令页面故障而增加。
用时钟检查页面
VMM 利用时钟算法实施伪最近最少使用(1ru)的页面替换模式。时钟检查过的页面是 aged。为每个时钟检查过的页面增加此计数值。
时钟指针的转动
随着每次 VMM 时钟旋转而增加(即在每一次完整的内存扫描后)。
用时钟释放的页面
随着时钟算法从实内存中选择释放的每一个页面而增加。
 
回溯
随着解决前一个页面故障时出现的每一个页面故障而增加。(必须首先解决新的页面故障,然后可以回溯到最初的页面故障。)
锁定丢失
VMM 通过除去对页面的寻址能力来强制并发性锁定。锁定丢失可能产生一个页面故障,每当此类情况发生时,此计数增加。
空闲帧等待
在收集可用帧时,每次 VMM 等待一个进程时增加。
扩展 XPT 等待
每次正在进行提交而使得 VMM 等待一个进程时,随着正在被访问的段而增加。
暂挂 I/O 等待
每次 VMM 等待一个进程时随着要完成的入页 I/O 而增加。
启动 I/O
随着每个被 VMM 启动的读取或写入 I/O 请求而增加。此计数应该与入页和出页的总数相等。
iodones
在每次完成 VMM I/O 请求时增加。
CPU 上下文交换
随着每次 CPU 上下文交换而增加(新进程的分派)。
设备中断
每次硬件中断时增加。
软件中断
每次软件中断时增加。一次软件中断是一个类似于硬件中断(保存一些状态和服务器例程分支)的机器指令。系统调用用软件中断指令来完成,该指令转换控制到系统调用处理程序例程。
陷阱
不通过操作系统来维护。
syscalls
随着每次系统调用而增加。
-t 打印 vmstat 的每一输出行旁边的时间戳记。时间戳记按照 HH:MM:SS 格式显示。
注:
如果指定了 -f-s-i 标志,将不打印时间戳记。
-v 将虚拟内存管理器维护的不同统计信息写入标准输出。-v 标志只能与 -s 标志一起使用。
内存页
实内存的大小(以 4 KB 的页面数目计)。
lruable 页
要用于替换的 4 KB 页面的数目。此数目不包含被用于 VMM 内部页和用于内核文本的固定部分的页面。
空闲页面
空闲 4 KB 页面的数目。
内存池
指定内存池数目的调整参数(使用 vmo 管理)。
固定页面
固定的 4 KB 页面的数目。
maxpin 百分比
指定能被固定的实内存百分数的调整参数(使用 vmo 管理)。
minperm 百分比
实内存百分比的调整参数(使用 vmo 管理)。它指定一临界点,低于此临界点时阻止页面重新调度算法使用文件页面。
maxperm 百分比
实内存百分比的调整参数(使用 vmo 管理)。它指定一临界点,高于此临界点时页面取走算法只取走文件页面。
numperm 百分比
当前由文件高速缓存使用的内存百分数。
文件页面
当前由文件高速缓存使用的 4 KB 页面的数目。
压缩百分比
由压缩页面使用的内存百分数。
压缩页面
压缩内存页面的数目。
numclient 百分数
被客户机页面占用的内存百分数。
maxclient 百分数
指定能用于客户机页面的最大内存百分数的调整参数(使用 vmo 管理)。
客户机页面
客户机页面的数目。
已调度的远程出页
调度用于客户机文件系统的出页的数目。
无 pbuf 而阻塞的暂挂磁盘 I/O
没有可用 pbuf 而阻塞的暂挂磁盘 I/O 请求的数目。Pbuf 是用于保存逻辑卷管理器层上的 I/O 请求的固定的内存缓冲区。
无 psbuf 而阻塞的调页空间 I/O
没有可用 psbuf 而阻塞的调页空间 I/O 请求的数目。Psbuf 是用于保存虚拟内存管理器层上的 I/O 请求的固定内存缓冲区。
-v (由 -v显示的统计信息,接上页)
无 fsbuf 而阻塞的文件系统 I/O
没有可用 fsbuf 而阻塞的文件系统 I/O 请求的数目。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。
无 fsbuf 而阻塞的客户机文件系统 I/O
没有可用 fsbuf 而阻塞的客户机文件系统 I/O 请求的数目。NFS(网络文件系统)和 VxFS(Veritas)是客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。
无 fsbuf 而阻塞的外部页面调度程序文件系统 I/O
没有可用 fsbuf 而被阻塞的外部页面调度程序客户机文件系统 I/O 请求的数目。JFS2 是一个外部页面调度程序客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。

示例

  1. 要显示引导后的统计信息摘要,请输入:

    vmstat
  2. 要显示 2 秒时间间隔的 5 个摘要,请输入:

    vmstat 2 5

    第一次摘要包含引导后的时间统计信息。

  3. 要显示引导后包括逻辑磁盘 scdisk13 和 scdisk14 的统计信息摘要,请输入:

    vmstat scdisk13 scdisk14
  4. 要显示派生统计信息,请输入:

    vmstat  -f
  5. 要显示各事件的计数,请输入:

    vmstat -s
  6. 要显示 vmstat的每一输出栏旁边的时间戳记,请输入:

    vmstat -t
  7. 要以另一套输出栏显示新的 I/O 定向视图,请输入:

    vmstat -I
  8. 要显示所有可用的 VMM 统计信息,请输入:
    vmstat -vs

文件

/usr/bin/vmstat 包含 vmstat 命令。

相关信息

iostatvmo 命令。

Posted by eygle at 10:38 AM | Comments (0)

July 25, 2007

nmon analyser-AIX 性能报告分析工具

出处:http://www.eygle.com/digest

原文链接:http://www.ibm.com/developerworks/cn/aix/library/nmon_analyser/

 



用法说明:nmon_analyser 工具并未受到正式的支持。没有提供或隐含任何保证,并且您无法从 IBM 获取相关的帮助。

该工具目前以 Microsoft® Excel™ 2000 或更高版本的电子表格的形式提供。

nmon_analyser 工具设计用于最新版本的 nmon,但出于向后兼容性的考虑,也使用旧版本对其进行了测试。每当在对 nmon 进行更新时,同时也将对该工具进行更新,另外,还可以不定期地更新该工具以获得新的功能。要将您的名字放入到请求更新的电子邮件列表中,请与 Stephen Atkins 联系。

该工具的作用

nmon_analyser 工具可以帮助对通过 nmon 性能工具捕获的性能数据进行分析。它允许性能专家完成下列任务:

  • 以电子表格的形式查看相应的数据
  • 消除'错误的'数据
  • 生成向客户进行演示的图形
该工具还将为输出中的每个主要部分自动地生成相应的图形。

另外,该工具将对 nmon 数据进行分析以生成下列信息:

  • 热点分析的加权平均值的计算
  • 用处理器与收集间隔的比值表示的 CPU 使用率的分布情况,该信息有助于识别单线程的进程
  • IBM TotalStorage® Enterprise Storage Server (ESS) vpaths 的附加部分显示了每日各时段的设备繁忙状态、读取传输大小和写入传输大小
  • 每日各时段的系统总数据速率,并对其进行调整以排除对 EMC hdiskpower 设备的重复计算,该信息有助于识别 I/O 子系统和 SAN(存储局域网络)瓶颈
  • EMC Corporation (EMC) hdiskpower 和 ESS DS8000(以前的 FAStT)dac 设备独立的工作表
  • 分析内存使用率,以显示计算性和非计算性页面之间的差异
  • 每个网络适配器的每日各时段总数据速率
  • 显示每条命令的平均 CPU 和内存使用率的 TOP 部分汇总数据





回页首


新的特性

nmon_analyser 工具的新特性包含:

  • 支持 AIX® 5.3 和微分区 (NMON10)
  • 支持超过 65K 行的输入文件
  • 改进的图形规模调整和定位
  • 用来指定要分析的工作表的选项
  • 支持带有自动分页功能的打印显示
  • 自动化的 Web 发布,采用 PNG 或 GIF 格式





回页首


安装该工具

  • 该工具以一个 .zip 文件的形式分发,其中包含了 .xls 文件、全面的用户文档、示例输入文件、辅助进行国家语言转换的 Shell 脚本以及用于分割大型输入文件的 Perl 程序。安装过程中只需要将这个包解压缩到适当的目录即可。




回页首


获取该工具

下面是可用的下载选择:





回页首


输出示例


主图表显示了收集间隔期间 CPU 和 I/O 的使用率:


可选图表显示了 vpath 服务时间:





回页首


文档

该分发版中包含了内容全面的文档。可使用 Microsoft Word 打开该文档,其中包括了下列细节内容:如何从 nmon 收集数据、如何使用该分析程序、国家语言问题、对数据进行解释的指南以及对 nmon 所生成的所有字段的详细解释。



参考资料

Posted by eygle at 9:25 PM | Comments (0)

July 20, 2007

Oracle9i AIX上单进程占用内存过多问题

出处:http://www.eygle.com/digest

作者:Piner

原文:http://www.ixdba.com/html/y2007/m06/128-oracle-memory-patch.html

 

 

这个问题最早应当是gototop发现的,那已经是很多年以前的事情了,不过,一直到现在,这个问题其实没有最终解决,所以,这个补丁还是不得不一直打下去。bug描述:

    #  Bugs resolved by this patch in conjunction with APAR IY49415:
    #  -------------------------------------------------------------
    #  3028673:  ORACLE ON AIX DOES NOT SHARE MANY CONST STRUCTS - PER
    #            PROCESS MEMORY OVERHEAD

更详细的信息可以参考metalink Note:259983.1,其实在早先的aix 4.3以及5.1上,当时的解决方案是:

$AIXTHREAD_SCOPE=S; export AIXTHREAD_SCOPE

$NUM_SPAREVP=1; export NUM_SPAREVP

但是,从aix 5.2开始,以上解决方案不再有效,所以,为了解决这个问题,aix 5.2推出了一个APAR IY49415,在aix 5.3中是查不到这个APAR信息的,但是不表示aix 5.3不支持,而是因为aix 5.3已经完全包含进去了。

AIX 5.2#instfix -a -ivk IY49415

    IY49415 Abstract: read-only reloc linking/loading support 

    IY49415 Symptom Text:
     Programs having large amounts of read-only address constants
     (compared to our competitors binaries of the same programs),
     consume excessive amounts of memory under AIX since it has no
     support to place address constants in read-only memory (text).

    ----------------------------
        Fileset bos.64bit:5.2.0.12 is applied on the system.
        Fileset bos.mp:5.2.0.18 is applied on the system.
        Fileset bos.mp64:5.2.0.18 is applied on the system.
        Fileset bos.rte.bind_cmds:5.2.0.13 is applied on the system.
        Fileset bos.up:5.2.0.18 is applied on the system.
        All filesets for IY49415 were found.

在有该APAR的aix 5.2系统上,或者所有的aix 5.3系统上,oracle推出了一个patch 3028673。打这个patch的方法也很奇怪,不是传统的Opatch方式去打,而是重新relink一个新的Oracle可执行文件,最终目的是通过直接修改源文件,使得oracle的多个进程之间可以共享一部分原来不能共享的资源,这部分资源大致占用1M多的空间。所以,该patch可以使得每个oracle进程降低1M多一点的内存使用,如果在进程特别多,而内存又比较紧张的系统上,这个patch还是非常有效果的。relink的方法为:

    Relink the oracle binary
    ~~~~~~~~~~~~~~~~~~~~~~~~

     1  save your current version of $ORACLE_HOME/oracle
     2  create a working directory $ORACLE_HOME/relink
     3  cd to $ORACLE_HOME/relink
     4  unzip the relinking package
     5  link $ORACLE_HOME/bin/oracle to ./oracle0
     6  run the script ./genscript to generate some required files and scripts
     7  run ./relink.sh to generate the new oracle binary oracle0.new.$$
     8  copy oracle0.new.$$ to $ORACLE_HOME/bin/oracle and verify that the
     permissions match the original oracle binary.

另外,需要特别注意的是,patch中描述为

    #  Patch Special Instructions
    #  ---------------------------
    #  This patch is for AIX 5.2 systems only.
    #
    #  It is valid for all 920* AIX 5.2 systems.

这个是因为当时还没有aix 5.3系统,其实,实际上所有oracle 920系统+aix 5.2/5.3都可以使用这个patch,以下是使用前后的对照表,注意SIZE列,补丁前与补丁后基本相差1M多,如果有1000个进程,就可以节约1-2G的内存使用。

    补丁前$ps gx|grep oracle
        PID     TTY STAT  TIME PGIN  SIZE   RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND
     483436      - A    199:48   12  4804 25876    xx 49801 21136  0.5  0.0 oracletb
     602170      - A    198:55    0  4804 25940    xx 49801 21136  0.5  0.0 oracletb
     610420      - A    209:55    6  4844 25980    xx 49801 21136  0.5  0.0 oracletb
     630988      - A    145:18    9  4860 25932    xx 49801 21136  0.4  0.0 oracletb
     639154      - A    199:59   10  4828 25900    xx 49801 21136  0.5  0.0 oracletb
     643276      - A    191:42    4  4792 25864    xx 49801 21136  0.5  0.0 oracletb
     651494      - A    193:13    6  4844 25916    xx 49801 21136  0.5  0.0 oracletb
     671756      - A    204:38   10  4776 25848    xx 49801 21136  0.5  0.0 oracletb
     ......

    补丁后$ps gv|grep oracle
        PID    TTY STAT  TIME PGIN  SIZE   RSS   LIM  TSIZ   TRS %CPU %MEM COMMAND
     639170      - A     0:01    3  3036 77100    xx 50917 74064  0.1  0.0 oracletb
     643300      - A     0:00    0  3012 77076    xx 50917 74064  0.0  0.0 oracletb
     651514      - A     0:03    1  3196 77196    xx 50917 74064  0.1  0.0 oracletb
     671762      - A     0:05    2  3120 77184    xx 50917 74064  0.2  0.0 oracletb
     675850      - A     0:04    0  3120 77120    xx 50917 74064  0.2  0.0 oracletb
     680040      - A     0:06    0  3120 77184    xx 50917 74064  0.2  0.0 oracletb
     688218      - A     0:05    0  3116 77180    xx 50917 74064  0.2  0.0 oracletb
     700614      - A     0:09    2  3120 77120    xx 50917 74064  0.2  0.0 oracletb
     ......

Posted by eygle at 11:23 AM | Comments (0)

July 17, 2007

RAC Specific Processes

出处:http://www.eygle.com/digest

The following are the additional processes spawned for supporting the multi-instance coordination:

LMON - The Global Enqueue Service Monitor (LMON) monitors the entire cluster to manage the global enqueues and the resources. LMON manages instance and process failures and the associated recovery for the Global Cache Service (GCS) and Global Enqueue Service (GES). In particular, LMON handles the part of recovery associated with global resources. LMON-provided services are also known as cluster group services (CGS)

LMDx - The Global Enqueue Service Daemon (LMD) is the lock agent process that manages enqueue manager service requests for Global Cache Service enqueues to control access to global enqueues and resources. The LMD process also handles deadlock detection and remote enqueue requests. Remote resource requests are the requests originating from another instance.

Posted by eygle at 4:51 PM | Comments (1)

Linux Memory Management or 'Why is there no free RAM?'

出处:http://www.eygle.com/digest

Sections

1. Overview of memory management
2. The mysterious 880 MB limit on x86
3. The difference among VIRT, RES, and SHR in top output
4. The difference between buffers and cache
5. Swappiness (2.6 kernels)

1. Overview of memory management
Traditional Unix tools like 'top' often report a surprisingly small amount of free memory after a system has been running for a while. For instance, after about 3 hours of uptime, the machine I'm writing this on reports under 60 MB of free memory, even though I have 512 MB of RAM on the system. Where does it all go?

The biggest place it's being used is in the disk cache, which is currently over 290 MB. This is reported by top as "cached". Cached memory is essentially free, in that it can be replaced quickly if a running (or newly starting) program needs the memory.

The reason Linux uses so much memory for disk cache is because the RAM is wasted if it isn't used. Keeping the cache means that if something needs the same data again, there's a good chance it will still be in the cache in memory. Fetching the information from there is around 1,000 times quicker than getting it from the hard disk. If it's not found in the cache, the hard disk needs to be read anyway, but in that case nothing has been lost in time.

To see a better estimation of how much memory is really free for applications to use, run the command:

free -m

The -m option stands for megabytes, and the output will look something like this:

             total       used       free     shared    buffers     cached
Mem: 503 451 52 0 14 293
-/+ buffers/cache: 143 360
Swap: 1027 0 1027

The -/+ buffers/cache line shows how much memory is used and free from the perspective of the applications. Generally speaking, if little swap is being used, memory usage isn't impacting performance at all.

Notice that I have 512 MB of memory in my machine, but only 503 is listed as available by free. This is mainly because the kernel can't be swapped out, so the memory it occupies could never be freed. There may also be regions of memory reserved for/by the hardware for other purposes as well, depending on the system architecture.

2. The mysterious 880 MB limit on x86
By default, the Linux kernel runs in and manages only low memory. This makes managing the page tables slightly easier, which in turn makes memory accesses slightly faster. The downside is that it can't use all of the memory once the amount of total RAM reaches the neighborhood of 880 MB. This has historically not been a problem, especially for desktop machines.

To be able to use all the RAM on a 1GB machine or better, the kernel needs recompiled. Go into 'make menuconfig' (or whichever config is preferred) and set the following option:

Processor Type and Features ---->
High Memory Support ---->
(X) 4GB

This applies both to 2.4 and 2.6 kernels. Turning on high memory support theoretically slows down accesses slightly, but according to Joseph_sys and log, there is no practical difference.

3. The difference among VIRT, RES, and SHR in top output
VIRT stands for the virtual size of a process, which is the sum of memory it is actually using, memory it has mapped into itself (for instance the video card's RAM for the X server), files on disk that have been mapped into it (most notably shared libraries), and memory shared with other processes. VIRT represents how much memory the program is able to access at the present moment.

RES stands for the resident size, which is an accurate representation of how much actual physical memory a process is consuming. (This also corresponds directly to the %MEM column.) This will virtually always be less than the VIRT size, since most programs depend on the C library.

SHR indicates how much of the VIRT size is actually sharable (memory or libraries). In the case of libraries, it does not necessarily mean that the entire library is resident. For example, if a program only uses a few functions in a library, the whole library is mapped and will be counted in VIRT and SHR, but only the parts of the library file containing the functions being used will actually be loaded in and be counted under RES.

4. The difference between buffers and cache
Buffers are associated with a specific block device, and cover caching of filesystem metadata as well as tracking in-flight pages. The cache only contains parked file data. That is, the buffers remember what's in directories, what file permissions are, and keep track of what memory is being written from or read to for a particular block device. The cache only contains the contents of the files themselves.

Corrections and additions to this section welcome; I've done a bit of guesswork based on tracing how /proc/meminfo is produced to arrive at these conclusions.

5. Swappiness (2.6 kernels)
Since 2.6, there has been a way to tune how much Linux favors swapping out to disk compared to shrinking the caches when memory gets full.

ghoti adds:
When an application needs memory and all the RAM is fully occupied, the kernel has two ways to free some memory at its disposal: it can either reduce the disk cache in the RAM by eliminating the oldest data or it may swap some less used portions (pages) of programs out to the swap partition on disk.
It is not easy to predict which method would be more efficient.
The kernel makes a choice by roughly guessing the effectiveness of the two methods at a given instant, based on the recent history of activity.

Before the 2.6 kernels, the user had no possible means to influence the calculations and there could happen situations where the kernel often made the wrong choice, leading to thrashing and slow performance. The addition of swappiness in 2.6 changes this.
Thanks, ghoti!

Swappiness takes a value between 0 and 100 to change the balance between swapping applications and freeing cache. At 100, the kernel will always prefer to find inactive pages and swap them out; in other cases, whether a swapout occurs depends on how much application memory is in use and how poorly the cache is doing at finding and releasing inactive items.

The default swappiness is 60. A value of 0 gives something close to the old behavior where applications that wanted memory could shrink the cache to a tiny fraction of RAM. For laptops which would prefer to let their disk spin down, a value of 20 or less is recommended.

As a sysctl, the swappiness can be set at runtime with either of the following commands:

# sysctl -w vm.swappiness=30
# echo 30 >/proc/sys/vm/swappiness

The default when Gentoo boots can also be set in /etc/sysctl.conf:

# Control how much the kernel should favor swapping out applications (0-100)
vm.swappiness = 30

Some patchsets allow the kernel to auto-tune the swappiness level as it sees fit; they may not keep a user-set value.

Posted by eygle at 4:35 PM | Comments (0)

July 13, 2007

Linux系统状态查看工具Sysstat

出处:http://www.eygle.com/digest

原文链接:
 
1、关于 Sysstat;

Sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手;


Sysstat 软件包集成如下工具:

    * iostat 工具提供CPU使用率及硬盘吞吐效率的数据;
    * mpstat 工具提供单个处理器或多个处理器相关数据;
    * sar 工具负责收集、报告并存储系统活跃的信息;
    * sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,
        是为sadc所设计的程序前端程序;
    * sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用
    * sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
    * sadf 显示被sar通过多种格式收集的数据;


2、安装 Sysstat和运行;

对于大多数系统,都有这个软件包,软件名以sysstat开头。我们可以通过网络安装它;


2.1 对于Debian或deb软件包为基础的系统;

[root@localhost ~]# apt-get install sysstat


2.2 Fedora 系统或以RPM包管理的系统;

[root@localhost ~]# yum install sysstat

如果是RPM包,请用下面的命令来安装;

[root@localhost ~]#rpm -ivh sysstat*.rpm

如果您想了解yum 和rpm 软件包管理工具,请参考:《Fedora / Redhat 软件包管理指南》

2.3 Slackware 系统,对于Slackware系统;

[root@localhost ~]# installpkg sysstat*.pkg


2.4 通过源码包编译安装;

如果您是通过源码包安装,请到官方下源源码包 http://perso.wanadoo.fr/sebastien.godard,目前最新版本是 sysstat-6.1.2;

如果您想了想一下什么是源码包,请参考:《如何编译安装源码包软件》

[root@localhost ~]# tar zxvf sysstat-6.1.2.tar.gz
[beinan@localhost ~]$ cd sysstat-6.1.2
[beinan@localhost sysstat-6.1.2]#
[beinan@localhost sysstat-6.1.2]# make config
[beinan@localhost sysstat-6.1.2]# make
[beinan@localhost sysstat-6.1.2]# make install


2.5 关于 Sysstat 计划任务;

如果您想得到Sysstat工具集所收集的系统信息自动存为某个文件中,你必须通过cron 为 sa1 和sa2 做计划任务。我们可以通过修改用户的crontab。在默认的情况下,Sysstat历史信息将被存放在/var/log/sa文件中。如果想定义自己的计划任务,请参考:《计划任务工具 cron 的配置和说明》

在root用户,通过 crontab -e 来添加下面的一段;

# 8am-7pm activity reports every 10 minutes during weekdays
0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &
# 7pm-8am activity reports every hour during weekdays
0 19-7 * * 1-5 /usr/lib/sa/sa1 &
# Activity reports every hour on Saturday and Sunday
0 * * * 0,6 /usr/lib/sa/sa1 &
# Daily summary prepared at 19:05 5 19 * * * /usr/lib/sa/sa2 -A &

创建Sysstat的启动脚本;

[root@localhost ~]# touch /etc/rc.d/init.d/sysstat
[root@localhost ~]# vi /etc/rc.d/init.d/sysstat

#!/bin/sh
# Begin $rc_base/init.d/sysstat
# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org
. /etc/sysconfig/rc
. $rc_functions
case "$1" in
        start)
                echo "Calling the system activity data collector (sadc)..."
                /usr/lib/sa/sadc -F -L -
                evaluate_retval
                ;;
        *)
                echo "Usage: $0 start"
                exit 1
                ;;
esac
# End $rc_base/init.d/sysstat

[root@localhost ~]# chmod 755 /etc/rc.d/init.d/sysstat
[root@localhost ~]# ln -sf /etc/rc.d/init.d/sysstat /etc/init.d/sysstat

有了Sysstat的守护进程,这样我们开机后,Sysstat的守护进程,就时时刻刻的为我们服务了。sa 、sa1或sa2自动把信息存在 /var/log/sa目录的二进制文件中,我们可以通过sar工具来提取这些系统信息的历史;

当然我们也可以通过手动的方法来打开Sysstat的守护程序,也就是我们前面所制作的sysstat;

[root@localhost ~]# /etc/rc.d/init.d/sysstat start
下面的方法也行;
[root@localhost ~]# /usr/lib/sa/sa1
[root@localhost ~]# /usr/lib/sa/sa2


3.Sysstat 工具集介绍;


3.1 sadc 工具,

sadc 位于 /usr/lib/sa目录中,如果你没有设置可执行路径,要用绝对路径来运行比较方便 ,/usr/lib/sa/sadc;sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示;


sadc 的用法;

 /usr/lib/sa/sadc [ -d ] [ -F ] [ -I ] [ -L ] [ -V ] [ interval [ count ] ] [ outfile ]

参数说明:

-d 报告硬盘设置的相关统计;
-F 强制把数据写入文件;
-I 报告所有系统中断数据;
interval 表示时间间隔,单位是秒,比如3 ;
count 统计数据的次数,也是一个数字;
outfile 输出统计到outfile文件;

注意:此工具中的参数都是可选的,如果没有指定任何参数,比如 /usr/lib/sa/sadc - ,则会输出数据到 /var/log/sa/ 目录下的一个文件中。我们要通过sadf 或sar工具来查看;

[root@localhost beinan]# /usr/lib/sa/sadc -
[root@localhost beinan]# ls /var/log/sa 注:列出所有sa目录下的文件,根据文件的时间来判断哪个文件是最新的;
[root@localhost beinan]# sar -f /var/log/sa/sa12

[root@localhost beinan]# sadf /var/log/sa/sa12

举例:我们想把sadc收集到的数据写到一个指定的文件中;

[root@localhost ~]# /usr/lib/sa/sadc  1 10 sa000
[root@localhost ~]# sar -f sa000

Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日

09时15分30秒       CPU     %user     %nice   %system   %iowait     %idle
09时15分31秒       all      3.00      0.00      0.00      1.00     96.00
09时15分32秒       all      0.00      0.00      0.00      0.00    100.00
09时15分33秒       all      0.00      0.00      0.00      0.00    100.00
09时15分34秒       all      0.00      0.00      0.00      0.00    100.00
09时15分35秒       all      0.00      0.00      0.00      0.00    100.00
09时15分36秒       all      0.00      0.00      0.00      0.00    100.00
09时15分37秒       all      0.00      0.00      0.00      0.00    100.00
09时15分38秒       all      0.00      0.00      0.00      0.00    100.00
09时15分39秒       all      0.00      0.00      0.00      0.00    100.00
Average:          all      0.33      0.00      0.00      0.11     99.56

注解:我们用sadc 收集系统动态数据,让它收集1秒之内的10次动态信息; 然后通过sar 工具来查看系统的状态。也可以用 sadf 来查看所收集的数据,但不是太直观。您自己尝试一下看看。查看sa000文件,用 sadf sa000 ;


3.2 sar 工具;

sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行;

用法:

sar [参数选项]

参数说明:

-A 显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
-b 通过设备的I/O中断读取设置的吞吐率;
-B 报告内存或虚拟内存交换统计;
-c 报告每秒创建的进程数;
-d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
-f 从一个二进制的数据文件中读取内容,比如 sar -f filename
-i interval 指定数据收集的时间,时间单位是秒;
-n 分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
-o 把统计信息写入一个文件,比如 -o filename ;
-P 报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-r 内存和交换区占用统计;
-R
-t 这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
-u 报告CPU利用率的参数;
-v 报告inode, 文件或其它内核表的资源占用信息;
-w 报告系统交换活动的信息; 每少交换数据的个数;
-W 报告系统交换活动吞吐信息;
-x 用于监视进程的,在其后要指定进程的PID值;
-X 用于监视进程的,但指定的应该是一个子进程ID;

sar 应用举例;

实例一: 如果只用sar 命令,sar就是读取 /var/log/sa目录下最近系统状态文件。

[root@localhost ~]# sar
[root@localhost ~]# sar -A 注:读取/var/log/sa目录下所有文件数据;

如果我们想知道CPU的利用率;动态更新;下面的例子是每秒更新一次数据,总共更新五次;

[root@localhost ~]# sar -u  1 5
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日

时间                      CPU		  利用率		nice值     系统占用		IO占用			空闲
11时19分34秒       CPU     %user     %nice   %system   %iowait     %idle
11时19分35秒       all      2.97      0.00      0.00      0.00     97.03
11时19分36秒       all     11.11      0.00      9.09      0.00     79.80
11时19分37秒       all     21.78      0.00      6.93      0.00     71.29
11时19分38秒       all     15.00      0.00      0.00      0.00     85.00
11时19分39秒       all      8.00      0.00      0.00      0.00     92.00
Average:          all     11.78      0.00      3.19      0.00     85.03

注解:

CPU:表示机器内所有的CPU;
%user 表示CPU的利用率;
%nice 表示CPU在用户层优先级的百分比,0表示正常;
%system 表示当系统运行时,在用户应用层上所占用的CPU百分比;
%iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;
%idle 表示空闲CPU百分比,值越大系统负载越低;

您可以CPU利用率的动态信息输出到一个文本文件中,然后通过more 来查看。

[root@localhost ~]# sar -u 1 5 > sar000.txt
[root@localhost ~]# more sar000.txt

也可以输出到一个二进制的文件中,然后通过sar来查看;

[root@localhost ~]# sar -u 1 5 -o sar002
[root@localhost ~]# sar -f sar002

注:如果您把数据通过-o filename 输出到一个二进制的文件中,是不能用文件内容查看工具more 、less或cat来查看的,应该用sar工具来查看,要加-f参数;

实例二:查看网络设备的吞吐情况;

比如我们让数据每秒更新一次,总共更新十次;

[root@localhost ~]# sar -n DEV 2 5
时间 IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s

第一字段:时间;
IFACE:设备名;
rxpck/s:每秒收到的包;
rxbyt/s:每秒收到的所有包的体积;
txbyt/s:每秒传输的所有包的体积;
rxcmp/s:每秒收到数据切割压缩的包总数;
txcmp/s :每秒传输的数据切割压缩的包的总数;
rxmcst/s: 每秒收到的多点传送的包;

如果我们从事提取eth0设备(也就是网卡eth0)的信息;我们应该用grep 来过滤。然后再显示出来;

[root@localhost ~]# sar -n DEV 2 5 |grep eth0
11时52分37秒 eth0 1.00 1.00 97.51 97.51 0.00 0.00 0.00
11时52分39秒 eth0 1.01 1.01 98.49 98.49 0.00 0.00 0.00
11时52分41秒 eth0 1.00 1.00 98.00 98.00 0.00 0.00 0.00
11时52分43秒 eth0 1.00 1.00 98.00 98.00 0.00 0.00 0.00
11时52分45秒 eth0 1.00 1.00 98.00 98.00 0.00 0.00 0.00
Average: eth0 1.00 1.00 98.00 98.00 0.00 0.00 0.00

如果想知道网络设备错误报告,也就就是用来查看设备故障的。应该用EDEV;比如下面的例子;

[root@localhost ~]# sar -n EDEV 2 5


3.3 iostat

iostat 是用来显示 系统即时系统,比如CPU使用率,硬盘设备的吞吐率;

[root@localhost ~]# iostat
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)   2006年05月12日

avg-cpu:  %user   %nice %system %iowait   %idle
           7.24    0.00    0.99    0.35   91.43

Device:   tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda      1.46        28.43        21.43     710589     535680


3.4 mpstat

mpstat 提供多处理器系统中的CPU的利用率的统计;mpstat 也可以加参数,用-P来指定哪个 CPU,处理器的ID是从0开始的。下面的例子是查看两个处理器,每二秒数据更新一次,总共要显示10次数据;

[root@localhost ~]# mpstat -P 0 2 10 注:查看第一个CPU
[root@localhost ~]# mpstat -p 1 2 10 注:查看第二个CPU
</code >
<code>
[root@localhost ~]# mpstat 2 10 注:查看所有CPU;


3.5 sdaf

sdaf 能从二进制文件中提取sar所收集的数据;这个大家知道就行了。显示的并不是友好的格式;

[root@localhost ~]# sar -u 2 5 -o sar003
[root@localhost ~]# sadf sar003

相对来说,用sar来读取输出文件的内容更好;比如下面的;

[root@localhost ~]# sar -f sar003


4、 与Sysstat相似工具;


4.1 进程管理工具;

进程管理工具,包括ps 、pgrep、top、kill 、killall、pkill 等,请参考 《 Linux 进程管理》


4.2 内存使用率查看工具;

内存使用量 free

free 工具既能查看物理内存,也能查看虚拟内存的用量;

[root@localhost ~]# free

如果显示以单位M,则加-m参数;

[root@localhost ~]# free -m
             total used free shared buffers cached
Mem: 724 713 11 0 24 290
-/+ buffers/cache: 398 326
Swap: 800 0 800


vmstat 即时显示内存工具;

vmstat 是一个即时显示内存使用情况的工具;

vmstat 使用方法:

vmstat [-V] [-n] [delay [count]]
              -V 显示vmstat的版本;
              -n causes the headers not to be reprinted regularly.
              -a 显示所有激活和未激活内存的状态;print inactive/active page stats.
              -d 显示硬盘统计信息;prints disk statistics
              -D 显示硬盘分区表;prints disk table
              -p 显示硬盘分区读写状态等;prints disk partition statistics
              -s 显示内存使用情况;prints vm table
              -m prints slabinfo
              -S 定义单位,k K
              delay 是两次刷新时间间隔;
               单位体积: k:1000 K:1024 m:1000000 M:1048576 (默认是 K)
              count 刷新次数;


5、 关于本文;

我在2004年10月30日,写过一篇Sysstat 的文章 ,当时也并没有把Sysstat搞的太清楚,只是会简单的操作,原文可参见《系统维护常用工具sysstat》

今天重写此文,主要是以前写的比较差,所以对一些参数进行了测试、考证,我想这样应该对新手方便一点。

本文也并不是大而全的man ,有些参数怎么理解,还得依靠我们自己。我认为掌握一些常用的参数就行,没有必要把一个命令研究的多透彻。有些东西,如果我们用不着,学了也没有什么用,这就是学为所用吧。


6、后记;


7、 参考文档;


8、 相关文档;

《 Linux 进程管理》

Posted by eygle at 5:35 PM | Comments (0)

July 10, 2007

DS8000,DMX3,HDS USP究竟哪个性能会表现的好些?

出处:http://www.eygle.com/digest

原文地址:
http://logzgh.itpub.net/post/3185/284963

这三款存储都属于高端存储。厂家号称的IOPS都非常的高。
但是实际当中哪一款表现的性能会更好一些呢?

前段时间,piner在他的blog上也介绍了这几款存储的基本架构图。有兴趣的可以去看看。

这三款存储,各自的架构都有自己的特点,也有自己的cache算法。从这个角度上来分析,孰好孰劣实在不好说。并且从前端的架构与cache算法来说,我私下认为,三款产品相差应该都不会太大。

但是DMX3和HDS USP的后端都是采用环状的架构,也就是采用FC-AL协议。而DS8000采用的却是交换设计,应该采用的是FC-SW协议。

FC-AL仲裁环的协议规定,同一时刻只有两个设备能传送数据。这是因为这个环就和hub一样,是一个共享的总线。当然同一时刻只能由两个设备进行p2p通信。从理论上讲当50~60颗磁盘连接在一个光纤环路上的时候,光纤通道基本达到性能上限。

采用环状设计的性能,与数据分布和磁盘本身的cache有很大的关系。如果某一块磁盘占用长时间,那么这块磁盘的缓存必将挖空,此时就要到读盘取数据,这样造成了环等待,从而必将影响了整个的存储的性能。

根据实际情况,hds usp的IOPS超过16000以后,性能就急剧下降,出现了拐点,也许跟这个环状的设计有很大关系。

而DS8000采用的是交换设计,后端卡通过内部交换机同一时刻可以访问到任一块磁盘的。所以从后端来讲,DS8000应该优于其他两款产品。

据IBM自己说,它在SPC-1(随机次盘I/O)和SPC-2(顺序磁盘I/O)性能指标测试中排名第一。不过EMC和HDS没有公开这两项测试的数据。但是IBM的存储在大家的印象当中是不咋地的,也许是被它的DS4000系列的产品拖累的。(DS4000系列的产品都是OEM的,DS6000,DS8000才是IBM自己研发的)


不过在实际当中,到底哪个好呢?不敢说。有谁有实际的经验吗?

Posted by eygle at 1:59 PM | Comments (0)

July 6, 2007

孕期孕周与胎儿双顶颈及股骨长参考数据

出处:http://www.eygle.com/digest

妊娠是一个复杂的过程,卵子受精后,进入宫腔,胚胎及附属物迅速生长发育直至成熟的过程中,每个孕周都会有不同的变化。在孕早期的各个周里你的小宝宝会是什么样呢,下面的文章会详细告诉你。

4周:胎儿只有0.2厘米。受精卵刚完成着床,羊膜腔才形成,体积很小。超声还看不清妊娠迹象。

5周:胎儿长到0.4厘米,进入了胚胎期,羊膜腔扩大,原始心血管出现,可有搏动。B超可看见小胎囊,胎囊约占宫腔不到1/4,或可见胎芽。

6周:胎儿长到0.85厘米,胎儿头部、脑泡、额面器官、呼吸、消化、神经等器官分化,B超胎囊清晰可见,并见胎芽及胎心跳。

7周:胎儿长到1.33厘米,胚胎已具有人雏形,体节已全部分化,四肢分出,各系统进一步发育。B超清楚看到胎芽及胎心跳,胎囊约占宫腔的l/3。

8周:胎儿长到1.66厘米,胎形已定,可分出胎头、体及四肢,胎头大于躯干。B超可见胎囊约占官腔1/2,胎儿形态及胎动清楚可见,并可看见卵黄囊。

9周:胎儿长到2.15厘米,胎儿头大于胎体,各部表现更清晰,头颅开始钙化、胎盘开始发育。B超可见胎囊几乎占满宫腔,胎儿轮廓更清晰,胎盘开始出现。

10周:胎儿长到2.83厘米,胎儿各器官均已形成,胎盘雏形形成。B超可见胎囊开始消失,月芽形胎盘可见,胎儿活跃在羊水中。

11周:胎儿长到3.62厘米,胎儿各器官进一步发育,胎盘发育。B超可见胎囊完全消失,胎盘清晰可见。

12周:胎儿长到4.58厘米,外生殖器初步发育,如有畸形可以表现,头颅钙化更趋完善。颅骨光环清楚,可测双顶径,明显的畸形可以诊断,此后各脏器趋向完善。


孕13周:双顶径的平均值为2.52士0.25腹围的平均值为6.90士l.65股骨长为1.17士0.31.

孕14周:双顶径的平均值为2.83士0.57腹围的平均值为7.77士1.82股骨长为1.38士0.48.

孕15周:双顶径的平均值为3.23士0.51腹围的平均值为9.13士1.56股骨长为1.74士0.58.

孕16周:双顶径的平均值为3.62士0.58腹围的平均值为10.32士1.92股骨长为2.10士0.51.

孕17周:双顶径的平均值为3.97士0.44腹围的平均值为11.49士1.62股骨长为2.52士0.44.

孕18周:双顶径的平均值为4.25士0.53腹围的平均值为12.41士l.89股骨长为2.71士0.46.

孕19周:双顶径的平均值为4.52士0.53腹围的平均值为13.59士2.30股骨长为3.03士0.50.

孕20周:双顶径的平均值为4.88士0.58腹围的平均值为14.80士l.89股骨长为3.35士O.47.

孕21周:双顶径的平均值为5.22士0.42腹围的平均值为15.62士1.84股骨长为3.64士0.40.

孕22周:双顶径的平均值为5.45士0.57腹围的平均值为16.70士2.23股骨长为3.82士0.47.

孕23周:双顶径的平均值为5.80士0.44腹围的平均值为17.90士1.85股骨长为4.21士0.41.

孕24周:双顶径的平均值为6.05士0.50腹围的平均值为18.74士2.23股骨长为4.36士0.51.

孕25周:双顶径的平均值为6.39士0.70腹围的平均值为19.64士2.20股骨长为4.65士0.42.

孕26周:双顶径的平均值为6.68士0.61腹围的平均值为21.62士2.30股骨长为4.87士O.41.

孕27周:双顶径的平均值为6.98士0.57腹围的平均值为21.81士2.12股骨长为5.10士0.41.

孕28周:双顶径的平均值为7.24士O.65腹围的平均值为22.86士2.41股骨长为5.35士0.55.

孕29周:双顶径的平均值为7.50士0.65,腹围的平均值为:23.71士1.50股骨长的平均值为5.61士0.44.

孕30周:双顶径的平均值为7.83士0.62腹围的平均值为:24.88士2.03股骨长的平均值为5.77士0.47.

孕31周:双顶径的平均值为8.06士0.60腹围的平均值为:25.78士2.32股骨长的平均值为6.03士0.38.

孕32周:双顶径的平均值为8.17士0.65腹围的平均值为:26.20士2.33股骨长的平均值为6.43士0.49.

孕33周:双顶径的平均值为8.50士0.47腹围的平均值为27.78:士2.30股骨长的平均值为6.52士0.46.

孕34周:双顶径的平均值为8.61士0.63腹围的平均值为:27.99士2.55股骨长的平均值为6.62士0.43.

孕35周:双顶径的平均值为8.70士0.55腹围的平均值为:28.74士2.88股骨长的平均值为6.71士0.45.

孕36周:双顶径的平均值为8.81士0.57腹围的平均值为:29.44士2.83股骨长的平均值为6.95士0.47.

孕37周:双顶径的平均值为9.00士0.63腹围的平均值为:30.14士2017股骨长的平均值为7.10士0.52.

孕38周:双顶径的平均值为9.08士0.59腹围的平均值为:30.63士2.83股骨长的平均值为7.20士0.43.

孕39周:双顶径的平均值为9.21士0.59腹围的平均值为:31.34士3.12股骨长的平均值为7.34士0.53.

孕40周:双顶径的平均值为9.28士0.50腹围的平均值为:31.49士2.79股骨长的平均值为7.4士0.53

Posted by eygle at 1:06 PM | Comments (3)

July 2, 2007

Automatic Fault Recovery

出处:http://www.eygle.com/digest

Oracle performs recovery automatically on two occasions:

  • At the first database open after the crash of a single-instance database or all instances of an Oracle Real Applications Cluster database (crash recovery).
  • When some but not all instances of an Oracle Real Application Clusters configuration fail (instance recovery). The recovery is performed automatically by a surviving instance in the configuration.

The important point is that in both crash and instance recovery, Oracle will automatically recover data to a transactionally consistent state.  This means the datafiles will contain all committed changes, and will not contain any uncommitted changes.  Oracle returns to the transactionally consistent state by rolling forward changes captured in the log files but not the datafiles, and rolling back changes that had not been committed.  This roll forward and roll back process is called crash recovery.  In a Real Application Clusters environment, this process is performed by a surviving instance and called instance recovery.

Why is recovery necessary?

To improve performance, Oracle keeps many changes in memory, even after they are committed.  It may also write data to the datafiles to free up memory, even though the changes have not been committed.  At the time of a failure, all data in memory is lost.  In order to ensure no committed changes are lost, Oracle records all operations in an online redo logfile.  The information in the log file allows Oracle to redo any operations that may be lost in a failure.  Writing to the logfile does not hurt performance, because these writes are sequential and very fast.  Writing to datafiles on the other hand is random and can be very slow because the disk block to be modified on disk must be located, and the disk head properly positioned for every write.

disk_layout.gif (13162 bytes)

Cache Recovery (Roll Forward)

During cache recovery, Oracle replays transactions in the online redo log beginning with the checkpoint position.  The checkpoint position in the place in the redo log where changes associated with previous redo entries had been saved to the datafiles before the failure.  As Oracle replays the redo operations, it applies both committed and uncommitted changes to the datafiles.  At the conclusion of the roll forward phase, the data files contain all committed changes, as well as new uncommitted changes (applied during roll forward) and old uncommitted changes (saved to the datafiles to free up space in buffer cache prior to the failure).

The database cannot open until the roll forward phase is complete.

Transaction Recovery (Roll Back)

During transaction recovery, Oracle searches out changes associated with dead transactions that had not committed before the failure occurred.  Undo blocks (whether in rollback segments or automatic undo tablespaces) record database actions that should be undone during certain database operations. In database recovery, the undo blocks roll back the effects of uncommitted transactions previously applied by the rolling forward phase. After the roll forward, any changes that were not committed must be undone. Oracle applies undo blocks to roll back uncommitted changes in data blocks that were either written before the crash or introduced by redo application during cache recovery. This process is called rolling back or transaction recovery.  Oracle can roll back multiple transactions simultaneously as needed. All transactions systemwide that were active at the time of failure are marked as dead. Instead of waiting for SMON to roll back dead transactions, new transactions can recover blocking transactions themselves to get the row locks they need.

some useful link:

http://www.oracle.com/technology/deploy/availability/htdocs/std_recovery.html

http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/backrec.htm

 

Posted by eygle at 10:49 AM | Comments (0)


CopyRight © 2004-2008 eygle.com, All rights reserved.