[分享]技术支持:UNIX虚拟内存,分页和交换解释_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 5113 | 回复: 0   主题: [分享]技术支持:UNIX虚拟内存,分页和交换解释        下一篇 
shunzi
注册用户
等级:上尉
经验:782
发帖:133
精华:0
注册:2011-10-10
状态:离线
发送短消息息给shunzi 加好友    发送短消息息给shunzi 发消息
发表于: IP:您无权察看 2012-1-13 17:59:14 | [全部帖] [楼主帖] 楼主

技术支持:UNIX虚拟内存,分页和交换解释

====================================================================

了解和衡量在UNIX操作系统上的内存使用情况.====================================================================

规划Oracle安装时,它往往是必要的,以计划为内存要求。要做到这一点,这是必要的,以了解UNIX操作系统的系统上的进程之间的分配和管理物理和虚拟内存。

------------------------------

I。虚拟内存和分页

------------------------------

现代UNIX操作系统都支持虚拟内存。虚拟内存是1961年左右开发出一种技术,它允许一个进程的大小超过可用的物理内存量。(这个过程是正在运行的程序的一个实例。)虚拟内存也允许系统上的所有进程的大小的总和超过机器上可用的物理内存量。(对比与运行MS - DOS或Apple Macintosh系统,其中的物理内存量的限制单个进程的大小和同步进程的总数。)

虚拟内存的全面讨论超出了本文的范围。背后的虚拟内存的基本思路是,一个特定的过程是在主存储器(RAM),其余的过程是存储在磁盘上的唯一部分。在一个虚拟内存系统,用于程序不直接引用到物理内存的内存地址。相反,程序使用虚拟地址,这是由操作系统和内存管理单元(MMU)到物理内存(RAM)地址翻译。这项计划的工程,因为大多数程序只能使用其地址空间的一部分,在任何一个时间。

现代的UNIX系统使用基于分页的虚拟内存系统。传呼系统,虚拟地址空间被分为大小相等的块称为页。单一页面的实际大小是依赖特定的硬件平台和正在使用的操作系统:4K和8K的页大小是常见的。虚拟地址到物理地址的翻译是通过虚拟页映射到物理页。当一个进程引用一个虚拟地址,MMU的数字出虚拟页包含地址,然后查找,虚拟页对应的物理页。

两件事情之一,在这一点上是可能的:物理页被加载到RAM中,或在磁盘上。如果在RAM中的物理页,过程中使用它。如果磁盘上的物理页,MMU产生一个缺页。操作系统查找的页面在磁盘上,在这一点上,找到一个释放RAM中的物理页,拷贝到RAM磁盘页,讲述了关于新的映射的MMU,并重新启动的指令产生的页错误。

请注意,虚拟到物理页翻译的过程是无形的。“的过程中,认为”作为自己的整个虚拟地址空间时,它指的是一个地址,它发现在该地址的内存。所有的虚拟到物理地址的翻译和所有页面错误处理执行代表的过程中,由MMU和操作系统。这并不意味着,页面错误,没有任何效果。由于处理页面故障需要阅读从磁盘,一个过程,需要很多页面错误页面将运行比一个不慢得多。

在一个虚拟内存系统中,只有一个进程的虚拟地址空间的一部分映射到RAM中,在任何特定时间。在寻呼系统,这个概念是正规化的进程的工作集。进程的工作集是简单的页面,这个过程是在一个特定的时间点使用。进程的工作集将随时间而改变。这意味着,一些页面错误会发生,是正常的。此外,由于工作集的变化随着时间的推移,随着时间的推移工作集的变化,以及大小。操作系统的分页子系统试图保持在进程的工作设置在RAM中的所有网页,从而最大限度地减少了页故障数,并保持高性能。同样的道理,操作系统试图保持页面在磁盘上的工作集,以便让RAM的最高金额为其他进程。

回想一下从上面当一个进程产生一个缺页,操作系统必须阅读缺席的页面从磁盘到RAM。这意味着,操作系统必须选择用于此目的的RAM页。在一般情况下,可能不会有免费的物理RAM页,操作系统将不得不读成一个物理页,已在使用新的一页的数据。的选择,其中在使用新的数据页,以取代被称为页面置换政策。

整本书都是在不同的页面置换政策和算法编写的,所以,其中的一个充分的讨论超出了本文的范围是。重要的是要注意,但是,一般类的页面替换策略有两种:局部和全局。在本地的页面替换政策,这个过程是分配一定数量的物理页,页面时发生故障,操作系统,发现内分配给该进程的页面设置页。在一个全球性的页面替换政策,当发生页错误的操作系统来查找进程的一个免费的网页,在系统中的所有进程。

有了解分页的若干关键点。

(1)通常情况下,只有一个页面的数量相对较少(一般为10%-50%)是在一个单一的过程及其工作组在任何一个时间(因此在物理内存中)。

(2)在RAM中的物理页的位置不承担任何关系无论任何进程的虚拟地址空间中的页面的位置。

(3)大多数实现的分页允许多个进程之间共享一个单一的物理页。换句话说,如果操作系统能够确定这两个内容(或更多)虚拟页是相同的,只有一个单一的物理内存页是需要这些虚拟页。

(4)由于工作集大小随时间的变化,一个进程的需要,以及随时间变化的物理内存量。空闲进程需要内存,如果同样的过程,开始操纵一个大的数据结构(可能在某些用户输入的响应),它的RAM需求将飙升。

(5)存在一个正式的证明,这是不可能从一个程序的静态分析,以确定工作集大小。您必须运行的程序,以确定其工作集。如果该方案的工作组根据其输入(这是几乎总是如此)两个进程的工作集会有所不同,如果进程有不同的输入。

---------------------------

II。在Unix上的虚拟内存

---------------------------

虚拟内存和分页上面的讨论是一个非常普遍的问题,并在它的所有报表适用于任何系统,实现了虚拟内存和分页。一个寻呼和UNIX上的虚拟内存实现全面讨论超出了本文的范围。此外,不同的UNIX供应商实行不同的分页子系统,因此,您需要联系您为您的UNIX机器上的分页算法的精确信息的UNIX供应商。不过,也有某些关键功能的UNIX寻呼系统的UNIX端口之间的一致。

进程运行在一个虚拟地址空间,透明和UNIX内核管理系统上的所有进程的物理内存的分页。因为UNIX使用虚拟内存和分页,通常只有一个过程的一部分是在RAM中,而其余的磁盘上的过程。

1)系统内存映射

在UNIX系统上的物理内存是分为三种用途。是专门用于操作系统的内核使用的内存的某些部分。其余的内存,有的则是专门为使用的I / O子系统(这就是所谓的缓冲区缓存),其余的页面池。

有些版本的UNIX静态分配的系统内存的大小,缓冲区高速缓存,和页面池,在系统启动时,,而其他版本这三者之间的动态移动内存在运行时,根据系统负载。(尤其是您的UNIX版本的详细信息,请咨询您的UNIX系统供应商。)

过程中使用的物理内存页池出来。此外,UNIX内核分配一定量的系统内存,每个数据结构的过程中,允许它保持这一过程的跟踪。这种存储器通常不超过几页。如果您的系统内存的大小是固定在开机时,你可以完全忽略这种用法,因为它不来的页面池。如果您的系统内存的大小是在运行时动态调整,你也可以通常忽略这种用法,因为它是由Oracle软件的页面池的要求相形见绌。

2)全球寻呼策略

UNIX系统实施一个全球性的寻呼策略。这意味着操作系统将在系统上的所有进程看,当是代表一个进程的物理内存页。这种策略具有许多优点,一个关键的缺点。

一个全球性的寻呼策略的优点是:(1)空闲进程可以完全调出,所以不成立可以更好地由另一个进程使用的内存页面。(2)一项全球战略可以为更好地利用系统内存,每个进程的页分配将更加贴近他们的实际工作集大小。(3)进程或用户页配额管理的行政开销是完全不存在。 (4)实施更小,更快。

缺点是一个全球性的战略,是一个品行不良的单个进程可能影响到系统上的所有进程的性能,简单地分配和使用大量的页面。

3)文本和数据页

UNIX进程概念上可以分为两部分,文本和数据。文本部分中包含的机器指令执行过程中,数据部分包含一切。这两个部分进程的虚拟地址空间中占据不同领域。文本和数据页是由寻呼子系统管理。这意味着,在任何时间点,只有一些文本页面,只有一些任何给定的进程的数据页在RAM中。

不同的UNIX对待文字页和数据页。由于文本页面通常是由一个过程的同时修改它执行,文字的网页标记为只读。这意味着操作系统将产生一个错误,如果一个进程试图写入一个文本页面。(一些UNIX系统提供的能力,编译一个程序,它不具有只读文本:。“LD”和“a.out的”咨询手册页)

文本页面是事实只读允许UNIX内核执行两个重要的优化:运行同一程序的所有进程之间共享文本页面,文本页面分页文件系统,而不是从寻呼区。进程之间共享的文本页面,减少所需的RAM运行同一程序的多个实例。例如,如果有五个进程正在运行Oracle Forms的,只有一个页的文字是需要所有五个过程。

如果有五十或五百强进程中运行Oracle Forms的情况也是如此。从文件系统中的寻呼意味着没有需要任何文本页面分配的分页空间。当一个文本页面调出,它仅仅是过度写入RAM中;如果是分页在稍后时间在原来的文本页面是在文件系统中的程序映像。

另一方面,数据页必须读/写,并因此不能在进程之间共享(一般)。这意味着,每道工序必须有其自己的每一个数据页的副本。此外,因为一个进程可以修改它的数据页,数据页调出时,它必须被写入到磁盘之前,它是在RAM编写。数据页写入磁盘专门保留的部分。由于历史原因,这个分页空间是所谓的“交换空间”在UNIX上。不要让这个名字迷惑你:交换空间用于分页。

4)交换空间的使用

UNIX内核负责管理数据页是在RAM和交换空间。交换空间分为交换页,这是同样大小的RAM页面。例如,如果一个特定的系统有一个4K的页面大小,专门交换空间40M,这个交换空间将被划分成10240交换页

换页可以在三种状态之一:它可以是免费的,分配或使用。“免费”页交换可被视为一个磁盘上的页面分配。“分配”页交换已分配给一个特定的页面在一个特定的进程虚拟磁盘页面,但没有数据已写入到磁盘上的页面 - 也就是说,相应的内存页面尚未被分页出来。一个“拿来主义”页交换是一个交换页面包含从RAM已分页的数据。“拥有”它释放相应的虚拟页面的过程中不释放,直到一个交换页。

大多数UNIX系统上,交换页分配时,虚拟内存分配。如果一个进程请求额外的(虚拟)内存1M,UNIX内核发现1M交换空间中的页面,并分配给一个特定的进程,标志着这些网页。如果在未来某个时间的RAM的特定页面,必须调出,交换空间已经分配给它。换句话说,每一个虚拟的数据页是“备份”交换空间的页面。

这一战略的一个重要后果是,如果所有的交换空间分配,没有更多的虚拟内存可以分配。换句话说,交换空间的系统上的数量限制在系统上的虚拟内存的最大金额。如果没有可用的交换空间,和一个过程,使更多的虚拟内存的要求,那么请求就会失败。请求也将失败,如果有一些可用的交换空间,但数量少于所要求的数额。

有四个系统调用分配的虚拟内存:这是使用fork(),exec()的,sbrk()和shmget的()。当这些系统调用失败,系统错误代码为EAGAIN。与EAGAIN相关的文本信息往往是“没有更多的进程”。(这是因为EAGAIN也用来表示每个用户或全系统进程限制已经达到了。)如果你曾经遇到的过程是因为EAGAIN错误失败的情况下,一定要检查可用的金额以及交换的进程数。

如果系统运行的交换空间,只有两种方法来解决这个问题:您可以终止某些进程(最好是那些使用了大量的虚拟内存),或可以添加交换空间到您的系统。添加交换空间系统的方法不同的UNIX变体:您的操作系统文档或供应商的详细信息咨询。

5)共享内存

UNIX系统实施,Oracle服务器使用共享内存。在UNIX共享内存实现进程可以创建和附加的共享内存段。在一个特定的虚拟地址,共享内存段连接到进程。一旦共享内存段附加到一个进程,可以在该地址的内存读取和写入就像任何其他进程的地址空间内存。与“正常”的虚拟内存,写入共享内存段地址的更改都是可见的重视该段的每一个过程。

共享内存的数据页,就像“常规”内存。其他的事实,即多个进程都使用相同的数据页,寻呼子系统不治疗有什么不同比常规内存共享内存页。Swap空间是保留一个共享内存段在分配时,在RAM内存中的页面被调出,如果他们在不使用时,就像常规的数据页。之间定期的数据页和页面共享数据的处理,唯一的区别是,共享页面只分配一次,无论多少进程正在使用的共享内存段。

6)一个进程的内存使用情况

当讨论一个进程的内存使用情况,确有两种类型的内存使用情况来考虑:使用虚拟内存和物理内存使用率。

进程的虚拟内存使用量是分配给进程的虚拟文本页的总和,加上分配给进程的虚拟数据页的总和。每一个非共享的虚拟数据页为它分配一个相应的页面交换空间。有没有全系统的限制,虚拟文本页面交换空间的大小和系统上的虚拟数据页的数量是有限的。对全系统的基础上,而不是每一个进程的基础上的共享内存段分配,但分配交换页和分页在非共享数据完全一样,同样的方式从交换设备。

一个进程的物理内存使用情况,是该进程的物理页文本的总和,再加上该进程的物理数据页的总和。运行相同的可执行映像的所有进程之间共享物理页文本,和物理数据共享内存使用的页面之间的连接到相同的共享内存段的所有进程之间共享。因为UNIX实现了虚拟内存,一个进程的物理内存使用情况将低于虚拟内存的使用。

过程中使用的实际的物理内存量取决于操作系统的分页子系统的行为。与虚拟内存使用的一个过程,这将是相同的每一个特定的程序与一个特定的输入运行时间,一个过程的物理内存使用情况取决于其他一些因素。

第一:因为工作集的一个过程随着时间的推移变化过程中所需要的物理内存量会随时间而改变。二:如果这个过程是等待用户输入的,它需要的物理内存量会大幅度下降。(这是一个工作集的尺寸变化的特殊情况。)第三:实际分配给进程的物理内存量取决于整个系统的负载。如果一个进程正在运行负载较重的系统,那么全球的页分配政策往往会分配给该进程是非常接近的工作集大小的物理内存页的数量。如果运行相同的程序是相同的输入与系统负载较轻的,分配给该进程的物理内存页的数量往往比工作集大小:操作系统已经没有必要回收物理页从这个过程中,是不会这样做的。

这种净效应是任何物理内存使用的衡量标准是不准确的,除非你是模拟的输入和你要测试的最终系统的系统负荷。例如,一个Oracle Forms的进程的物理内存使用情况将有很大的不同,如果用户正在迅速3个大窗户之间移动,很少相同的三个窗口之间移动,迅速输入到一个单一的窗口,慢慢地输入到同一窗口,或如果他们正在读取数据的屏幕和过程是闲置 - 即使进程的虚拟内存使用量将保持不变。同样的道理,物理内存使用Oracle Forms的过程将是不同的,如果它是唯一系统上的活动过程,或如果它是第五十活跃在同一系统上的Oracle Forms的过程之一。

7)要点

有了解UNIX虚拟内存实现的若干关键点。

(1)在每一个过程的每一个数据页的“支持”交换空间的页面。这种交换空间的大小限制系统上的虚拟空间数据量;进程无法分配内存,如果没有足够的交换空间可以将它备份起来,不管多少物理内存是系统上可用。

(2)UNIX实现一个全球性的寻呼策略的。这意味着,分配给进程的物理内存量良莠不齐随着时间的推移,对进程的工作集和系统整体负载的大小而定。空闲进程可能会被完全调出一个繁忙的系统上。在负载较轻的系统进程可能会比他们为他们的工作集需要更多的物理内存分配。

(3)系统上可用的虚拟内存量是由该系统配置的交换空间量。交换所需的空间量等于在最大负荷时分配系统上的所有进程的虚拟数据的总和。

(4)物理内存分配的页面池,这是未分配给操作系统内核和缓冲区高速缓存的内存中的进程。页面池所需的物理内存量等于在系统上的所有进程的工作在最大负载时的物理页的总和。

----------------------------------

III。 UNIX进程的内存布局

----------------------------------

1)一个过程环节

上面的讨论中说,作为被分为两个区域,一个UNIX进程的文本和数据。这种划分是准确的分页子系统的讨论,因为寻呼子系统视为一个数据页的每一个非文本的页面。事实上,UNIX进程分为六个部分:文本,堆栈,堆,BSS,初始化数据,以及共享内存。每个时间段包含了不同类型的信息,并为不同的目的使用。

文本段是用于存储过程中执行的机器指令。文本段的网页,使被标记为只读,并运行相同的可执行映像的进程之间共享。从文本段的页面分页从文件系统中的可执行映像。文本段的大小是固定的在调用程序时,它不会增长或收缩在程序执行期间。

堆栈段是用来存储​​运行时执行堆栈。运行时程序堆栈包含激活记录的函数和过程,函数和过程参数和局部变量的数据。使堆栈段的页面标记为已读/写和私有的过程。从堆栈段的页面是分页到交换设备。堆栈段的初始大小通常是一个页面,如果过程中引用地址超出堆栈底操作系统将透明地分配堆栈段的另一个页面。

BSS段是用来存储​​静态分配的未初始化的数据。BSS段的网页,使标记为已读/写,是私人的过程,并在调用程序时初始化所有位为零。BSS段的页面是分页到交换设备。BSS段的大小是固定的在调用程序时,它不会增长或收缩在程序执行期间。

初始化的数据段是用来存储​​静态分配的已初始化数据。弥补初始化的数据段的页面标记为已读/写,以及私有的过程。从初始化的数据段的页最初读取从文件系统中的的初始化数据;如果它们已被修改,他们从此分页到交换设备上。初始化的数据段的大小是固定的在调用程序时,它不会增长或收缩在程序执行期间。

动态分配的数据段(或“堆”)包含已分配的过程,因为它运行的数据页,使用BRK()或者sbrk()系统调用。堆的页面标记为已读/写,是私人的过程,并初始化页面是分配给进程的所有位为零。从堆中页分页到交换设备。在程序启动时堆大小为零:它可以生长在程序执行过程中任意大。

大多数进程没有共享数据段。在那些共享数据段包含已连接到这个过程中,使用的shmat()系统调用的数据页。使用shmget的()系统调用创建的共享内存段。使共享数据段的页标记为已读/写,附加到共享内存段的所有进程之间共享,并初始化所有位为零的时间段的分配使用shmget()。从共享数据段的页分页到交换设备。动态分配共享内存段的系统上的进程,共享内存段的大小是固定的时间分配,但进程可以分配的共享内存段任意大。

2)每个进程的内存映射

六个部分组成的过程,可铺设在任意内存。内存布局的具体细节取决于CPU和特定的UNIX实现的设计架构。通常情况下,UNIX进程使用的处理器的整个虚拟地址空间。这个地址空间内,特定的地址是合法的,是为特定的细分。段以外的任何地址是非法的,任何试图读取或写信给他们,会产生一个“段违规”信号。

下图显示了一个典型的32位处理器的UNIX的每个进程的虚拟内存映射。请注意,此内存映射覆盖了整个机器的虚拟地址空间。在此图中,有一个“T”标记的区域是文本段,“S”表示堆栈段,“S”共享内存段,'H'堆'D'的初始化数据,和“B”的BSS的。空格表示非法地址。

+--------+-----+--------+----+---------------------+-------+----+----+
|tttttttt|sssss| |SSSS| |hhhhhhh|dddd|bbbb|
|tttttttt|sssss| ->> |SSSS| |tttttttt|sssss| |SSSS| |hhhhhhh|dddd|bbbb|
+--------+-----+--------+----+---------------------+-------+----+----+
0 2G


在这种特殊的实现,文本段中占有最低的虚拟地址,BSS占据最高。请注意,内存是奠定在这样一种方式,允许堆栈段和堆增长。栈“向上”,向着更高的虚拟地址,而堆的增长“向下”虚拟地址向低。还要注意的是共享内存段的位置是至关重要的:如果它是连接地址过低,它会防止堆栈增长,而如果是在过高的地址连接,它会阻止增长堆。

3)进程大小限制

所有的UNIX系统提供了一些方法限制进程的虚拟大小。请注意,这些限制只对虚拟内存的使用:有没有办法限制进程或进程组使用的物理内存量。

以SVR3为基础的系统,是一个全系统的数据段的虚拟大小的限制。改变这种限制通常要求您更改UNIX内核配置参数,并重新链接内核:检查您的作业系统文档细节。

在基于BSD或SVR4的系统,有一个堆栈段和数据段的大小默认限制。它有可能改变这些限制每一个进程的基础上;咨询getrlimit的手册页()和细节setrlimit()。如果您正在使用你的登录shell的C - shell的“限制”命令提供了这些系统调用的命令行界面。更改全系统的默认值通常需要您更改UNIX的内核配置参数,并重新链接内核:检查您的作业系统文档细节。

大多数系统还提供了一种方法来控制共享内存段的最大尺寸和数量,这通常涉及到改变了UNIX内核参数SHMMAX时,SHMSEG和SHMMNI的。再次,请咨询您的作业系统文档细节。

4)高水位标记的影响

回想一下,从上面的数据段的大小只能使用BRK()和sbrk()系统调用来改变。这些系统调用允许你增加或减少数据段的大小。然而,大多数方案,包括Oracle程序,不使用直接BRK()或者sbrk()。相反,他们使用了一对由操作系统供应商提供的库函数,所谓的malloc()和free()。

这两个函数一起使用,管理动态内存分配。这两项职能,保持供使用过程中的空闲内存池(称为舞台)。他们通过维护一个数据结构,描述了哪些部分堆在使用和可用。当进程调用malloc(),所要求的大小的内存块是从舞台上获得,并返回给调用函数。当进程调用free()的,以前分配块返回到竞技场以后调用malloc()的使用。

如果一个进程调用malloc()的请求大于最大空闲块目前在竞技场,malloc()的调用sbrk()放大舞台的大小,扩大堆。然而,大多数供应商的实现(免费)将不会收缩通过sbrk()返回到操作系统的内存大小的舞台。相反,他们只是在舞台上放置供以后使用()D内存。

这个执行的结果是,使用malloc()的进程库出现高水位标记效果:增长的进程的虚拟大小,但不缩水。一旦一个进程已分配使用malloc()的作业系统的虚拟内存,该内存将保持这一进程的一部分,直到终止。幸运的是,这种效果只适用于虚拟内存,迅速返回到竞技场的内存是分页和不分页,直到它通过malloc()重新分配。

-------------------------

IV。监控内存使用

-------------------------

说到底,只有两个上浆UNIX系统内存时,要与有关的事情:你有足够的RAM,并你有足够的交换空间吗?为了回答这些问题,有必要知道多少虚拟内存和系统上的每个进程正在使用多少物理内存。不幸的是,标准的UNIX进程监视工具不提供一种方法来可靠地确定这些数字。检查UNIX系统上的内存使用情况的标准工具是“规模”,“国际化学品安全方案”,“PS”,“vmstat的”和“PSTAT”。大多数SysV衍生的系统也将有“撞车”工具:大多数BSD派生的系统将允许您对UNIX内核中运行dbx的“。

“大小”实用工程执行程序中的图像的静态分析。它打印出的文字,BSS和初始化的数据段的虚拟内存大小。它并不试图确定栈和堆的大小,因为这两个大小可以相差很大,取决于程序的输入。由于栈和堆的总大小通常比BSS和初始化数据的综合规模较大的几百倍以上,这种方法是最不可靠的方法确定一个程序运行时的虚拟内存的要求。它也是在ICG的方法,用来确定Oracle程序的内存要求。一个有用的信息,您可以从“尺寸”的文本段的虚拟大小。由于从文件系统中的分页,文本段是知道的文本段的虚拟大小不会帮你的大小,无论是交换空间或RAM。

“IPCS”实用工具将打印出系统上的所有共享内存段的虚拟内存大小。使用“MB”标志,有下SEGSZ列打印段的大小。

“PS”实用程序将打印出有关目前系统上的任何进程积极的信息。在SYSV的系统,使用'PS'与'- L'会导致'PS',打印出的深圳字段,其中包含过程中的非文本在页面测量段,虚拟大小。基于BSD的系统,使用'PS'与'U'标志也将导致要打印的SZ领域。虽然这个数字是准确测量此过程中使用的虚拟内存,它是不准确的,如果该进程一直十分的共享内存段。这意味着,在上浆内存时,你必须减去从所有Oracle的后台和阴影进程使用的虚拟内存的SGA的大小(通过“国际化学品安全方案”,上述获得)。

基于SVR4的和基于BSD的系统,使用BSD风格的“PS”命令“- U”标志,也将导致要打印的RSS栏。此字段包含该进程的物理内存使用情况。

不幸的是,这个值是合并过程中的所有段的物理内存使用情况,以及不区分私人的过程和进程之间共享的页面的页。由于文本和共享数据页在进程间共享,这意味着,增加系统的所有进程的RSS大小将超过估计的系统所使用的物理内存量。这也意味着,如果您添加了系统的所有进程的RSS域,你很可能拿出一个数字大于您的系统上的RAM数量高达! RSS栏是多少RAM只有一个进程中运行的一个程序映像时,需要一个良好指标,它不会告诉你多少额外的RAM是必需的,当第二个进程运行相同的图像。

“PSTAT”实用工具也可以用来打印每个进程的信息。如果它有一个深圳或RSS领域,适用于“PS”输出相同的限制也适用于“PSTAT”输出。在某些版本的UNIX,“PSTAT”援引一个标志(通常是“- S”或“T”)会给你交换空间的使用信息。要小心!某些Unix版本将只能打印出多少交换空间,用于信息,而不是对已分配多少。你可以在这些机器上运行的交换,并PSTAT“仍然会告诉你,你有大量的交换提供。

“vmstat的”实用工具是用来打印出全系统信息寻呼子系统的性能。它的主要限制是,它并没有打印出每个进程的信息。“vmstat的”输出格式不同的UNIX端口:看的重点领域是那些措施的页面和页面每秒的事件。请记住,部分传呼活动是正常的,所以你必须自己决定什么样的数页或页的每第二种方式,你的页面池太小。

在SysV为基础的系统,“特区”实用是用来打印出各种各样的内核子系统的性能全系统信息。如“vmstat的”,其主要限制是,它并没有打印出每个进程的信息。'- R','- G'和'- P'选项是最有用的检查分页子系统的行为。

在SYSV的系统,“crash”工具可以让你直接检查操作系统的内核数据结构的内容。在基于BSD的系统,它通常可以使用内核调试器检查这些相同的数据结构。这些数据结构是硬件和操作系统特定的,所以你不会只需要一个一般的UNIX内部知识,但你也将需要该特定系统的内部的知识。不过,如果你有这方面的资料(和很大的耐心),它是可能得到“crash”,给你每个进程的基础上对虚拟和物理内存使用量的精确信息。

最后,还有各种公共领域和特定供应商的工具监视内存的使用。记住:你是一个工具,可以让你衡量一个进程的物理内存使用情况,以及它给你独立的文本段,共享内存段,和过程的其余部分使用的页数值。详细信息,请咨询您的作业系统供应商。

---------------------------- 

V。制定交换空间和RAM的标准

----------------------------

底线是,估计在UNIX机器上的虚拟和物理内存使用,这样做虽然有可能超过一门科学是一门艺术。

第一:你必须衡量你的实际应用。Oracle Forms的应用程序中的位图模式下运行,使用256色,16个全屏窗口,并检索成千上万的单个查询的记录,以及可能使用两个数量级以上的栈和堆的订单,比一个Oracle形式在字符模式下运行的应用程序使用一个窗口,只有在任何单一查询检索几十行。同样,与用户登录到数据库,但只有他们在任何一个时间执行查询第五十五百强服务器系统将有一个比一个有只有几百个用户登录到数据库中的所有的服务器系统RAM要求远远低于其中不断地执行查询和更新。

二:测量时物理内存使用情况,确保您的系统是重仓,因为它会在生产形势。它并没有很好的措施255运行Oracle的形式,如果所有255个进程正坐在输入的空闲等待进程的物理内存使用率 - 调出的所有进程等待输入。

调整交换空间的大小是相对比较容易。回想一下,虚拟数据的每一页必须与备份的交换页。这意味着,如果你能估计你的机器上最大的虚拟内存的使用,你必须确定你需要多少交换空间。深圳列使用“PS”命令,以确定系统上运行的进程的虚拟内存的使用。高水位可以成为你的盟友在此测量:一个进程,它很难,你可以运行,并看到有多高,你可以驾驶的SZ列的值。

加在一起的虚拟内存使用的系统进程,形成一个基线,然后计算每一个渐进的过程中使用的虚拟内存的最大金额(不要忘了算一个用户登录时会创建的所有过程,如壳,和任何专门的影子进程)。交换空间的要求仅仅是在最大负载时的所有进程的深圳列的总和。谨慎的系统管理员将增加10%的开销和紧急情况的交换空间的大小。

制定RAM规则是较为困难。首先,确定系统空间(这通常是在启动过程中的信息印)专用的RAM数量。请注意,调整操作系统的内核可能会增加系统空间所需的RAM数量。

接下来,确定缓冲区高速缓存所需的RAM数量。

最后,确定页面池所需的RAM数量。你会希望有足够的系统内存工作集的每一个活动的过程,使在任何时候都可以保持分页。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论