问题
在启动特定的应用程序时,我们注意到内存已完全耗尽,该应用程序是系统中唯一运行的进程,由于手动操作没有响应,经常出现超时问题,这是手动交易的问题。服务器。
问题分析与解决
最初的想法是内存消耗与应用程序有关。 但是,在使用性能工具后,我们改变了主意。
在印度神话中,有一种名为Sanjeevini的药物的参考文献,它可以治愈几乎所有问题。 topas是性能工具的Sanjeevini,它概述了所有系统资源,并用作性能分析的起点。 在这种情况下,它提供了解决该问题的第一块垫脚石,对此有所帮助。 当我们第一次观察到该问题时,topas显示计算内存的总百分比为99%。 这也是团队在进行手动交易时观察问题的时候。 该团队仅执行与一个应用程序相关的测试运行。
因此,作为下一步研究,该应用程序停止了,再次使用topas来检查计算内存的状态。 这次计算内存为78%,考虑到没有其他应用程序在运行,这是一个令人震惊的数字,它为我们的思路提供了新的方向。
在调查中很有帮助的其他工具是svmon,vmstat和vmo。
svmon命令
svmon命令是一种性能评估工具,可捕获和分析虚拟内存的快照。
svmon -G
命令显示以下全局内存报告。 它显示了系统中实际和虚拟内存的已用和可用大小。
svmon -G
图1. svmon全局内存报告
此内存报告显示,在总内存的1998848页(页面大小= 4K)中,有1996881页正在使用,而1967页空闲。
但是,在上面的报告中,可用页数是1967,但这并不能推断出任何与内存相关的约束或内存瓶颈,因为为了提高I / O性能,AIX®尝试使用最大的可用内存量来存储文件。如果应用程序或内核未明确请求,则进行缓存。 此外,该报告指出,在总的调页空间大小3145728页中,正在使用的调页空间为99556页。
svmon -P
命令显示所有进程的内存使用情况统计信息。
svmon -P
图2.进程内存利用率报告
进程内存使用率报告显示Java™进程的Inuse内存为166690页。 在此报告中添加了所有进程使用的Inuse内存后,我们发现不同进程使用的内存总和显着小于该系统的总内存。 该观察结果也表明记忆不是限制因素。
vmstat命令
另一个性能监视工具vmstat用于报告有关内核线程,虚拟内存,磁盘和CPU活动的统计信息。
# vmstat 2 10
图3. vmstat报告
此vmstat报告显示大约有114MB的可用内存。 此外,没有页面输出得到报告。 但是,最后五个条目确实表明存在一个阻塞的线程,并且系统中正在发生一些I / O等待。
虚拟机
还使用vmo命令检查了性能参数。 vmo命令还显示和调整虚拟内存管理器参数。
vmo –a
图4. vmo命令输出
在观察vmo命令的输出时,我们注意到lgpg_regions
设置为256,而lgpg_size
为16777216(或64MB)。 AIX将大页面视为固定内存,不为大页面提供分页支持。 大页面支持的应用程序数据将保留在物理内存中,直到应用程序完成。 在我们的情况下,这意味着固定固定了256个大小为64MB的页面。
如果回头看一下图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的内存。 由于一大块内存被阻塞并闲置,这就是内存被完全耗尽的原因。
因此,要么不应该为大页面阻塞内存,要么应确保应用程序必须充分利用该内存。
配置大页面
可以将应用程序或系统配置为使用大页面。
为大页面配置应用程序
blpdata标志与ldedit命令一起使用,以使可执行文件可以请求大页面。 有关它的更多详细信息,请参见“ 相关主题”部分。
为大页面配置系统
默认情况下,系统不为大页面物理内存池分配任何内存。 vmo命令可用于使用lgpg_regions和lgpg_size选项配置大页物理内存池的大小。
使用LDR_CNTRL环境变量,以便应用程序的数据段和堆段应使用大页。
可在“ 相关主题”部分中找到有关使用vmo命令配置大页面和LDR_CONTROL变量的更多详细信息。
在上述案例研究中,将lgpg_regions的值更改为标称值并使应用程序使用大页面有助于解决内存问题,并有助于提高整体系统性能。
确定lgpg_regions的值
对于lgpg_regions的值,甚至其他与性能相关的调整参数,都无法给出一般性建议。 但是,可以通过识别系统上的工作负载来确定标称值。 在上述案例研究中,当导出LDR_CNTRL变量时,应用程序开始使用大页面。 此后,再次使用vmstat命令。
# vmstat –l 10
此命令以10秒为间隔显示与大页面节相关的统计信息。
图5.大页面统计
这有一个大页面部分,其中提供了与大页面有关的详细统计信息。 标题为alp
和flp
的两个字段分别对应于活动的大页面和空闲的大页面。 对于此案例研究, alp
的值不会超过80。因此,明智的利用内存的方法是将lgpg_regions的值从256降低到100,例如。这有助于返回大量的内存到4K内存池。 这有助于增加其他正在运行的应用程序的可用内存,从而提高了系统的整体性能。 简而言之,在确定系统的工作负载之后调整参数是有效使用系统资源的关键。
结论
大页面使用率的主要目的是提高高性能计算应用程序或使用大量虚拟内存的任何内存访问密集型应用程序的系统性能。 大页面很有用,但应在特定情况下使用。 它是一种专用的性能改进功能,不建议用于一般用途。
翻译自: https://www.ibm.com/developerworks/aix/library/au-memory_issue/index.html