使用 AIX 性能工具发现与内存相关的问题
2009-09-09 00:00:00 来源:WEB开发网如果再看一下 图 1(svmon – G 的输出),会发现对于 16MB 的大页面,池大小为 256,因为大页面的内存是固定的,256 个 16MB 的页面无法交换出去。看一下 图 2(svmon – P 命令),输出的第一行的最后一列是 16MB,对应的值是 'N'。这意味着 PID 为 266372 的进程不使用 16MB 的页面;也就是说,这个应用程序不使用 vmo 命令已经保留的大页面。同样,在同一个报告中检查正在运行的其他进程时,发现没有应用程序使用大页面支持。因此,256*16=4096MB 的内存空间被阻塞,但是根本没有任何进程使用它。
在 图 3 中可以看到,物理内存总量是 7808MB。通过上面的分析很容易看出,其中的 4096MB 为大页面保留。这意味着所有正在运行的应用程序只能使用 7808-4096=3712MB。一大块内存被阻塞并且不能得到使用,这就是内存完全耗尽的原因。
因此,要么不为大页面保留内存,要么确保应用程序利用保留的内存。
配置大页面
可以通过配置让应用程序或系统使用大页面。
应用程序的大页面配置
在 ldedit 命令中使用 blpdata 标志让可执行文件能够请求大页面。在 参考资料 中可以找到更多信息。
系统的大页面配置
在默认情况下,系统并不为大页面物理内存池分配任何内存。可以使用 vmo 命令的 lgpg_regions 和 lgpg_size 选项配置大页面物理内存池的大小。
通过使用 LDR_CNTRL 环境变量,让应用程序的数据和堆内存使用大页面。
在 参考资料 中可以找到关于使用 vmo 命令配置大页面和 LDR_CONTROL 变量的更多信息。
对于上面的案例研究,把 lgpg_regions 的值改为一个名义值,让应用程序使用大页面,这有助于解决内存问题和提高总体系统性能。
决定 lgpg_regions 的值
对于 lgpg_regions 和与性能相关的其他调优参数的值,无法给出通用的建议;但是,可以通过研究系统的工作负载决定一个名义值。对于上面的案例研究,当导出 the LDR_CNTRL 变量时,应用程序开始使用大页面。在此之后,再次使用 vmstat 命令。
# vmstat – l 10
这个命令显示与大页面部分相关的统计数据,时间间隔为 10 秒。
图 5. 大页面统计数据
输出中有一个大页面部分,提供与大页面相关的详细统计数据。alp 和 flp 字段分别表示活跃的大页面数和空闲的大页面数。对于这个案例研究,alp 的值不超过 80。因此,应该把 lgpg_regions 的值从 256 降低到 100。这会把大量内存还给 4K 页面的内存池,增加正在运行的其他应用程序可以使用的内存量,提高系统的总体性能。简而言之,应该研究系统的工作负载,然后调整参数,这是高效地使用系统资源的关键。
结束语
使用大页面的主要目的是,提高高性能计算应用程序或使用大量虚拟内存的任何内存访问密集型应用程序的系统性能。大页面是有用的,但是只应该在特定的场景中使用。它是一个特殊用途的性能改进特性,不建议普遍使用
更多精彩
赞助商链接