作者·2010-10-21 17:37
·

合理采用AIX内存分配与管理策略,提高应用系统健壮性

字数 7248阅读 5613评论 0赞 2

合理采用AIX内存分配与管理策略

提高应用系统健壮性

郑文平


1 概述

很多应用开发着可能会注意到您在AIX®操作系统的剩余内存很小,尤其在部署完应用系统并运行一段时间后。您也许会担心这么小的剩余内存是否是个危险的状态,当有新的计算请求时系统是否还能快速应对?事实上,纯粹的操作系统剩余内存并不代表系统的可用内存,在很多情况下,您不必担心,因为您还会发现在已经使用的内存中很大部分被用作了文件缓存(Cache)和读写缓存(Buffer),在AIX操作系统中,这是非常有必要的,因为他们可以提高我们的计算能力和处理请求的速度,当有新的计算请求过来时,操作系统本身会调度系统缓存用来计算,只有当大量的、并发的请求过来,而可供操作系统调度内存之间的转换的内存严重不足时,才会发生危险的情况。同时,另一个问题是:为什么系统会存在文件缓存?文件缓存多大才合适?如何控制计算内存与文件缓存的比例,才会既保证我们的高处理能力,又不会发生由于系统内存不足而导致的应用系统当机?本文将重点讨论采取合理的内存分配与管理策略来解决这个问题。

同时,在某些非正常情况下,我们可能还会发现CPU居高不下,例如100%CPU使用率可能会持续几分钟甚至十几分钟,严重时直接会当机。在系统架构师和软件工程师分析软件CPU需求时可能已经考虑到CPU的计算能力,这种居高不下的CPU使用率可能是由于应用程序或多或少存在问题比如用户反复请求时才会出现,还可能是瞬时用户请求确实过高造成的,在这种情况下,我们应该采取什么策略来保证这种非正常状态下的CPU状态来规避可能导致的由于CPU过高或不足而造成的当机?本文也会讨论这个问题。

2 AIX操作系统内存使用策略与调整方法

在对AIX®操作系统内存适用于分配策略作出决策之前,您必须了解AIX®的内存机制,这需要我们花一点时间来介绍一下AIX®的虚拟内存和虚拟内存管理器 (VMM)

2.1 AIX中的内存概述

作为一名系统管理员,您应该已经对有关内存的基本知识非常熟悉,如物理和虚拟内存之间的区别。您可能还不是很清楚 AIX® 中的虚拟内存管理器 (VMM) 是如何工作的、以及它与性能优化之间的关系如何。而且,在最近几年中,有一些优化命令和参数发生了变化,如果您较长时间没有使用 AIX 了,那么您可能会发现,您从前所熟悉的一些命令,现在甚至根本无法继续使用了。本文不会地介绍 AIX VMM以及优化 VMM 所需使用的各种优化命令,更多AIX®内存本身有话相关的内偶然那个,您可以查找相关知识库或与IBM联系,来了解这方面的内容,本文重点来讨论的是如何合理设置这些值,以便保证应用系统的健康与健壮性。

另外,无论您需要对哪个子系统进行优化,有一个方面是相同的,即优化系统您始终应该将其看作一个正在进行的进程。开始对系统进行监视的最佳时间是当您首次将系统应用到产品环境中并且正常运行时,而不是等到用户抱怨系统的性能非常糟糕的时候。如果您不了解系统正常运行时的情况,并以此作为基准,那么您可能永远也无法真正地确定是否出现了问题。而且,一次只应该进行一项更改,并且在进行了更改之后,应该尽快地捕获相关的数据并对其进行分析,以确定这项更改究竟带来了什么不同,如果存在的话。

2.2 AIX操作系统上的内存管理工具VMM

本节内容提供了与 AIX 有关的内存方面的概述。我将介绍 AIX 如何使用虚拟内存来寻址比系统中物理内存更大的内存。我还将说明 VMM 的工作方式以及它如何处理各种请求。

任何有关内存和 AIX 的介绍都必须以对 VMM 的描述作为开始。有时候,令 AIX 新手感到困惑的是,VMM 服务如何处理系统中所有的内存请求,而不仅仅是虚拟内存本身。在访问 RAM 时,VMM 需要分配空间,即使是在系统中有足够的物理内存的情况下。它实现了分页空间的预分配过程。使用这种方法,VMM 在帮助管理实际内存方面扮演了重要的角色,而不仅是在虚拟内存方面。下面来说明它的工作原理。在 AIX 中,将所有的虚拟内存段划分为若干个页面。在 AIX 中,每个页面的缺省大小为 4KB。所分配的页面可以位于 RAM 或者分页空间(虚拟内存存储于磁盘上)。VMM 还维护一个称为空闲列表 的对象,该对象定义为未分配的页帧。它们用于处理缺页的情况。通常存在少量未分配页面(您可以自行配置),VMM 可以使用这些页面来腾出空间并为其重新分配页帧。可以使用 VMM 的页面置换算法来选择要重新分配页帧的虚拟内存页面。这种分页算法可以确定对当前位于 RAM 中的哪些虚拟内存页面的页帧进行回收,并放回到空闲列表中。AIX 可以使用所有可用的内存,除了那些配置为未分配并用做空闲列表的内存之外。

需要重申的是,VMM 的目的是管理 RAM 和虚拟页面的分配。由此可以看出,它的目标是帮助最大限度地缩短缺页响应时间,并在可能的情况下减少虚拟内存的使用。很显然,假设要在 RAM 和分页空间之间进行选择,在 RAM 可用的情况下,大多数人都更希望使用物理内存。另外,VMM 还将虚拟内存段划分为两种不同的类别。它们分别是,使用计算内存的工作段和使用文件内存的持久段。了解这两种类别之间的区别是非常重要的,因为这将帮助您实现系统的最优化。

2.2.1 计算内存

当您的进程对计算信息进行处理时,将使用到计算内存。这些工作段是临时的(暂时的),并且当进程终止或者页面被替换时,这些工作段将不复存在。它们没有对应的持久磁盘存储位置。在许多情况下,当一个进程终止时,将释放其物理和分页空间。当可用页面出现较大的峰值时,您可以在监视系统的过程中发现这种情况。在 VMM 中,当空闲物理内存较少时,可以将最近没有使用的程序从 RAM 移出到分页空间,以帮助释放物理内存,从而完成更多的实际工作。

2.2.2 文件内存

与计算内存不同,文件内存使用了持久段,并在磁盘上具有持久存储位置。数据文件或者可执行程序通常都映射为持久段,而不是工作段。数据文件可能与文件系统相关,如 JFSJFS2 NFS。它们一直都位于内存中,直到文件被卸载、页面被替换、或者取消了到文件的链接。在将数据文件复制到 RAM 中之后,VMM 控制何时对这些页面进行覆盖或者将其用于存储其他数据。在可以选择的情况下,大多数人更希望将文件内存调出到磁盘,而不是计算内存。

当进程引用磁盘上的某个页面时,必须将其调入,而这可能会导致再次将其他的页面调出。VMM 常驻内存并在后台运行,尝试替换最近没有使用的页帧,其中使用到前面介绍的页面置换算法。它还可以帮助检测系统颠簸,当可用内存量很低并且不断地调入和调出页面以支持任务的处理时,可能会出现系统颠簸。实际上,VMM 中提供了一种内存负载控制算法,它可以检测系统是否出现颠簸,并尝试去解决这种情况。如果不加以处理,系统颠簸可能会导致系统停滞,因为内核此刻过分地关注于为页面腾出空间,而不是完成任何有实际意义的工作。

2.3 AIX内存使用策略

通过以上介绍我们知道了,在AIX中内存的类型主要有下图所示的三类:

AIX认为闲置的资源是一种浪费,所以会充分使用各硬件,例如内存。当内存空闲时操作系统会主动拿出部分转换为Buffer用于读写磁盘缓冲,以提高IO速度;并且拿出部分内存用作Cache Page用做文件缓存来提高用户请求的计算、处理速度;

当有新的计算请求而剩余内存不够时,系统会释放CacheBuffer,用来处理计算请求,但系统释放Cache会遵守某些机制,并不能保证需要的时候都能准确地腾出来;此时,如果物理内存用光了,也可能会请求Swap来处理计算,此时会出现Swap分页。这不是我们想要的。我们必须充分利用已有的物理内存。

这时候您也许会问:操作系统中以上三类的内存各占多少比例?CacheBuffer越大越好吗?

这个问题需要视以下几种具体情况而定:

若应用系统计算请求很多而很少需要文件缓存,则Cache就用到很少,可能只是计算内存的0.5倍;如果不需要频繁读取硬盘(磁盘IO),则Buffer也会用到很少,约占0.05倍;反之,若频繁读取硬盘,则需要很大的Buffer来增强磁盘IO效率

若处理结果(响应)很大或处理过程中产生大量临时数据,则Cache会很大,这可以是得下次的用户响应更快;例如,把从数据库中读到的一些新闻条目、word附件等暂存在非计算内存中

一般来说,当有新的计算请求时,操作系统会主动释放CacheBuffer,但是这需要将已有的Cache内容强行清空,可能会引发一些问题,例如系统默认终止好用资源最大的进程;

若这些临时数据很少,而预留了大量的Cache,则CPU需要在Cache中检索,这种检索是最原始的1-0-1-0信号寻址,速度往往不如“计算内存+缓冲”合并处理快;同理,buffer也是。

可以通过设置参数来限制用作CacheBuffer以及共享内存的比例。而且这三个值视具体项目中开发的内容,和用户使用情况、系统处理细节决定,必须通过反复的“设置经验值--压力测试分析事物响应时间调整设置….”的方式迭代,找到最适合的值。这么,AIX中应该是用什么命令来设置这三个值呢?这就是我们下一节要介绍的内容:vmo

2.4 常用内存调整命令VMO

AIX内存设置中最重要最常用的命令和参数是是 minperm maxperm。将这些参数设置为适合您的系统的值,以确保对计算内存或者文件内存进行优化。在大多数情况下,您并不希望调出工作段,因为这样做会导致系统进行没有必要的页面调出,并且会降低性能。以前,它的工作方式非常简单:如果您的文件页面 (numperm%) 大于 maxperm%,那么页面置换算法将仅替换文件页面。当它小于 minperm 时,可以替换文件页面和计算页面。如果它的值位于两者之间,那么将仅替换文件页面,除非重分页的文件页面的数目大于计算页面。还有另一种方法,如果您的 numperm 大于 maxperm,您可以开始替换持久的存储。基于这种方法学,早期的方法是调整您的 minperm maxperm 参数,将 maxperm 设置得比较低(例如,<20),而将 minperm 设置为 <=10。您可以使用这种方法来优化您的数据库服务器。

所有的这些方法都发生了变化。新的方法将 maxperm 设置为一个比较高的值(例如,>80),并且确保将 lru_file_repage 参数设置为 0lru_file_repage 是在带 ML4 AIX Version 5.2 AIX Version 5.3 ML1 中首次引入的。这个参数说明了是否应该考虑 VMM 重分页计数,以及它应该替换何种类型的内存。其缺省设置为 1,所以您需要对它进行更改。当您将这个参数设置为 0 时,它将告诉 VMM,您希望它仅替换文件页面,而不是计算页面。如果您的 numperm 小于 minperm 或者大于 maxperm,这种情况会发生变化,这正是您希望将 maxperm 设置得较高而将 minperm 设置得较低的原因。我们不应该忘记一个事实,对这个值进行优化的主要原因是因为您希望保护计算内存。回到前面的示例,Oracle 使用它自己的缓存,同时使用 AIX 文件缓存,但是却产生了混淆,所以您希望停止它。在这个场景中,如果您打算降低 maxperm,那么您将会停止正在运行的应用程序缓存程序。

3 应用系统对内存的需求及应对策略

部署在AIX系统上的应用系统对内存的需求是什么样呢?需要多少计算内存,多少文件缓存,以及多少读写Buffer才合理呢?还有一种情况是,对已经确定的主机,我们该如何设置这三种内存的比例,才能保证我们的应用系统最健壮呢?这样从应用系统的内存需求谈起。

3.1 案例:应用系统的内存需求分析

事实上,各种类型的应用对各种类型的内存需求是不一样的,例如,一个FTP网站,我们可能仅仅通过简单的URL提供给用户下载列表,任何用户点击下载列表时,系统提供给该用户文件下载。此时,应用系统处理由用户点击的URL到本地文件系统或者数据库中文件存储位置的计算内存需求很少,但是提供文件下载的文件缓存却需要非常大。您使用AIX内存监控与查看工具可以看到,此时操作系统在用去的内存中,计算内存只占很少的比例,而用于Cache的内存却会非常的大!

相反的,有些业务逻辑处理比较复杂的应用系统则正好相反,这类系统对文件缓存的需求非常小,而对计算内存的需求则非常大。我们举一个企业门户产品(IBM WebSphere Portal)及相关产品的例子:

AIX操作系统上我们将要部署IBM WebSphere Portal6.0)和DB2 9.1,首先依据这两个产品本身的性能要求,我们估算这两个产品的计算内存需求。

我们首先来依据产品的硬性指标和一些经验值推算:

 关于计算内存的估算比较简单,有很多公式和经验值,而非计算内存即CacheBuffer是不好估算的,因为那取决于用户请求过来后CPU在处理时,到底是使用的纯计算多呢?还是读写磁盘多,甚至生成的临时对象占用、处理结果暂存;以及300个用户是否同时请求资源,请求的资源是否有共享,是否可以被及时清空等。所以非计算内存是通过对系统的了解大体估算出来的峰值,实际使用中可能用不了这么多。而且为使系统性能达到最高,需要设置的具体指也需要通过多次的调整和压力测试才能确定。下表只是给出了由计算公式得到的近似精确地计算内存的需要和凭对系统的了解估算出来的非计算内存的值:

 

模块

服务器

需要计算内存

Portal模块

Portal Server

1.7G

Server1

0.768—1.2G

Network Deploy

0.768—1.0G

 

DB2数据库

包括JCRCOMCUSWMM等共7个数据源,每个源50个池,合计50*7=350个池

每个池大约耗用5.5M内存,共需:

350 * 5.5 =1.9G

Linux RH

操作系统

操作系统内核

0.5G

处理页面替换

0.5G

总计:

 

需要计算内存:6.1 G

 

3.2 调整策略与依据

那么,这就到了本文讨论的重点了,我们需要什么方法来确定预留给计算内存和文件缓存的比例呢?答案是:反复测试。我们使用压力测试工具来设计一组比较通用、用户使用率比较高的测试场景,然后在默认情况下执行压力测试,我们会获取到一组数据,包括每个事务的反应时间、事务的成功率等;然后通过以上命令调整maxclientmaxperm的值,再次执行压力测试,重新捕获并分析事务时间跟成功率;然后继续调整、测试、分析,通过多轮的叠代,指导获取最佳比例。

3.3 实施策略的调整过程

AIX5及以下版本的操作系统默认内存设值为文件缓存最大可以站大总内存的80%,换句话说,加入我们主机的物理内存为32G,那么部署应用后随着应用的使用,文件缓存最大可以使用系统的32G * 80% = 25.6G内存。这个值可以通过命令:vmo –a | grep max来确定,如图所示:

这时候我们可以使用nmon工具来查看我们操作系统的物理内存使用情况,如下图:

以上是某一家公司在生产环境的企业门户系统的服务器,通过nmon查看,我们可以知道本系统内存的使用情况如下:

总物理内存:16G

已经使用物理内存:15.39G

系统剩余内存:0.093G93M

     经过更加详细的查看,我们发现系统的绝大部分内存(即16*80%=12.8G,即80%)被转化为了文件缓存。而真正的计算内存,只用去了2G左右(还有1.3G左右为操作系统内核所占用)。文件缓存大小约为计算内存的6-7倍!这绝不是一种健康的状态,因为我们的IBM WebSphere Portal是基于数据库的企业级综合信息平台,绝没有太多需要缓存的东西,何况我们的CPU处理能力非常强,与其让用户请求在12G的缓存中检索,还不如不使用缓存,直接计算来得快。那么,这个值怎么设呢?我们使用这个命令:

   从上图我们可以看出,要设置该比例需要使用vmo –p –o maxclient%=20来设置客户端内存能占用的最大比重为20%,即:16G*20%=3.2G,使用vmo –p –o maxperm%=20来设置文件缓存能占用的最大比重为20%,即:16G*20%=3.2G。设置完成后,可以再次运行vmo –a |grep max来确认更改是否有效。

   通过上图,我们可以看到,更改已经有效了。

 

作者简介:
郑文平,拥有8年的企业门户咨询与项目实施经验,被很多个组织和个人誉为“国内门户第一人”,成功实施的企业门户项目超过50家,同时精通ibm websphere Portal,SAP Enterprise Portal,bea Portal等产品。有任何问题或者建议欢与语作者联系。作者的msn是:zhengwp@cn.ibm.com,邮箱是:zhengwenping@126.com

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广