eygle.com   eygle.com
eygle.com  
 
Digest Net: April 2009 Archives

April 2009 Archives

宝宝被蚊虫叮咬肿痛怎么办

| 6 Comments

夏天到来后,蚊子随之孳生,尤其是雨季,蚊虫的幼虫--在大水中大量繁衍。蚊虫的叮咬使人难以入眠,而且还会传播疾病。可是要想彻底消灭蚊虫,并非易事,被蚊叮咬在所难免。蚊虫叮咬时,在蚊子的口器中分泌出一种有机酸--蚁酸,它的化学成分是HCOOH。这种物质可引起肌肉酸在家庭中可用浓肥皂涂抹可迅速止痒。原因是肥皂高级脂肪酸的钠盐。如:C17H35COONa。这种脂肪酸的钠盐水解后显碱性。 含OH- 蚁酸水溶液中含H+ :因为肥皂水中的OH-与蚁酸的H+中和成H2O因此可迅速消除痛 痒。

被蚊子叮后,切忌乱抓乱挠,否则容易造成细菌感染。专家建议,可采取以下方法止痒:

1.一般人被蚊子叮咬后,都会出现红肿、痒、痛等症状,这时可用碱性物质进行缓解,比如,可用氨水止痒,也可将香皂蘸水在红肿处涂抹,这样能在数分钟内止痒。


2.如果叮咬处很痒,可先用手指弹一弹,再涂上花露水、风油精等

3.用盐水涂抹或冲泡痒处,这样能使肿块软化,还可以有效止痒。

4.可用芦荟叶中的汁液止痒。被蚊子叮咬后红肿奇痒时,可切一小片芦荟叶,洗干净后掰开,在红肿处涂擦几下,就能消肿止痒。

Sun CEO Jonathan Schwartz的内部信出处

  今日Sun/Oracle的声明:

  这是我写过的最艰难的一封信。

  这一刻也让Sun在工业界中最具有希望的未来。

  27年来,Sun代表了勇气、创新、开拓道路和创造未来的自愿精神。不管我们进步抑或失败,我们仍然致力于这些梦想,并且致力于使得我们与众不同的研发工作。我们致力于数十年的追求,从世界上最强大的数据中心操作系统的进化到世界上最先进的多核微电子产品。我们从来都不曾走开,致力于商业模型的大规模改造,技术范畴的定义和新的市场路径。

  由于Sun的无比的才能,我们为整个工业界贡献了我们的人才和技术,培养出了众多杰出的公司和市场成功经验。我们的产品和服务驱动了新药品的研发、社会化媒体的转换和对我们周围的世界和市场更好的理解。总之,面对一个变化迅速的市场和全球经济,我们一直在进行持续的变革。我们从不曾走开,致力于迎接挑战 ----或者是迎接机会。

  所以我们今天在旅途中向前走了一步,但是是不同的一步----这个周末我们宣布,董事会和我确认Oracle以每股9.5美金的形式现金收购Sun Microsystems。董事会的所有成员现在正在开会,讨论收购事宜并进行投票,这次交易坚持完全的市场转化----将两个有着很长的共同工作历史的公司合并,产生一个新的统一的未来梦想。

  Oracle对Sun的兴趣非常明晰----他们渴望帮助客户简化开发、部署和操作高价值商业系统,从所有的应用到数据中心。通过收购Sun,Oracle将以最佳的位置帮助客户解决最复杂的关于业务运行的技术问题。

  对于我而言,这次收购行为将通过创建一个有重大影响、具有最好的专家和创新的公司以重新定义工业界,重新设定竞争环境。Oracle/Sun组合将培育一个世界上最充沛、最有影响的开发者社区,将加速存储、网络和计算的结合,并且将最强大的和最有价值的商业和技术软件带给全世界。

  我并不依据想象认为这个声明会是路程的终止。我认为这是通向另外一个道路的第一步。这个道路使得我们和我们的创造被引向一个更广阔的市场,并使得我们在这个世界上所扮演的角色更普世。今天宣布了这项交易,并且通过审查和股东通过需要花费数月时间。在交易完成之前,我们仍然是一个单独的公司,并且独立运作。不管交易需要花多长时间,世界已经从今天开始改变了。

  需要指出的是,改变世界的不是收购本身----而是两个公司的成员。通过和 Oracle进行了相当时间的交谈,使得我可以向你保证,他们只关注我们不出现在财务决算上的资产----我们的人员。这是他们最高的优先级别----创建一个激发兴趣和创造力的环境,使我们最聪慧的想法仍然能继续创新和开拓未来。

  谢谢您这些年所做的一切,谢谢您在未来为商业进展所做的一切。我极其为这个公司和我们一起实现的成就感到骄傲。

  整合计划的进程细节会被进一步公布。

  (以下为信件原文)
  Jonathan

  Today's Sun/Oracle Announcement

  This is one of the toughest emails I've ever had to write.

  It's also one of the most hopeful about Sun's future in the industry.

  For 27 years, Sun has stood for courage, innovation, a willingness to blaze trails, to envision and engineer the future. No matter our ups and downs, we've remained committed to those ideals, and to the R&D that's allowed us to differentiate. We've committed to decade long pursuits, from the evolution of one of the world's most powerful datacenter operating systems, to one of the world's most advanced multi-core microelectronics. We've never walked away from the wholesale reinvention of business models, the redefinition of technology boundaries or the pursuit of new routes to market.

  Because of the unparalleled talent at Sun, we've also fueled entire industries with our people and technologies, and fostered extraordinary companies and market successes. Our products and services have driven the discovery of new drugs, transformed social media, and created a better understanding of the world and marketplace around us. All, while we've undergone a near constant transformation in the face of a rapidly changing marketplace and global economy. We've never walked away from a challenge - or an opportunity.

  So today we take another step forward in our journey, but along a different path - by announcing that this weekend, our board of directors and I approved the acquisition of Sun Microsystems by the Oracle Corporation for $9.50/share in cash. All members of the board present at the meeting to review the transaction voted for it with enthusiasm, and the transaction stands to utterly transform the marketplace - bringing together two companies with a long history of working together to create a newly unified vision of the future.

  Oracle's interest in Sun is very clear - they aspire to help customers simplify the development, deployment and operation of high value business systems, from applications all the way to datacenters. By acquiring Sun, Oracle will be well positioned to help customers solve the most complex technology problems related to running a business.

  To me, this proposed acquisition totally redefines the industry, resetting the competitive landscape by creating a company with great reach, expertise and innovation. A combined Oracle/Sun will be capable of cultivating one of the world's most vibrant and far reaching developer communities, accelerating the convergence of storage, networking and computing, and delivering one of the world's most powerful and complete portfolios of business and technical software.

  I do not consider the announcement to be the end of the road, not by any stretch of the imagination. I believe this is the first step down a different path, one that takes us and our innovations to an even broader market, one that ensures the ubiquitous role we play in the world around us. The deal was announced today, and, after regulatory review and shareholder approval, will take some months to close - until that close occurs, however, we are a separate company, operating independently. No matter how long it takes, the world changed starting today.

  But it's important to note it's not the acquisition that's changing the world - it's the people that fuel both companies. Having spent a considerable amount of time talking to Oracle, let me assure you they are single minded in their focus on the one asset that doesn't appear in our financial statements: our people. That's their highest priority - creating an inviting and compelling environment in which our brightest minds can continue to invent and deliver the future.

  Thank you for everything you've done over the years, and for everything you will do in the future to carry the business forward. I'm incredibly proud of this company and what we've accomplished together.

  Details will be forthcoming as we work together on the integration planning process.

  Jonathan

  Additional Information and Where to Find It

  Sun plans to file with the Securities and Exchange Commission (the "SEC") and mail to its stockholders a proxy statement in connection with the proposed merger with Soda Acquisition Corporation, pursuant to which Sun would be acquired by Oracle Corporation (the "Merger"). The proxy statement will contain important information about the proposed Merger and related matters. INVESTORS AND STOCKHOLDERS ARE URGED TO READ THE PROXY STATEMENT CAREFULLY WHEN IT BECOMES AVAILABLE. Investors and stockholders will be able to obtain free copies of the proxy statement and other documents filed with the SEC by Sun through the web site maintained by the SEC at www.sec.gov. In addition, investors and stockholders will be able to obtain free copies of the proxy statement from Sun by contacting Investor Relations by telephone at (800) 801-7869 (within the U.S.) or (408) 404-8427 (outside the U.S.), or by mail at Sun Microsystems, Inc., Investor Relations, Mail Stop UMPK14-336, 4150 Network Circle, Santa Clara, California 95054, USA.

  Sun and its directors and executive officers may be deemed to be participants in the solicitation of proxies from the stockholders of Sun in connection with the proposed Merger. Information regarding the interests of these directors and executive officers in the transaction described herein will be included in the proxy statement described above. Additional information regarding these directors and executive officers is also included in Sun's proxy statement for its 2008 Annual Meeting of Stockholders, which was filed with the SEC on September 24, 2008. This document is available free of charge at the SEC's web site at www.sec.gov, and from Sun by contacting Investor Relations by telephone at (800) 801-7869 (within the U.S.) or (408) 404-8427 (outside the U.S.), or by mail at Sun Microsystems, Inc., Mail Stop UMPK14-336, 4150 Network Circle, Santa Clara, California 95054, USA, or by going to Sun's Investor Relations page on its corporate web site at www.sun.com.

  Note on Forward-Looking Statements

  This communication contains certain forward-looking statements within the meaning of Section 27A of the Securities Act of 1933 and Section 21E of the Securities Exchange Act of 1934, including but not limited to, statements regarding the expected benefits and closing of the proposed Merger. These forward-looking statements involve certain risks and uncertainties that could cause actual results to differ materially from those indicated in such forward-looking statements, including, but not limited to, the ability of the parties to consummate the proposed Merger, satisfaction of closing conditions precedent to the consummation of the proposed Merger, the ability of Oracle Corporation to successfully integrate Sun's operations and employees, the ability to realize anticipated synergies and cost savings of the proposed Merger, and such other risks as identified in Sun's Annual Report on Form 10-K for the fiscal year ended June 30, 2008, and Sun's most recent Quarterly Reports on Form 10-Q, each as filed with the SEC, which contain and identify important factors that could cause the actual results to differ materially from those contained in the forward-looking statements. Sun assumes no obligation to update any forward-looking statement contained in this communication.

ps 命令 --- 摘自

用途

显示进程的当前状态。该文档描述了标准 AIX ps 命令,以及 ps 的 System V 版本命令。

语法

X/Open 标准

ps [ -A ] [ -N ] [ -a ] [ -d ] [ -e ] [ -f ] [ -k ] [ -l ] [ -F format] [ -o Format ] [ -c Clist ] [ -G Glist ] [ -g Glist ] [ -m ] [ -n NameList ] [ -p Plist ] [ -t Tlist ] [ -U Ulist ] [ -u Ulist ]

Berkeley 标准

ps [ a ] [ c ] [ e ] [ ew ] [ eww ] [ g ] [ n ] [ U ] [ w ] [ x ] [ l | s | u | v ] [ t Tty ] [ ProcessNumber ]

描述

ps 命令将活动进程的当前状态和(如果指定了 -m 标志)有关的内核线程写到标准输出中。注意当 -m 标志使用额外的行显示与进程相关的线程时,您必须使用 -o 标志连同 THREAD 字段说明符来显示额外的与线程相关的列。

不使用任何标志时,ps 命令显示关于当前工作站的信息。 -f-ol-lsuv 标志仅确定为该进程提供了多少信息;它们不确定列出哪些进程。 lsuv 标志互斥。

使用 -o 标志时,ps 命令检查内存或调页区域并确定进程创建时的命令名和参数是什么。如果 ps 命令不能找到该信息,存储在内核中的命令名显示在方括号中。

COLUMNS 环境变量覆盖系统选定的水平屏幕大小。

接受参数列表(-o-G-g-p-t-U-u 标志)的命令行标志的限制为 128 项。例如, -u Ulist 标志能指定不超过 128 个用户。

取决于 ps 命令使用的标志,列标题将显示在标准输出中显示的信息的上方。标题定义在以下列表中(使这些标题显示的标志在圆括号中显示):

ADDR
通常情况下,(-ll 标志)包含进程栈的段号;如果为内核进程,则为预处理数据区的地址。
BND
-o THREAD 标志)绑定内核线程的处理器(如果有)的逻辑处理器号。对一个进程来说,如果它的线程全都绑定到同一处理器上,则显示该字段。
C
-fl-l 标志)每次系统时钟周期和发现线程或进程需要运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,CPU 利用率用于确定进程调度优先级。大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。
CMD
-f-ll 标志)包含命令名。使用 -f 标志显示完整命令名和它的参数。
COMMAND
suv)包含命令名。使用 -f 标志显示完整命令名和它的参数。

F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SWTED 0x00000010 表示进程在跟踪时停止。
SFWTED 0x00000020 表示在被跟踪时,调用 fork 子例程后进程停止。
SEWTED 0x00000040 表示在被跟踪时,调用 exec 子例程后进程停止。
SLWTED 0x00000080 表示在被跟踪时,调用 loadunload 子例程后进程停止。
SFIXPRI 0x00000100 表示该进程有固定的优先级,忽略 pcpu 字段描述符。
SKPROC 0x00000200 表示一个内核进程。
SOMASK 0x00000400 表示收到信号后恢复旧掩码。
SWAKEONSIG 0x00000800 表示该信号将异常终止 sleep 子例程。内容必须PCATCH 标志的内容相同。 PCATCHSWAKEONSIG 的内容必须大于 PMASK 的内容。
SUSER 0x00001000 表示该进程处在用户方式中。
SLKDONE 0x00002000 表示该进程已完成锁定。
STRACING 0x00004000 表示该进程是个调试进程。
SMPTRACE 0x00008000 表示多进程调试。
SEXIT 0x00010000 表示正退出进程。
SSEL 0x00020000 表示处理器正在选择:唤醒/等待危险。
SORPHANPGRP 0x00040000 表示一个孤立进程组。
SNOCNTLPROC 0x00080000 表示会话导带放弃了终端控制。
SPPNOCLDSTOP 0x00100000 表示当子进程停止时,SIGHLD 信号送到父进程。
SEXECED 0x00200000 表示已运行该进程。
SJOBSESS 0x00400000 表示在当前会话中使用作业控制。
SJOBOFF 0x00800000 表示该进程不受作业控制的影响。
PSIGDELIVERY 0x01000000 表示该进程被程序检查处理程序使用。
SRMSHM 0x02000000 表示调用 exit 子例程过程中,该进程除去了共享内存。
SSLOTFREE 0x04000000 表示进程槽空闲。
SNOMSG 0x08000000 表示没有其它 uprintf 子例程消息。
F
-ll 标志)与进程和线程相关的部分更重要 F 字段标志(十六进制和添加的)显示在下表中。

F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SKPROC 0x00000200 表示一个内核进程。
SEXIT 0x00010000 表示正退出进程。
SEXECED 0x00200000 表示已运行该进程。
SEXECING 0x01000000 表示该进程正在执行(执行一个可执行程序)。
TKTHREAD 0x00001000 表示该线程是一个内核线程。
注:
可通过分别查询 /usr/include/sys/proc.h/usr/include/sys/thread.h 文件中的 p_flagst_flags 字段查看所有进程和线程标识的定义。
LIM
v 标志)通过调用 setrlimit 子例程指定内存使用的软限制。如果不指定限制则显示为 xx。如果将该限制设为系统限制,(没限制),显示值 UNLIM
NI
-ll 标志)为 sched other 策略计算优先级中使用的细调值。
PID
(所有标志)进程的进程标识。
PGIN
v 标志)处理未装入核心的页面引用产生的磁盘 I/O 的数目。
PPID
-fl-l 标志)父进程的进程标识。
PRI
-ll 标志)进程或内核线程的优先级;数字越大优先级越低。
RSS
v 标志)进程的实际内存(驻留集)大小(单位是 1KB)。
S
-ll 标志)进程或内核线程的状态:

对于进程:

O
不存在
A
活动
W
已交换
I
空闲(等待启动)
Z
已取消
T
已停止

对于内核线程:

O
不存在
R
正在运行
S
正在休眠
W
已交换
Z
已取消
T
已停止


SC
-o THREAD 标志)进程或内核线程的暂挂数。对进程来说,暂挂数定义为内核线程暂挂数的总和。
SCH
-o THREAD 标志)内核线程的调度策略。使用 012 分别显示策略 sched_othersched_fifosched_rr
SIZE
v 标志)进程数据节的虚拟大小(单位是 1 KB)。
SSIZ
s 标志)内核堆栈的大小。对于多线程进程,该值总为 0(零)。
STAT
suv 标志)包含进程状态:
0
不存在
A
活动
I
中间的
Z
已取消
T
已停止
K
可用的内核进程


STIME
-fu 标志)进程的启动时间。 LANG 环境变量控制该字段的外观。
SZ
-ll 标志)该进程核心映像的大小单位是 1KB。
THCNT
-o thcount 标志)进程拥有的内核线程数。
TID
-o THREAD 标志)内核线程的线程标识。
TIME
(所有标志)进程的执行时间总和。
TRS
v 标志)文本的驻留集(实际内存)大小。
TSIZ
v 标志)文本(共享程序)映像的大小。
TTY
(所有标志)进程的控制工作站:
-
进程与工作站不相关。
?
未知。
Number
TTY 数目。例如,条目 2 表示 TTY2。


UID
-f-ll 标志)进程所有者的用户标识。登录名在 -f 标志下打印。
USER
u 标志)进程所有者的登录名。
WCHAN
-l 标志)进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。
WCHAN
l 标志)进程等待的事件(系统中的一个地址)。选择一个符号对地址分类,除非请求数字输出。
%CPU
uv 标志)进程启动后,该进程使用 CPU 的时间百分比。该值通过将进程使用 CPU 的时间除以进程所用时间计算。在多处理器环境中,因为同一进程中的几个线程可以同时在不同的 CPU 上运行,该值要进一步除以可用 CPU 数。(由于计算该数据基于的时间不同,所有 %CPU 字段的总和可能超过 100%。)
%MEM
uv 标志)进程使用的实际内存的百分比。 %MEM 往往会夸大与其它进程共享程序文本的进程的成本。但运行一个程序的多个副本和所有实例共享该程序文本的一个副本时不会计算时间。在该程序的每个实例中计算文本节的大小。这意味着如果运行一个程序的多个副本,所有进程的总 %MEM 值可以超过 100%。

进程已退出且有一个父进程,而父进程没有等待该进程,将该进程标志为 <defunct>。已阻塞且正在尝试退出的进程标志为 <exiting>ps 命令试图确定内存或交换区创建进程时给定的文件名和参数。

注:
  1. ps 命令运行时可以更改进程。为死进程显示的部分数据是不相关的。
  2. ps 程序检查内存来检索文件名和创建进程时使用的参数。然而,进程可以破坏信息,使检索文件名和参数的方法不可靠。

标志

下列标志前面有一个 -(负号):

-A 将关于所有进程的信息写到标准输出。
-a 将关于所有进程(除了会话导带和与终端无关的进程)的信息写到标准输出。
-c Clist 仅显示关于 Clist 变量列出的指定到工作负荷管理类的进程的信息。 Clist 变量或者是一个由逗号分开的类名列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的类名列表。
-d 将关于所有进程(除会话导带)的信息写到标准输出。
-e 将除内核进程以外所有进程的信息写到标准输出。
-F Format -o Format 相同
-f 生成一个完整列表。
-G Glist 仅将关于进程的信息写到标准输出,这些进程在为 Glist 变量列出的进程组中。 Glist 变量或者是一个由逗号分隔的进程组标识符列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的进程组标识符的列表。该标志与 -g Glist 标志等价。
-g Glist 该标志与 -G Glist 标志等价。
-k 列出内核进程。
-l 生成一长列表。另见 l 标志。
-m 列出内核线程和进程。进程的输出行后面跟着一额外输出行,它关于每个内核线程。该标志不显示特定于线程的字段(bndscountschedthcounttid),除非指定了适当的 -o Format 标志。
-N 不聚集线程统计信息。使用该标志后,ps 报告那些可以通过不遍历进程的线程链来获得那些统计信息。
-n NameList 指定备用系统名称列表文件来替换缺省系统名称列表文件。因为直接提供信息给内核,操作系统不使用 -n 标志。
-o Format Format 变量指定的格式显示信息。可以为 Format 变量指定多个字段说明符。Format 变量或者是一个由逗号分隔的字段说明符列表或是一个由""(双引号)引起来的之间用逗号或一个或多个空格或两者分隔的说明符列表。

每个字段说明符有一个缺省头。通过为头附加一个=(等号),后跟用户定义的文本,可以覆盖缺省头。写字段的顺序采用命令行中列格式指定的方式。字段宽度由系统指定,它至少为缺省的或用户定义的头文本宽度。如果头文本为空,(例如如果指定 -o user=),字段宽度至少为缺省头文本宽度。如果所有头字段都为空,不写头行。

系统标识下列字段说明符:

args
说明正在执行的完整命令名。包含所有命令行参数,尽管可能发生截断。该字段的缺省头为 COMMAND
bnd
表示进程或内核线程绑定到哪个(如果有)处理器。该字段的缺省头为 BND
class
表示为该进程分配的工作负荷管理类。该字段的缺省头为 CLASS
comm
表示正在执行的命令的短名称。不包含命令行参数。该字段的缺省头为 COMMAND
cpu
确定进程调度优先级。每次系统时钟周期和发现进程或线程运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。
etime
表示进程启动后所用的时间。所用时间以下列格式显示:

[[ dd-]hh:]mm:ss

其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。该字段的缺省头为 ELAPSED

group
表示该进程的有效组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 GROUP
nice
表示进程细调值的十进制值。该字段的缺省头为 NI
-o Format(续)
pcpu
表示使用的 CPU 时间占可用 CPU 时间的比例,以百分比表示。该字段的缺省头为 %CPU
pgid
表示进程组标识的十进制值。该字段的缺省头为 PGID
pid
表示进程标识的十进制值。该字段的缺省头为 PID
ppid
表示父进程标识的十进制值。该字段的缺省头为 PPID
rgroup
表示该进程的实际组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 RGROUP
ruser
表示该进程的实际用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 RUSER
scount
表示内核线程的暂挂数。该字段的缺省头为 SC
sched
表示内核线程的调度策略。该字段的缺省头为 SCH
tag
表示工作负荷管理器应用程序标记。该字段的缺省头为 TAG。该标记为一个字符串,它不超过 30 个字符长且由 ps 显示时可能会截断。对于不设置标记的进程,该字段显示为一个 -(连字符)。
tcpu
总 CPU 时间。指示单个进程的总累积 CPU 时间。该字段的缺省头为 TCPU
tctime
总连接时间。指示登录会话可会活动时的时间总量。这仅在会话引导进程中才有意义。该字段的缺省头为 TCTIME
tdiskio
总磁盘 I/O。指示单个进程的 I/O 的总累积块数。该字段的缺省头为 TDISKIO
-o Format(续)
thcount
表示该进程拥有的内核线程数。该字段的缺省头为 THCNT
THREAD
表示下列字段:
  • 用户名(uname 字段)
  • 进程的进程及父进程标识(pidppid 字段)
  • 线程的内核线程标识(tid 字段)
  • 进程或内核线程的状态(S 字段)
  • 进程或内核线程的 CPU 利用率(C 字段)
  • 进程或内核线程的优先级(PRI 字段)
  • 进程或内核线程的暂挂数( scount 字段)
  • 进程或内核线程的等待通道( WCHAN 字段)
  • 进程或内核线程的标志(F 字段)
  • 进程的控制终端(tty 字段)
  • 进程或内核线程绑定到的 CPU (bnd 字段)
  • 正在由进程执行的命令(comm 字段)

使用 -o THREAD 标志实际上不显示线程,除非也指定 -m 标志。

tid
表示内核线程的线程标识。该字段的缺省头为 TID
time
表示进程启动后的累计 CPU 时间。时间以下列格式显示:

[ dd-]hh:mm:ss

其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。该字段的缺省头为 TIME

tty
表示该进程的控制终端名。该字段的缺省头为 TT
user
表示该进程的有效用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 USER
vsz
使用十进制整数表示虚拟内存中进程的大小,以千字节为单位。该字段的缺省头为 VSZ
-o Format(续)

否则,通过 Format 变量,可以显示指定格式的多个字段,包括字段描述符。如果在 Format 变量中使用字段描述符,它必须包含在双引号(" ")内。下表显示了字段描述符如何对应字段说明符:

字段            字段            缺省值
描述符 说明符 头

%a args COMMAND
%c comm COMMAND
%t etime ELAPSED
%G group GROUP
%n nice NI
%C pcpu %CPU
%r pgid PGID
%p pid PID
%P ppid PPID
%g rgroup RGROUP
%u ruser RUSER
%x time TIME
%y tty TTY
%U user USER
%z vsz VSZ
-p Plist 仅显示关于 Plist 变量指定的进程号的进程的信息。 Plist 变量或者是一个由逗号分隔的进程标志号列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的进程标识号列表。
-t Tlist 仅显示与 Tlist 变量中列出的工作站相关的进程的信息。 Tlist 变量或者是一个由逗号分隔的工作站标识符列表或者是一个双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的工作站标识符列表。
-U Ulist 仅显示关于 Ulist 变量指定的用户标识号或登录名的进程的信息。 Ulist 变量或者是一个由逗号分隔的用户标识列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的用户标识列表。在该列表中,ps 命令显示数字用户标识除非使用 -f 标志;然后命令显示登录名。该标志与 -u Ulist 标志等价。另见 u 标志。
-u Ulist 该标志与 -U Ulist 标志等价。

选项

下列标志前面不是 -(负号):

a 显示所有有终端的进程的信息(通常仅显示用户自己的进程)。
c 显示命令名,它存储在系统内用于记帐,而不显示保留在进程地址空间中的命令参数。
e 显示环境以及传递给命令的参数,最多不超过 80 个字符。
ew e 标志折行显示一额外行。
eww e 标志折行显示必要次。
g 显示所有进程。
l 显示一个长列表,具有 FSUIDPIDPPIDCPRINIADDRSZPSSWCHANTTYTIMECMD 字段。
n 显示数字输出。在长列表中,数字地而不是符号地打印 WCHAN 字段。在用户列表中,USER 字段替换为 UID 字段。
s 显示基本输出格式中每个进程(由系统维护人员使用)的内核栈的大小(SSIZ)。对于多线程进程,该值总为 0(零)。
t Tty 显示进程,它的控制 tty 为 Tty 变量的值,它应该指定为 ps 命令打印;也就是,0 对于终端 /dev/tty/0lft0 对于 /dev/lft0pts/2 对于 /dev/pts/2
u 显示面向用户的输出。这包括 USERPID%CPU%MEMSZRSSTTYSTATSTIMETIMECOMMAND 字段。
v 显示 PGINSIZERSSLIMTSIZTRS%CPU%MEM 字段。
w 为输出指定一宽列格式(132 列而不是 80 列)。如果重复,(例如, ww),任意地使用宽输出。此信息用于决定要打印的长命令有多少。
x 显示没有终端的进程除了有一个控制终端的进程。

退出状态

该命令返回以下出口值:

0 成功完成。
>0 发生错误。

示例

  1. 要显示所有进程,请输入:
    ps -e -f
  2. 要列出特定用户拥有的进程,请输入:
    ps -f -l -ujim,jane,su
  3. 要列出与 /dev/console/dev/tty1 ttys 相关的进程,请输入:
    ps -t console,tty/1
  4. 要列出与终端无关的进程,请输入:
    ps -t -
  5. 要使用字段描述符显示指定的格式,请输入:
    ps -o ruser,pid,ppid=parent,args

    输出为:

    RUSER   PID     parent  COMMAND
    helene 34 12 ps -o ruser,pid,ppid=parent,args
  6. 要使用字段描述符显示指定的格式,请输入:
    ps -o "< %u > %p %y : %a"

    输出为:

    < RUSER  >      PID     TT :    COMMAND
    < helene > 34 pts/3 : ps -o < %u > %p %y : %a
  7. 要显示关于由当前终端控制的进程和内核线程的信息,请输入:
    ps -lm

    输出类似于:

         F S UID  PID PPID  C PRI NI ADDR  SZ WCHAN   TTY  TIME  CMD
    240003 A 26 8984 7190 1 60 20 2974 312 pts/1 0:00 -ksh
    400 S - - - 1 60 - - - - - -
    200005 A 26 9256 8984 15 67 20 18ed 164 pts/1 0:00 ps
    0 R - - - 15 67 - - - - - -
  8. 要显示关于所有进程和内核线程的信息,请输入:
    ps -emo THREAD

    输出类似于:

    USER   PID  PPID  TID S  C PRI SC   WCHAN   FLAG   TTY BND  CMD
    jane 1716 19292 - A 10 60 1 * 260801 pts/7 - biod
    - - - 4863 S 0 60 0 599e9d8 8400 - - -
    - - - 5537 R 10 60 1 5999e18 2420 - 3 -
    luke 19292 18524 - A 0 60 0 586ad84 200001 pts/7 - -ksh
    - - - 7617 S 0 60 0 586ad84 400 - - -
    luke 25864 31168 - A 11 65 0 - 200001 pts/7 - -
    - - - 8993 R 11 65 0 - 0 - - -

文件

/usr/bin/ps 包含 ps 命令。
/etc/passwd 指定用户标识信息。
/dev/pty* 表示工作站(PTY)名称。
/dev/tty* 表示工作站(TTY)名称。

相关信息

kill 命令和 nice 命令。

《AIX 5L V5.2 性能管理指南》 中的 Using ps to Identify CPU-Intensive Programs

System V ps 命令

语法

/usr/sysv/bin/ps [ -a ] [ -A ] [ -c ] [ -d ] [ -e ] [ -f ] [ -j ] [ -l ] [ -L ] [ -P ] [ -y ] [ -g pgrplist ] [ -o format ] [ -p proclist ] [ -s sidlist ] [ -t termlist ] [ { -u | -U } uidlist ] [ -G grplist ]

描述

ps 命令打印关于活动进程的信息。不使用标志,ps 打印与控制终端相关的进程的信息。输出包含进程标识、终端标识符、累计执行时间和命令名。随着标志的变化相应地显示信息。

输出

取决于 ps 命令使用的标志,列标题随着显示的信息变化。标题定义在下列列表中(使这些标题显示的标志在圆括号中显示):

F (-l)
与进程相关的标志(十六进制和添加的)或线程(如果指定了 -L 选项)。与进程和线程相关的部分更重要 F 字段标志(十六进制和添加的)显示在下表中:
F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SKPROC 0x00000200 表示一个内核进程。
SEXIT 0x00010000 表示正退出进程。
SEXECED 0x00200000 表示已运行该进程。
SEXECING 0x01000000 表示该进程正在执行(执行一个可执行程序)。
TKTHREAD 0x00001000 表示该线程是一个仅内核线程。
注:
通过分别在/usr/include/sys/proc.h/usr/include/sys/thread.h 文件中查询 p_flagst_flags 字段,能看到所有进程和线程的定义。
S (-l)
进程或内核线程的状态:

对于进程:

O
不存在
A
活动
W
已交换
I
空闲
Z
已取消
T
已停止

对于内核线程:

O
不存在
R
正在运行
S
正在休眠
W
已交换
Z
已取消
T
已停止
UID (-f,- l)
进程的用户标识号(登录名在 -f 选项下打印)。
PID (all)
进程的进程标识。
PPID (-f,-l)
父进程的进程标识。
CLS (-c)
进程的调度类。仅在使用 -c 标志时打印。
NI (-l)
sched_other 策略计算优先级中使用的进程细调值。
PRI (-c, -l)
进程或内核线程的优先级。数字越大,优先级越低。
ADDR (-l)
通常情况下,包含进程栈的段号;如果为内核进程,则为预处理数据区的地址。
SZ (-l)
进程的核心映像的页面大小。
WCHAN(-l)
进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。
STIME (-f,-u)
进程的启动时间。LANG 环境变量控制该字段的外观。
TTY (all)
进程的控制工作站。
-
进程与工作站不相关。
?
未知
TIME (all)
进程的执行时间总和。
LTIME (-L)
单个 LWP 的执行时间。
CMD (all)
包含命令名。使用 -f 标志显示完整命令名和它的参数。
LWP (-L)
内核线程的 tid。
NLWP(-Lf)
进程中核心线程的数目。
PSR (-P)
绑定内核线程的处理器(如果有)的逻辑处理器号。对一个进程来说,如果它的线程全都绑定到同一处理器上,则显示该字段。
RSS (-ly)
进程的实际内存(驻留集)大小(单位是页)。

格式

下表描述了系统标识的字段描述符。可以连同 -o 标志使用这些字段描述符来指定 ps 命令的输出格式。

系统标识的字段描述符为:

addr
通常情况下,表示进程栈的段号;如果为内核进程,则为预处理数据区的地址。该字段的缺省头为 ADDR
args
说明正在执行的完整命令名。包含所有命令行参数,尽管可能发生截断。该字段的缺省头为 COMMAND
c
每次系统时钟周期和发现进程或线程运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,CPU 利用率用于确定进程调度优先级。大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。该字段的缺省头为 C
class
表示内核线程的调度策略。策略为 sched_other、sched_fifo 和 sched_rr。该字段的缺省头为 CLS
comm
表示正在执行的命令的短名称。不包含命令行参数。该字段的缺省头为 COMMAND
etime
表示进程启动后所用的时间。所用时间以该格式显示:
[[ dd -] hh: ]mm :ss
其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。

该字段的缺省头为 ELAPSED

f
与进程相关的标志(十六进制和添加的)。该字段的缺省头为 COMMAND
fname
表示进程的可执行文件的基础名的前 8 个字节。该字段的缺省头为 COMMAND
gid
使用一个十进制整数表示该进程的有效组标识号。该字段的缺省头为 GID
group
表示该进程的有效组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 GROUP
lwp
表示该内核线程的线程标识。该字段的缺省头为 TID
nice
表示进程细调值的十进制值。该字段的缺省头为 NI
nlwp
表示该进程拥有的内核线程数。该字段的缺省头为 THCNT
pcpu
表示使用的 CPU 时间占可用 CPU 时间的比例,以百分比表示。该字段的缺省头为 %CPU
pgid
表示进程组标识的十进制值。该字段的缺省头为 PGID
pid
表示进程标识的十进制值。该字段的缺省头为 PID
pmem
表示进程使用的实际内存的百分比。该字段的缺省头为 %MEM
ppid
表示父进程标识的十进制值。该字段的缺省头为 PPID
pri
表示进程或内核线程的优先级;数字越大优先级越低。该字段的缺省头为 PRI
psr
表示绑定内核线程的处理器(如果有)的逻辑处理器号。该字段的缺省头为 PSR
rgid
使用一个十进制整数表示该进程的实际组标识号。该字段的缺省头为 RGID
rgroup
表示该进程的实际组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 RGROUP
rss
表示该进程的实际内存(驻留集)大小(单位是 1 KB)。该字段的缺省头为 RSS
ruid
使用一个十进制整数表示该进程的实际用户标识号。该字段的缺省头为 RUID
ruser
表示该进程的实际用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 RUSER
s
表示该进程的状态。该字段的缺省头为 S
sid
表示会话导带的进程标识。该字段的缺省头为 SID
stime
表示进程的启动时间。LANG 环境变量控制该字段的外观。该字段的缺省头为 STIME
time
表示进程启动后的累计 CPU 时间。时间显示的格式同 etime 中的格式。该字段的缺省头为 TIME
tty
表示该进程的控制终端名。该字段的缺省头为 TT
uid
使用一个十进制整数表示该进程的有效用户标识号。该字段的缺省头为 UID
user
表示该进程的有效用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 USER
vsz
使用一个十进制整数表示该进程的核心映像,以千字节为单位。该字段的缺省头为 VSZ
wchan
表示该进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。

该字段的缺省头为 WCHAN

标志

部分标志接受列表作为参数。列表中的项或者可使用逗号分隔或者使用双引号引起来且之间用逗号或空格分隔。 proclistpgrplist 的值必须为数字。

-a 将关于所有进程(除了会话导带和与终端无关的进程)的信息写到标准输出。
-A 将关于所有进程的信息写到标准输出。
-c 以反映调度程序属性的格式打印信息。 -c 标志影响 -f-l 标志的输出,描述如下。
-d 将关于所有进程(除会话导带)的信息写到标准输出。
-e 将除内核进程以外所有进程的信息写到标准输出。
-f 生成一个完整列表。
-g pgrplist 仅将关于在由 pgrplist 指定的进程组中的进程的信息写到标准输出。 pgrplist 的值必须为数字。
-G grplist 仅将关于由 grplist 指定的进程组中的进程的信息写到标准输出。 -G 标志接受组名。
-j 显示会话标识和进程组标识。
-l 生成一长列表。
-L 打印进程中活动线程的状态。
-o format format 变量指定的格式显示信息。可以为非 format 变量指定多个字段说明符。可以连同 -o 标志一起使用的字段说明符的描述在 Format 节的上面。
-p proclist 仅显示关于 proclist 指定的进程号的进程的信息。 proclist 的值必须为数字。
-P 显示进程的主内核线程绑定到的处理器(如果有)的逻辑处理器号。
-s sidlist 显示会话导带标识由 sidlist 指定的所有线程。
-t termlist 仅显示与 termlist 指定的终端相关的进程的信息。
-u uidlist 仅显示关于 uidlist 指定的用户标识号或登录名的进程的信息。
-U uidlist 仅显示关于 uidlist 指定的用户标识号或登录名的进程的信息。
-y 当与 -l 选项结合时,改变长列表以便它以千字节打印"RSS"和"SZ"且不打印"F"和"ADDR"字段。

退出状态

该命令返回以下出口值:

0 成功完成。
>0 发生错误。

示例

  1. 要显示所有进程,请输入:
    ps -e -f
  2. 要列出用户"guest"拥有的进程,请输入:
    ps -f -l -u guest 
  3. 要列出与 /dev/pts/0/dev/pts/1 终端相关的进程,请输入:
    ps -t pts/0,pts/1
  4. 要列出与终端无关的进程,请输入:
    ps -t -
  5. 要使用字段说明符显示指定的格式,请输入:
    ps -o ruser,pid,ppid,args
  6. 要显示关于进程中所有内核线程的信息,请输入:
    ps -L
  7. 要显示所有进程的会话标识和进程组标识,请输入:
    ps -jA
  8. 要显示调度类和进程的优先级,请输入:
    ps -c -l 
  9. 要显示进程中内核线程的信息及内核线程数,请输入:
    ps -L -f 
  10. 要显示进程或内核线程绑定到的处理器,请输入:
    ps  -P

文件

/usr/sysv/bin/ps 包含 System V R4 ps 命令。
/etc/passwd 包含用户标识信息。
/dev/pty* 表示工作站(PTY)名称。
/dev/tty* 表示工作站(TTY)名称。

  (1)显示10个消耗cpu最多的进程
  # ps aux |head -1 ;ps aux |sort -rn +2 |head -10

  (2)显示10个消耗内存最多的进程

  #ps vx |head -1 ;ps vx |grep -v PID |sort -rn +6 |head -10

  (3)显示10个换页最多的进程

  #ps vx |head -1 ;ps vx |grep -v PID |sort -rn +4 |head -10

  (4)显示10个消耗存储空间最多的进程

  #ps aux |head -1 ;ps aux |sort -rn +3 |head -10

Oracle With 语句语法及示例

| No Comments

Starting in Oracle9i release 2 we see an incorporation of the SQL-99 "WITH clause", a tool for materializing subqueries to save Oracle from having to re-compute them multiple times.

The SQL "WITH clause" is very similar to the use of Global temporary tables (GTT), a technique that is often used to improve query speed for complex subqueries. Here are some important notes about the Oracle "WITH clause":

   • The SQL "WITH clause" only works on Oracle 9i release 2 and beyond.
   • Formally, the "WITH clause" is called subquery factoring
   • The SQL "WITH clause" is used when a subquery is executed multiple times
   • Also useful for recursive queries (SQL-99, but not Oracle SQL)

To keep it simple, the following example only references the aggregations once, where the SQL "WITH clause" is normally used when an aggregation is referenced multiple times in a query.

We can also use the SQL-99 "WITH clause" instead of temporary tables. The Oracle SQL "WITH clause" will compute the aggregation once, give it a name, and allow us to reference it (maybe multiple times), later in the query.

The SQL-99 "WITH clause" is very confusing at first because the SQL statement does not begin with the word SELECT. Instead, we use the "WITH clause" to start our SQL query, defining the aggregations, which can then be named in the main query as if they were "real" tables:

WITH
subquery_name
AS
(the aggregation SQL statement)
SELECT
(query naming subquery_name);


Retuning to our oversimplified example, let's replace the temporary tables with the SQL "WITH  clause" (Note:  You may find a faster execution plan by using Global Temporary tables, depending on your release of Oracle):

WITH sum_sales AS
  ( select /*+ materialize */  sum(quantity) all_sales from stores ),
number_stores AS 

( select /*+ materialize */  count(*) nbr_stores from stores ),
sales_by_store AS
  ( select /*+ materialize */   store_name, sum(quantity) store_sales from  store natural join sales )
SELECT   store_name
FROM   store,   sum_sales,   number_stores,   sales_by_store
where   store_sales > (all_sales / nbr_stores);


Note the use of the Oracle undocumented "materialize" hint in the "WITH clause". The Oracle materialize hint is used to ensure that the Oracle cost-based optimizer materializes the temporary tables that are created inside the "WITH" clause. This is not necessary in Oracle10g, but it helps ensure that the tables are only created one time.

It should be noted that the "WITH clause" does not yet fully-functional within Oracle SQL and it does not yet support the use of "WITH clause" replacement for "CONNECT BY" when performing recursive queries.

To see how the "WITH clause" is used in ANSI SQL-99 syntax, here is an excerpt from Jonathan Gennick's great work "Understanding the WITH Clause" showing the use of the SQL-99 "WITH clause" to traverse a recursive bill-of-materials hierarchy

The SQL-99 "WITH clause" is very confusing at first because the SQL statement does not begin with the word SELECT. Instead, we use the "WITH clause" to start our SQL query, defining the aggregations, which can then be named in the main query as if they were "real" tables:

WITH
subquery_name
AS
(the aggregation SQL statement)
SELECT
(query naming subquery_name);


Retuning to our oversimplified example, let's replace the temporary tables with the SQL "WITH" clause":

Link: http://www.dba-oracle.com/t_with_clause.htm


Improving Query Performance with the SQL WITH Clause
   

Oracle9i significantly enhances both the functionality and performance of SQL to address the requirements of business intelligence queries. The SELECT statement's WITH clause, introduced in Oracle9i, provides powerful new syntax for enhancing query performance. It optimizes query speed by eliminating redundant processing in complex queries.

Consider a lengthy query which has multiple references to a single subquery block. Processing subquery blocks can be costly, so recomputing a block every time it is referenced in the SELECT statement is highly inefficient. The WITH clause enables a SELECT statement to define the subquery block at the start of the query, process the block just once, label the results, and then refer to the results multiple times.

The WITH clause, formally known as the subquery factoring clause, is part of the SQL-99 standard. The clause precedes the SELECT statement of a query and starts with the keyword "WITH." The WITH is followed by the subquery definition and a label for the result set. The query below shows a basic example of the clause:

WITH channel_summary AS
  ( SELECT channels.channel_desc,
       SUM(amount_sold) AS channel_total
    FROM sales, channels
    WHERE sales.channel_id = channels.channel_id
    GROUP BY channels.channel_desc )
SELECT channel_desc, channel_total
FROM channel_summary
WHERE channel_total >
  ( SELECT SUM(channel_total) * 1/3
    FROM channel_summary );

This query uses the WITH clause to calculate the sum of sales for each sales channel and label the results as channel_summary. Then it checks each channel's sales total to see if any channel's sales are greater than one third of the total sales. By using the new clause, the channel_summary data is calculated just once, avoiding an extra scan through the large sales table.

Although the primary purpose of the WITH clause is performance improvement, it also makes queries easier to read, write and maintain. Rather than duplicating a large block repeatedly through a SELECT statement, the block is localized at the very start of the query. Note that the clause can define multiple subquery blocks at the start of a SELECT statement: when several blocks are defined at the start, the query text is greatly simplified and its speed vastly improved.

The SQL WITH clause in Oracle9i significantly improves performance for complex business intelligence queries. Together with the many other SQL enhancements in Oracle9i, the WITH clause extends Oracle's leadership in business intelligence.

More Info

Oracle9i SQL Reference: Chapter 17 - SELECT Statement
Oracle9i Data Warehousing Guide: Chapter 18 - SQL for Aggregation in Data Warehouses


Link: http://www.oracle.com/technology/products/oracle9i/daily/oct10.html


在rman增量备份中,有差异增量和累积增量的概念

    1、概念

    差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式
    累积增量:是备份上级备份以来所有变化的块

    因为累积增量是备份上级备份以来所有变化的数据块,所以累积增量需要更多的备份时间,同时需要较小的恢复时间;而差异增量正好相反,它可以备份同级备份以来变化的数据块。所以会减少备份时间,但需要更多的恢复时间.oracle 9中增量备份需要通过扫描整个数据库的数据块才能知道哪些数据块发生了变化,这是一个代价很大,时间很长的过程,而且由于增量备份形成多个不同的备份集,使恢复变得更加不可靠,所以增量备份在版本9中仍然不被推荐使用;在10g中,增量备份作了很大的改进,不需要再扫描所有数据块就能得知哪些数据块发生变化,从而大大提升备份效率。但这些却以牺牲磁盘i/o为代价,所以在oltp事务系统中还得衡量是否愿意以i/o为代价来保证安全及高可用性。10g还支持增量合并,增量备份可支持7级增量。

    2、备份策略及恢复

    以rman多级增量备份来作为备份策略例子:

    增量备份都需要一个0级备份来作为基础,0级备份与全备份的区别在于0级可以用来增量恢复,而全备份则不可以。

    备份策略:

    eg:我们对一星期做如下备份策略  ,那么差异增量只需要使用星期天的0级,星期三的一级,星期四、五的二级就可以恢复,累积增量则需要星期天的0级、星期三的1级,星期五的二级即可进行恢复。以上是一个星期的备份策略,如果做长期的备份策略则只需要把备份的时间延长即可得到新的备份策略,具体需要看自己备份及恢复能够接受的程度而顶,见最后的备份策略典型案例。

星期

差异增量

累积增量

星期天

0

0

星期一

2

2

星期二

2

2

星期三

1

1

星期四

2

2

星期五

2

2

星期六

2

2

星期天

0

0

 

    备份命令如下:

    零级备份
    backup incremental level 0 database;
    一级差异增量
    backup incremental level 1 database;
    一级累计增量
    backup incremental level 1 cumulative database;

    备份策略典型案例:

    每半年做一个数据库的全备份(包括所有的数据和只读表空间)
    每一个月做一次零级备份(不包含只读表空间)
    每个星期做一次一级备份
    每天做一次二级备份

    任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)
    建议备份一段时间归档日志定期备份归档到到磁带上

    全库备份脚本  

 run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup full tag
'dbfull' format '/u01/oradata/backup/full%u_%s_%p' database
    include current controlfile;
    sql
'alter system archive log current';
    backup filesperset 3 format
'/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #
备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }

    零级备份脚本 

 run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup incremental level 0 tag
'db0' format '/u01/oradata/backup/db0%u_%s_%p'
    database skip readonly;
    sql
'alter system archive log current';
    backup filesperset 3 format
'/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #
备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }


    一级备份脚本 

    run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup incremental level 1 tag
'db1' format '/u01/oradata/backup/db1%u_%s_%p'
    database skip readonly;
    sql
'alter system archive log current';
    backup filesperset 3 format
'/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #
备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }

 
 
    如果按照以上备份策略,则每天的所需要备份的数据量只有一天的改变量。而做恢复时最多要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文件。如果不能接受这样的恢复时间,可以减少零级备份之间的时间间隔。在每次备份后,原则上在该备份点之前的归档日志就可以删除掉了,但是为了进一步的安全以及日后需要(如使用LOGMNR查找所需信息),建议有条件的话,归档日志保存到能够接受的时间点,可以保存在磁带等廉价存取设备上。


一个哥们在邮电设计院做工程的论文。
老师不懂,问:如何检测两个微波塔之间通信畅通!
答曰:爬到一个塔顶,如果能够看到另外一个,即可。(微波直线传播)
老师汗ing。

老师:如果螺杆转速低时电动机功率怎么样?
学生:这个问题没有考虑到,请老师指教
老师:是这样的....................................(......的内容有20分钟)
答辩完毕。拿了个良,上面的是第一个问题,也是最后一个。

偶答辩的时候是十几个人一同轮流上台答辩,到最后一个是一个女生,我们前面答辩的
基本都是站立在前面口述一番就可以了,偶这个女同学架势很生猛,拿起粉笔就在黑板
上写写画画了起来,因为是最后一个了,老师们都在底下聊天没人细听,该女生直接就
点了某老师的名,大叫:"xxx,用心听讲!",底下所有老师和同学先是一愣,继而
一起笑倒......

老师(一个不懂网络的):你用一句话描述你的软件。
我:定时自动检测校园网的网络流量。
老师:多长时间来一次?量大吗?
我:......

进场,4个老师(俩副教授,一教授??据说是刚来不久的院士,一个讲师)挂好图纸,呈上论文,然后开始自叙。规定说5分钟,我说了30秒就没话了,然后传说中的院士说了句:用
cad出的图很清爽啊,明年的毕业设计应该规定他们都用cad。其余随声符合,然后其中一
个老师对我说可以走了,就这样就可以走了?!靠,整个过程没人理过我,晕

老师:你已经找到工作了?
偶: 是的...
老师:多少钱一个月啊??
偶: .......3.....3000多一点,试用...
老师: 不错啊,说不定以后我们还得给你打工呢!
偶: .....................................................

毕业设计是无线电汽车防盗锁
答辩刚说玩题目
几个老师就自己讨论起来了
我只能陪着笑一路点头
最后他们觉得时间差不多了
停止了讨论
说出了一句可能是一辈子都记得的话
同学,你还有什么问题没有。。。。。。。
我:?¥%#¥......%?#

老师:你这个怎么实现啊?
偶:对不起,本文只是分析一下web service的原理和应用基础,至于具体怎么实现的不在
本文考虑范围之内......
老师:好了,你可以下来了......

同学答辩罗嗦,教师不耐烦,提醒说:你控制一下时间。他连忙拿起他做的电路板,指着
一处说到:控制时间的在这里!

提问时间,
一个德高望重的老师发话了:"你叫。。。"
答辩的zt抢着回答:"我叫xx"
老师缓缓的说出了下半句:"你叫外行人都听不明白"
顿时,我们这些旁听的人差点笑翻了。各位答辩的老师也是强忍住没笑

去年答辩的时候,班上的一个牛人上台
侃了一个小时的音乐(我们是计算机系的)
从声波讲到机械波
然后来一句
"最后放一首我自己翻唱的歌《大地》"
叮叮咣咣......!·#¥¥%
底下的老师楞是一个问题也没来得及问就傻了
不过他也过了。

呵呵,我一个师姐作毕设时被抽到系里答辩,她的专业是生物医学,当时
  隶属电机系,但电机的那帮老师对于生医的知识几乎一窍不通。
   答辩那天,师姐在上面讲得慷慨激昂,底下一帮老师郁闷地听天书,最后
  轮到提问了,一个电机的老师犹豫了半天,指着一张实验用狗的生理数据表
问:
   "这个表格旁边的"犬"字是什么意思?"
   师姐顿时莫名惊诧,以为那个老师准备为难她,想了半天战战兢兢地说:
   "是......狗的意思。"
   于是答辩结束了,师姐还得了优。

我做的一个MIS,开始老师就狂说,做系统啊,一定要考虑安全性、容错性,
  然后就问:如果突然断电,你的系统能保证安全吗?
  郁闷的不行了,就说:不光是断电没考虑,机器还可能被偷走呢,管理员还
会被车撞死呢,我只做软件,其他的不关我事!
  老师眼睛瞪得大大的,彻底服了
  还好后来还是得了个优,呵呵

俺们学校有个本科大牛,本科期间sci十余篇,INF 3。0以上第一作者三篇答
辩时候随便撤点东西就来了,一博导问他为什么不把他做的那种功能材料做成固
体,大哥解释一通后来一句,基本上外行才会把它做成固体。

老师:你的电动机怎么没有保护啊~~
  同学:这个............这个不在我设计的范围内。
  老师:那么电动机电流过大,我们就任由它烧掉了?
  同学:恩~~~~~很抱歉,看来我们只好任由它烧掉了 。

偶的一个女同学暴牛,规定答辩时间是20分钟,等她到了20分钟时老师还在继
续文问题,只见她看了下表,说了声时间到了,然后就收拾东西走人

先自我陈述了几分钟.然后提问.结果老师之间起了争论,谁也不服谁.把我凉
在一边.几分钟后答辩结束.我一个问题也没回答


引言

AIX® 虚拟内存管理器 (AIX VMM) 是一种基于分页的虚拟内存管理器。一个分页就是一个固定大小的数据块。分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。

AIX VMM 有一个非常独特的方面,即缓存的文件数据的管理。AIX VMM 将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。它将文件数据缓存为分页,就如同进程的虚拟内存一样。

AIX 根据需要将分页映射到实际内存。如果应用程序引用了某个分页,而该分页并没有映射到实际内存中,那么系统将产生一个缺页。为了解决缺页,AIX 内核会将所引用的分页加载到实际内存中的某个位置。如果所引用的分页是一个新的分页(也就是说,位于先前从未引用过的进程数据堆中的分页),那么"加载" 所引用的分页只需要用零来填充一个实际内存位置(也就是说,提供一个填满零的分页)。如果所引用的分页是一个预先存在的分页(也就是说,文件中的某个分 页、或者先前换出的某个分页),那么加载所引用的分页需要从磁盘(分页空间或者磁盘文件系统)中将该分页读入到实际内存中的某个位置。

在将分页加载到实际内存中之后,它将被标记为未经修改的。如果某个进程或者内核修改了该分页,那么该分页的状态将更改为已修改的。这允许 AIX 跟踪在将某个分页加载到内存之后是否对其进行过修改。

随 着系统将更多的分页添加到实际内存中,实际内存中空闲位置(可以包含分页)的数目将会减少。也可以将空闲位置的数目称为空闲分页框架的数目。当空闲分页框 架的数目达到某个较低的值时,AIX 内核就必须清空实际内存中的某些位置,以便重用新的分页。这个过程也称为分页替换。

AIX VMM 提供了一些后台守护进程,专门负责进行分页替换。其中一个分页替换守护进程称为 lrud(显示为 ps -k 的输出中的 lrud)。lrud 守护进程负责在内存分页中进行扫描,并回收某些分页以便为实际内存腾出空间。当分页替换守护进程确定它希望回收某个特定的分页时,这个分页替换守护进程将执行下面两项操作中的一项:

  • 如果该分页经过了修改,那么分页替换守护进程将该分页写入到辅助存储位置(例如,分页空间或者文件系统磁盘)。将包含该分页的物理内存块标记为空闲,并为其它的分页做好重用的准备。
  • 如 果该分页没有经过修改,那么分页替换守护进程可以简单地将物理内存块标记为空闲,这样一来,就可以将该物理内存块重用于另一个分页。在这种情况下,分页替 换守护进程不需要将该分页写入到磁盘,因为该分页在内存中的版本并没有经过修改,因此与位于磁盘中(在分页空间中、或者在磁盘文件系统中)的分页副本完全 相同。

分页替换守护进程可以根据系统内存的使用情况和可调参数,选择不同类型的分页进行回收。本文剩下的部分将详细地介绍分页替换守护进程如何选择要进行回收的分页。

分页类型

从本质上看,AIX 中一共有两种分页类型:

  • 工作存储分页(Working storage pages)
  • 永久存储分页(Permanent storage pages)

工作存储

工作存储分页是一些包含易变 数据(换句话说,即重新启动后将不复存在的数据)的分页。在其他的平台中,工作存储内存有时也称为匿名 内存。下面提供了一些由工作存储分页组成的虚拟内存区域的示例:

  • 进程数据
  • 堆栈
  • 共享内存
  • 内核数据

当需要将经过修改的工作存储分页替换出(从内存移动到磁盘)时,它们将被写入到分页空间。不会将工作存储分页写入到文件系统。

当进程退出时,系统将释放其所有的私有工作存储分页。因此,当进程退出时,系统将释放进程数据和堆栈的工作存储分页。对于共享内存区域,直到删除共享内存区域之后,才会释放其工作存储分页。

永久存储

永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。这种永久数据就是文件数据。因此,永久存储分页就是缓存在内存中的部分文件。

当经过修改的永久存储分页需要换出(从内存移动到磁盘)的时候,会将它写入到文件系统中。如前所述,可以直接释放没有经过修改的永久存储分页,无需将其写入到文件系统中,因为文件系统包含该数据的原始副本。

例 如,如果一个应用程序正在读取某个文件,那么该文件数据将缓存于永久存储分页的内存中。这些永久存储分页没有经过修改,这意味着并没有在内存中对这些分页 进行修改。因此,内存中的永久存储分页与磁盘中的文件数据完全相同。当 AIX 需要清空内存的时候,它只需要"释放"这些分页即可,而不将任何内容写入到磁盘。如果应用程序对某个文件进行写操作(而不是读操作),那么永久存储分页将 是"经过修改的",并且 AIX 必须在释放这些分页之前将其刷新到磁盘。

您可以将永久存储分页划分为两种子类型:

  • 客户端分页
  • 非客户端分页
非客户端分页是一些包含缓存的日志文件系统 (JFS) 文件数据的分页。非客户端分页有时也称为持久性分页。客户端分页是一些包含所有其他文件系统(例如,JFS2 和网络文件系统 (NFS))的缓存数据的分页。

分页分类

为了帮助分页替换守护进程更好地选择用来进行替换的分页,AIX 将分页分为下面两种类型:

  • 计算性分页
  • 非计算性分页

计算性分页是一些用于文本、数据、堆栈和进程的共享内存的分页。非计算性分页是一些包含正在进行读取和写入的文件的文件数据的分页。

如何对分页进行分类

所有的工作存储分页都是计算性的。不会将工作存储分页标记为非计算性的。

永 久存储分页既可以是计算性的、也可以是非计算性的,这取决于您使用这些分页的方式。如果一个文件包含某个进程的可执行文本,那么系统会将该文件视为计算性 的,并且将该文件中的所有永久存储分页都标记为计算性的。如果该文件不包含可执行文本,那么系统会将该文件视为非计算性的,并且将该文件中的所有永久存储 分页都标记为非计算性的。

当您第一次打开一个文件的时候,AIX 内核将创建一个内部 VMM 对象以代表该文件。并且将其标记为非计算性的,这意味着所有的文件在一开始都是非计算性的。

随着程序对该文件进行读写操作,AIX 内核将该文件的数据作为非计算性的永久存储分页在内存中进行缓存。

如果关闭该文件,那么 AIX 内核将继续在内存中(在永久存储分页中)缓存该文件的数据。内核继续缓存该文件是为了提高性能;例如,如果稍后出现了另一个进程,并且它也使用了相同的文件,那么该文件数据仍然位于内存中,并且 AIX 内核不需要从磁盘读入该文件的数据。

如 果某个文件因为指令取出发生了缺页,那么会将非计算性文件转换为计算性状态。当对某个文件出现进程缺页(意味着该进程引用了文件的部分内容,而这部分内容 当前没有缓存在永久存储分页的内存中)的时候,该进程将产生一个缺页。如果是由于指令取出而导致的缺页(意味着该进程正在尝试加载来自该分页的指令,以便 进行相关操作),那么内核会将该文件标记为计算性的。这涉及到将该文件中的所有分页都标记为计算性的。一个文件要么完全是计算性的,要么完全是非计算性 的。

在将文件标记为计算性文件之后,它将一直保持为计算性文件,直到删除该文件(或者重新启动系统)。因此,即使移动了该文件、或者对它进行了重命名,该文件仍然标记为计算性的文件。

分页替换

AIX 分页替换守护进程一次扫描内存的一个分页,找出要回收的分页以释放内存。分页替换守护进程必须仔细地选择分页,以便将分页对系统的性能影响降到最低,并且分页替换守护进程将根据可调参数设置和系统情况来选择不同类型的分页。

您可以使用大量的可调参数来控制 AIX 选择分页进行替换的方式。

minpermmaxperm

minpermmaxperm 是两个最基本的分页替换可调参数。这两个可调参数用于指出 AIX 内核应该使用多少内存来缓存非计算性的分页。maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。

在缺省情况下,maxperm 是一个"非严格的"限制,这意味着在某些情况下可以超出这个限制。将 maxperm 设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm 可调参数设置为 1,就可以使 maxperm 限制成为"严格"的限制。当 maxperm 是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm 的限制。因此,将 maxperm 作为严格限制的缺点是,非计算性分页的数目不能超出 maxperm 的限制,并且在系统中具有空闲内存的时候,也不能使用更多的内存。

minperm 限制指出应该用于非计算性分页的最低内存量。

非计算性分页的数目称为 numpermvmstat -v 命令可以显示系统的 numperm 值所占系统实际内存的百分比。

下面的图 1 给出了有关这些可调参数在不同的系统条件下如何进行工作的概况:


图 1. minpermmaxperm 限制

当非计算性分页的数目(numperm)大于或者等于 maxperm 的时候,AIX 分页替换守护进程严格地选择非计算性分页(例如,缓存的非可执行文件)进行操作。

当非计算性分页的数目(numperm)小于或者等于 minperm 的时候,AIX 分页替换守护进程将选择计算性分页和非计算性分页进行操作。在这种情况下,AIX 将扫描两类分页,并且回收近来较少使用的分页。

当非计算性分页的数目(numperm)在 minpermmaxperm 之间的时候,lru_file_repage 可调参数将控制 AIX 分页替换守护进程替换的分页类型(请参见图 2)。

lru_file_repage


图 2. lru_file_repage 可调参数

numpermminpermmaxperm 之间的时候,如果 lru_file_repage 可调参数设置为 1,那么 AIX 分页替换守护进程将根据其内部重新分页表来确定选择何种类型的分页进行操作。

AIX 内核维护了一个重新分页表,以便确定哪些分页在换出后将很快地换入。当内核将一个分页换出、然后再将其换入的时候,通常表示这个分页经常会被使用,并且该 分页应该保留在内存中。内核记录了对计算性分页重新分页的次数,以及对非计算性分页重新分页的次数。然后,AIX 内核可以使用这个信息来确定哪一类分页的重新分页工作更加频繁(因而,表示这一类分页正在频繁地使用)。当 lru_file_repage 可调参数设置为 1 时,AIX 内核使用这个重新分页信息来确定是否仅选择非计算性的分页进行操作、或者选择计算性的和非计算性的分页进行操作。如果计算性分页的重新分页速度比非计算性 分页的重新分页速度高,那么 AIX 内核将仅选择非计算性的分页进行操作(因为计算性分页的使用更为频繁)。如果非计算性分页的重新分页速度比计算性分页的重新分页速度高,那么 AIX 内核将选择计算性的分页和非计算性的分页进行操作。

在大多数的客户环境中,最理想的方式是始终让内核只选择非计算性的分页进行操作,因为与对非计算性的分页(即数据文件缓存)进行分页相比,对计算性的分页(例如,进程的堆栈、数据等等)进行分页通常会对进程产生更大的性能开销。因此,可以将 lru_file_repage 可调参数设置为 0。在这种情况下,当 numpermminpermmaxperm 之间的时候,AIX 内核始终选择非计算性的分页进行操作。

maxclient

除了 minpermmaxperm 可调参数之外,还有一个 maxclient 可调参数。maxclient 可调参数指定应该用于缓存非计算性客户端分页的最大内存量的限制。因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以 maxclient 限制必须始终小于或者等于 maxperm 限制。

非计算性客户端分页的数目称为 numclientvmstat -v 命令可以显示系统的 numclient 值占系统实际内存的百分比。

在缺省情况下,maxclient 限制是严格的限制。这意味着,AIX 内核不允许非计算性的客户端文件缓存超出 maxclient 限制的范围(也就是说,AIX 内核不允许 numclient 超出 maxclient)。当 numclient 达到 maxclient 限制时,AIX 内核将采用特殊的、仅客户端的模式开始分页替换。在这种仅客户端的模式中,AIX 分页替换守护进程将严格地选择客户端分页进行操作。

监视系统的内存使用情况

AIX 提供了几种工具,可用于提供系统中不同分页的计数信息。

vmstat 命令

vmstat 命令可以报告关于系统的内存使用信息,以及诸如分页替换这样的 VMM 操作的统计信息。

使用带 -v 选项的 vmstat 命令可以显示不同分页类型所使用的实际内存百分比(请参见清单 1):


清单 1. vmstat -v 命令
# vmstat -v
4980736 memory pages
739175 lruable pages
432957 free pages
1 memory pools
84650 pinned pages
80.0 maxpin percentage
20.0 minperm percentage <<- system's minperm% setting
80.0 maxperm percentage <<- system's maxperm%
setting

2.2 numperm percentage << % of memory containing
non-comp. pages

16529 file pages <<- # of non-comp. pages
0.0 compressed percentage
0 compressed pages
2.2 numclient percentage <<- % of memory containing
non-comp. client pages

80.0 maxclient percentage <<- system's maxclient%
setting

16503 client pages <<- # of client pages
0 remote pageouts scheduled
0 pending disk I/Os blocked with no pbuf
0 paging space I/Os blocked with no psbuf
2484 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
0 Virtualized Partition Memory Page Faults
0.00 Time resolving virtualized partition memory page faults


因此,在上面的示例中,一共有 16529 个非计算性的文件分页被映射到了内存中。这些非计算性的分页使用了 2.2% 的内存。在这 16529 个非计算性的文件分页中,有 16503 个是客户端分页。

vmstat 输出没有提供关于计算性文件分页的信息。关于计算性文件分页的信息,可以使用 svmon 命令搜集得到。

svmon 命令

还有另一个命令可用于显示关于系统内存使用的信息,即 svmon 命令。svmon 命令支持大量不同的选项,这些选项用于提供有关系统内存使用的详细信息。

svmon 命令的 -G 选项可以显示不同类型分页所使用的内存量的信息(请参见清单 2):


清单 2. svmon 命令的 -G 选项
# svmon -G
size inuse free pin virtual
memory 786432 209710 576722 133537 188426
pg space 131072 1121

work pers clnt
pin 133537 0 0
in use 188426 0 21284

PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 103966 1121 68929 82682
m 64 KB - 6609 0 4038 6609

要了解系统实际内存的使用情况,svmon 显示了下面三列:

  • work----工作存储
  • pers----持久性存储(持久性存储分页都是非客户端分页,即 JFS 分页。)
  • clnt----客户端存储

对于每种分页类型,svmon 将显示下面两行:

  • inuse----映射到内存中的 4K 分页的数目
  • pin ----映射到内存中的、且固定的 4K 分页的数目(pin 是 inuse 的子集)

因此,在上面的示例中,一共有 188426 个工作存储分页映射到内存中。在这 188426 个工作存储分页中,有 133537 个是固定的(也就是说,不能换出的)。

示例中显示没有持久的存储分页(因为系统中没有使用 JFS 文件系统)。一共有 21284 个客户端存储分页,它们中没有一个是固定的。

svmon 命令没有显示永久存储分页的数目,但这个数目可以由 svmon 的输出计算得到。如前所述,永久存储分页的数目是持久性存储分页数目和客户端存储分页数目的总和。因此,在上面的示例中,系统中一共有 21284 个永久存储分页:

0 persistent storage pages + 21284 client storage pages = 21284 permanent storage pages

svmon 所报告的信息类型与 vmstat 有一点不同。svmon 报告不同类型内存分页的数目信息,包括工作的、持久的(即非客户端的)和客户端的。svmon 并没有提供计算性分页和非计算性分页的对比信息。svmon 只报告每种分页类型在内存中分页的总数。

与此相反,vmstat 可以提供非计算性分页和计算性分页的对比信息。

为了说明这个区别,可以考虑上面的 svmon 输出示例。这 21284 个客户端分页中的某些分页将是计算性的,而这 21284 个客户端分页中剩下的那些分页将是非计算性的。要确定这些客户端分页在计算性和非计算性之间的划分,可以使用 vmstat 命令来确定这 21284 个客户端分页中有多少分页是非计算性的。

显示并且设置可调参数

vmo 命令用于与 VMM 可调参数进行交互。vmo 命令可以用于显示关于可调参数的信息,以及设置可调参数的值。

要显示所有 VMM 可调参数的当前值,可以运行带 -L 选项的 vmo 命令:

# vmo -L

要显示所选 VMM 可调参数的当前值,可以使用 -L 选项以列出可调参数的名称。例如,下面的命令快照显示了列出 minperm%maxperm%maxclient%lru_file_repage 可调参数当前值时的输出(请参见清单 3):


清单 3. 可调参数
# vmo -L minperm% -L maxperm% -L maxclient% -L lru_file_repage

NAME CUR DEF BOOT MIN MAX UNIT TYPE
DEPENDENCIES
--------------------------------------------------------------------------------
lru_file_repage 1 1 1 0 1 boolean D
--------------------------------------------------------------------------------
maxclient% 80 80 80 1 100 % memory D
maxperm%
minperm%
--------------------------------------------------------------------------------
maxperm% 80 80 80 1 100 % memory D
minperm%
maxclient%
--------------------------------------------------------------------------------
minperm% 20 20 20 1 100 % memory D
maxperm%
maxclient%


表 1. 可调参数:列描述
描述
CUR这个列用于列出可调参数的当前值。
DEF这个列用于列出缺省值。
BOOT这个列用于列出可调参数在系统启动时的值。
MIN这个列用于列出可调参数的最小值。
MAX这个列用于列出可调参数的最大值。
UNIT这个列用于说明可调参数的单位。

vmo 命令支持即时更改可调参数的值、或者将更改可调参数值的操作延迟到重新启动系统之后进行。要更改上面的可调参数,使这些更改立即生效,并且在以后重新启动时能够生效,可以指定 -p 选项。下面提供了一个示例(请参见清单 4):


清单 4. -p 选项
# vmo -p -o lru_file_repage=0 -o maxclient%=90 -o maxperm%=90 -o minperm%=3

Setting minperm% to 3 in nextboot file
Setting maxperm% to 90 in nextboot file
Setting maxclient% to 90 in nextboot file
Setting lru_file_repage to 0 in nextboot file
Setting minperm% to 3
Setting maxperm% to 90
Setting maxclient% to 90
Setting lru_file_repage to 0

建议的可调参数设置

如果 VMM 分页替换守护进程仅选择非计算性分页进行操作,那么大多数工作负载都将从中获益。因此,下面所推荐的可调参数将为大多数工作负载情况提供最佳的性能(请参见清单 5):


清单 5. 具有最佳性能的可调参数
lru_file_repage = 0
maxperm = 90%
maxclient = 90%
minperm = 3%
strict_maxclient = 1 (default)
strict_maxperm = 0 (default)

可以使用 vmo 命令设置这些可调参数(请参见清单 6):


清单 6. 使用 vmo 命令设置的可调参数
# vmo -p -o lru_file_repage=0 -o maxclient%=90 -o maxperm%=90 -o minperm%=3
# vmo -p -o strict_maxclient=1 -o strict_maxclient=0

可以使用 vmo -L 命令来查看这些设置。

这些可调参数设置适用于 AIX Version 5.2 和 AIX Version 5.3。要在 AIX Version 5.2 中设置这些可调参数,需要使用 AIX Version 5.2 TL6 或者更高版本。要在 AIX Version 5.3 中设置上面的可调参数,需要使用 AIX Version 5.3 TL1 或者更高版本。

上述可调参数设置是 AIX Version 6.1 的缺省设置。

结束语

AIX VMM 根据使用情况对分页进行分类。您可以使用各种系统可调参数来控制 AIX 分页替换守护进程的行为,并控制 AIX 处理不同类型分页的分页替换的方式。对 AIX VMM 进行优化,可以使得各种工作负载获得明显的性能改善。

原文链接: http://www.ibm.com/developerworks/cn/aix/library/au-vmm/


在儿童常见病中,中耳炎发病率仅次于感冒。据统计,四分之三的幼儿在3岁以前至少经历一次耳内感染,其中近一半的孩子可能会感染三次以上。

儿童容易感染中耳炎与其耳部结构有关
儿童特别是3岁以下的幼儿耳部结构尚未发育完善,尤其是连接中耳和咽部的咽鼓管,不仅仅是一个连接的导管,还具有调节中耳腔的压力、引流中耳分泌物的功能。小儿的咽鼓管和成人有很大的区别,不仅形态上不似成人的咽鼓管长而成角,而是短、宽、平;而且位置低
当孩子患呼吸道感染时,致病菌非常容易通过咽鼓管进入到中耳,引起中耳炎。感冒时,鼻内黏膜受到刺激后,导致连接中耳、咽喉和鼻腔的咽鼓管肿胀,从而使内部通路变窄、积液排流能力降低。当耳部无法及时排除感冒造成的黏液时,那里就形成了细菌滋生的最理想的温床。此外,婴儿吐奶、呛咳及拧鼻涕用力太猛时,也容易导致细菌从咽鼓管进入到中耳,从而引起化脓性中耳炎。有些父母给小儿掏挖耳朵,不小心损伤了外耳道黏膜或鼓膜导致了感染,也有可能蔓延到中耳发生炎症。


每逢季节转换的时候,气温变化较大,小儿感冒增多,中耳炎患儿也会增多
儿童中耳炎症状为剧痛、烦躁、哭闹。由于中耳炎一般在半夜发病,影响到小儿睡眠,还会出现睡眠失调症状。

可以从以下几个方面来分辨儿童是否患上了中耳炎:
一是患耳附近头部剧痛,不肯吃东西、哭闹,不愿入睡。耳朵的构造很特殊,里面是骨头,外面包着一层皮肤,两者间没有其他可起到缓冲作用的肌肉组织等。所以,中耳炎一旦发病,会剧痛难忍。婴儿虽然说不出来,可是只要动动嘴,不管是吸吮和吞咽动作,都会压迫感染部位感到疼痛。因此,宝宝可能会在吃东西时烦躁、哭闹,也可能不愿入睡。
二是发烧,中耳炎往往伴随着突然发烧,体温可升至37.8℃至40℃
三是看有无化脓,如果耳朵中流出黄色、白色或者含有血迹的液体,那么你的宝宝肯定是患上了中耳炎。流出的脓液说明原本留存于中耳的液体已经冲破了耳鼓。虽然这种症状对身体的危害并不像表面看起来那么可怕,但仍然需要到医院请医生做专业处理。
四是是否出现听力障碍,分泌性中耳炎不会流脓,可是有液体大量存留于中耳部位,可能给宝宝造成暂时性的听力障碍。具体的表现为,他可能会把电视机的音量放得比平时更大,或者经常会要求你重复刚刚讲过的话。

如何预防中耳炎?
专家指出,积极预防感冒或尽可能缩短感冒周期是避免儿童患中耳炎的最佳措施。要做到这一点,正确处理以下几个环节尤为重要:
  1.让宝宝的鼻腔尽可能保持清洁。如果宝宝的年龄和能力允许的话,应该教会他自己用手帕或纸巾经常擤鼻子;对于年龄尚小的孩子,可以用医用吸耳球帮宝宝吸除鼻腔中黏液。同时,医生还特别推荐给孩子的鼻腔中滴入一些润舒剂以保持鼻腔畅通。

  2. 晚间在孩子的卧室内使用喷雾加湿器。空气干燥会引起鼻腔干燥甚至发炎,造成咽鼓管肿大、阻塞。请注意,加湿器必须要保持清洁,否则很可能适得其反。另外,你也可以采用以温热的毛巾为宝宝敷鼻子以减轻鼻腔的肿胀和阻塞。

  3.如果宝宝鼻塞得比较厉害,睡觉时可将头部垫得高一些,以便积聚于鼻腔内的黏液不至于流到咽鼓管内。对于一周岁以内的婴儿,可以将婴儿床的床头一端用电话簿之类的东西垫高一些;对于一周岁以上大一些的孩子,可以用比平时厚一点的枕头将头部垫高即可。

  4.及时注射流感疫苗。少含奶嘴少吸二手烟,可减少患中耳炎风险

对一个DBA或需使用exp,imp的普通用户来说,在我们做exp的过程中可能经常会遇到EXP-00091 Exporting questionable statistics.这样的EXP信息,其实它就是exp的error message,它产生的原因是因为我们exp工具所在的环境变量中的NLS_LANG与DB中的NLS_CHARACTERSET不一致。

step 01 查看DB中的NLS_CHARACTERSET的值(提供两种方法):

select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'
or
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

PARAMETER     VALUE
-----------------------  ----------------------------------------------
NLS_CHARACTERSET ZHT16BIG5

step 02 根据step 01查出的NLS_CHARACTERSET(ZHT16BIG5)来设定exp的环境变量:

WINNT> set NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5
LINUX> export NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5

附上exp-91的oracle error message 解决方案说明:

oerr exp 91
00091, 00000, "Exporting questionable statistics."
// *Cause: Export was able export statistics, but the statistics may not be
// usuable. The statistics are questionable because one or more of
// the following happened during export: a row error occurred, client
// character set or NCHARSET does not match with the server, a query
// clause was specified on export, only certain partitions or
// subpartitions were exported, or a fatal error occurred while
// processing a table.
// *Action: To export non-questionable statistics, change the client character
// set or NCHARSET to match the server, export with no query clause,
// export complete tables. If desired, import parameters can be
// supplied so that only non-questionable statistics will be imported,
// and all questionable statistics will be recalculated.

原文: http://vongates.itpub.net/post/2553/18625

About this Archive

This page is an archive of entries from April 2009 listed from newest to oldest.

March 2009 is the previous archive.

May 2009 is the next archive.

回到 首页 查看最近文章或者查看所有归档文章.