zwz99999
作者zwz99999·2020-04-06 14:20
系统工程师·dcits

AIX 中 Paging Space 使用率过高的分析与解决

字数 3738阅读 1511评论 0赞 2

AIX 中 Paging Space 使用率过高的分析与解决

AIX 操作系统中 Paging Space 是很重要的设备,当系统中 Paging Space 使用率过高、系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起。针对这种情况,通常可以靠增加 Paging Space 来加以缓解;但是当 Paging Space 已经相当大,而 Paging Space 使用率仍旧居高不下时,则需要通过进一步的分析来找出原因并加以解决。文中分析了几种 Paging Space 使用率持续增长直至过高的常见原因,并给出了相应的解决方案,以确保 Paging Space 使用率被控制在安全的范围内。 AIX 操作系统中 Paging Space 是很重要的设备,当系统中 Paging Space 使用率过高、系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起。针对这种情况,通常可以靠增加 Paging Space 来加以缓解;但是当 Paging Space 已经相当大,而 Paging Space 使用率仍旧居高不下时,则需要通过进一步的分析来找出原因并加以解决。文中分析了几种 Paging Space 使用率持续增长直至过高的常见原因,并给出了相应的解决方案,以确保 Paging Space 使用率被控制在安全的范围内。

1 。 Paging Space 的创建原则

AIX 中 Paging Space 大小确定的指导原则如下:

  • 系统实际内存小于 64MB, paging space= 2 * RAM ;
  • 系统实际内存在 64MB to 256MB 之间 , Page Space = RAM size + 16MB ;
  • 系统实际内存大于 256MB , Page Space = 512 + ( RAM - 256 ) * 1.25 ;
  • 当内存超过 4GB 时 , 则需要根据实际情况来定,一般可初始 3GB, 然后观察 paging space 的使用情况 , 如果使用率超过 70%, 则需要增加 paging space 。
    此外在创建 Paging Space 时还应遵循以下原则以提高性能:
  • 创建的数量应尽可能的多;
  • 每个 Paging Space 的大小应该相同;
  • 每个 Paging Space 应尽可能的分配在不同的硬盘上。
    AIX 中可以通过命令 lsps -s 查看 Paging Space 的使用情况。列 Total Paging Space 给出的是系统总的 Paging Space 空间大小, Percent Used 则表示已被占用的 Paging Space 的百分比。

    命令 lsps -a 可以用来查看 Paging Space 的分布情况
  • 文件型内存对 paging space 使用的影响

在 AIX 系统中,内存可以简单的分为两 类:计算型内存和文件型内存。类似大量文件类操作,如压缩、数据库的 dump/load 等操作会大量占用文件型内存。如果按照系统缺省的配置,文件型内存 最多会占用到内存总量的 80% ,由于文件型内存占用并不主动释放,从而可能造成内存资源的短缺及 Paging Space 使用率过高。

命令 topas 可以用来查看文件型内存占用内存情况,在 MEMORY 一栏中的 %Noncomp 显示的是文件型内存的占用百分比。

如果文件型内存所占比例很高,而 Paging Space 使用率居高不下时,可以通过降低 minperm 、 maxperm 的参数值来进行调优,减少文件型内存可占用的份额。

在进行调整前,首先通过命令 vmo -a/vmtune -a 来查看目前的参数值; minperm 及 maxperm 的缺省值分别是 30% 和 80% 。

随后根据当前的值来确定 minperm 、 maxperm 新的参数值,并通过命令 vmo 及参数 p 和 P 来进行设定。如需将 minperm 、 maxperm 的值分别设为 15% 和 30% 可用命令 vmo -p 15 -P 30 来实现。

因为参数 maxperm 充当的是软限制,所以文件型内存的占用率依旧可以超过 maxperm 的设定值。如果需要进行强制限制,则需要将参数 strict_maxperm 的值设为 1 ,该参数的缺省值为 0 ,但此方法需谨慎使用。

  1. 应用内存泄漏对 paging space 使用率的影响

应用程序的内存泄露也是造成 Paging Space 使用率不断增长的另一常见原因,此类情况的解决方法主要是找出内存泄露的应用,然后进行修正或安装补丁。

以下方法可用来找出发生内存泄露的应用:

该命令每 m 秒钟按降序列出前 n 个最耗内存进程。为了便于分析,可以将结果输出到文件中,然后对内容进行分析,从而找出内存泄露的应用。

下例中命令 svmon -P -t 10 -i 5 的结果被输出到文件 svmonresult.txt 中,该命令每 5 秒种输出一次最耗内存的前 10 个进程。

找出发生内存泄露的应用后可自行进行修正或查找相关的补丁进行安装。

  1. 数据库参数配置对 paging space 的影响

在装有数据库的系统环境中,数据库相关参数的 设置不当也容易造成 Paging Space 的占用率过高。以 DB2 为例,因为 DB2 使用自己的缓冲池进行数据缓存,所以其所能占用的内存量不受参数 maxperm 的控制,而是由自身的参数值来决定。数据库占用的内存过多并且不及时释放的 话同样会造成 Paging Space 使用率的持续增长乃至耗尽,本节中采用 DB2 的设置为例来对此类情况进行说明。

就 Paging Space 使用率而言, DB2 的相关参数中需要特别关注的有 DB2MEMDISCLAIM 、 DB2MEMMAXFREE 、 NUM_POOLAGENTS 、 ESTORE_SEG_SZ 及 NUM_ESTORE_SEGS 。其中 DB2MEMDISCLAIM 、 DB2MEMMAXFREE 、 NUM_POOLAGENTS 与 DB2 中代理的私有内存相关,而 ESTORE_SEG_SZ 、 NUM_ESTORE_SEGS 则决定扩展缓冲池的大小。

AIX 中,注册变量 DB2MEMDISCLAIM 指明当程序停止时 DB2 UDB 是否应该释放其占用的全部或部分内存。 DB2MEMDISCLAIM 保持缺省值 YES ,则在 DB2MEMMAXFREE 的值为空时,程序结束后释放 所有相关内存,否则只保留 DB2MEMMAXFREE 值大小的内存量,该值缺省为 8M 。如果 DB2MEMDISCLAIM 的值被改为 NO ,则程序结束后内 存不会被释放。

NUM_POOLAGENTS 指定了 DB2 中 可以保留的空闲代理的最大数目,如果该值过大,将会有大量的内存被空闲代理占用。如 NUM_POOLAGENTS 的值为 125 , DB2MEMMAXFREE 的值为 8M ,在 DB2MEMDISCLAIM 为 YES 时将最多有约 1G 的内存被空闲代理占用。

因此,当 Paging Space 使用率偏高时,可以尝试查看 DB2MEMDISCLAIM 、 DB2MEMMAXFREE 、 NUM_POOLAGENTS 的值来确保没有过多的内 存被 DB2 代理所占用。如果空闲代理占用内存太多,则需要调整 DB2MEMMAXFREE 、 NUM_POOLAGENTS 的值来削减。

DB2MEMDISCLAIM 、 DB2MEMMAXFREE 的值可用 db2set 命令来查看和设定; NUM_POOLAGENTS 的值则可以通过以下步骤来查看和修改:

DB2 中除了主缓冲池之外还经常用到扩展缓冲 池,扩展缓冲池的大小也是决定内存使用量的一个重要因素。扩展缓冲池( EXTENDED STORAGE )充当的是缓冲池中被换出页的辅助缓存,它的存在可以减少 I/O 操作,提高查询速度。通常扩展缓冲池占用的内存不会主动释放,因此如果扩展 缓冲池过大,随着时间的增加、缓冲池占用的内存量的不断增长,有相当大的可能造成内存资源的短缺、 Paging Space 使用率过高。

扩展缓冲池的大小是由参数 ESTORE_SEG_SZ 、 NUM_ESTORE_SEGS 共同决定的,通过以下命令可以查看它们的值:

扩展缓冲池最多占用内存的计算方式如下:

假如系统中共有 3 个配置相同的 DB , ESTORE_SEG_SZ 的值为 16000 , NUM_ESTORE_SEGS 的值为 65 ,页面大小为 4K ,则扩展缓冲池最多可占用的内存为:

ESTORE_SEG_SZ 、 NUM_ESTORE_SEGS 的参数值设定可以通过如下命令来实现:

DB2 中还有其他一些参数决定着内存的使用情况,但是当发现内存占用后不释放的情况时,可以考虑首先查看本节中提到的相关参数。

对于其他的数据库,同样也需要注意一些类似参数值的设置,避免造成对内存的过量占用,从而造成对系统整体性能的影响。

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

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广