Xpages/Domino Java 内存使用说明
Xpages/Domino Java Memory usage clarification
我们的其中一台服务器在使用某个特定的 XPages 应用程序时报告了间歇性性能问题。我的第一个想法是它与 Java 内存使用和代码回收不良有关,所以我从那里开始。目前,根据 Mark Leusink 出色的调试工具栏,服务器(具有 32Gb 物理 RAM 的 64 位 Windows 机器)的使用数据如下所示:
我想确认一下我对数字的理解:
- 最大堆大小 - 我对此很满意并且知道如何更改它(推荐设置是可用 RAM 的四分之一,但由于用户数量较少这台服务器,我确定 2Gb 绰绰有余)
- 总分配 - 这对我来说似乎很低,但我是正确的,因为这是由服务器自动设置的,如果需要更多 Java 内存,那么它将分配更多(最多达到最大堆大小中指定的数量?)是否仅当垃圾收集无法释放足够的 space 来加载新的 java 对象时才会发生这种情况?
- Used - 我相信这显示了整个服务器正在使用的内存,而不仅仅是包含调试工具栏本身的应用程序。这只会显示 Domino HTTP 任务(所有 XPage 应用程序)正在使用的内存,还是它也会受到 Java 代理的影响?
奖金问题:
- "total allocated"这个数字最初是怎么设置的?在我们的开发服务器上(有一个当前用户 - 我)该数字当前设置为 256M,但我无法将其与任何 Notes.ini 参数相关联。 (还有,这个图有推荐值吗?)
- 如果我关于垃圾收集 运行ning 在达到 "total allocated" 数字时是正确的,那么,低数字大概会迫使它更频繁地 运行。这会对服务器性能产生不利影响吗?
- 事实上我们也在这个服务器上 运行ning Traveler(尽管只有大约 9 个用户),我们应该考虑这一点吗?
谢谢
工具栏中显示的信息是JVM提供的标准数字:totalMemory()
、maxMemory()
和freeMemory()
。有关详细说明,请参阅 this 问题。给出的三个值是针对整个 JVM,而不是特定应用程序。
在 Domino HTTP JVM 中,您可以使用 HTTPJVMMaxHeapSize
notes.ini 参数设置 maxMemory
。您不能设置/更改总分配 (totalMemory) 值,但这也不是必需的。 JVM 会在需要时简单地分配更多内存(最多 maxMemory
的值)。执行垃圾收集后,它最终也会再次释放该内存。
Java 代理不影响这些数字。唯一的例外是在 HTTP 进程中 运行 的 Java 代理(例如,使用 ?OpenAgent 命令从浏览器调用)。
在服务器上,如果 JVM 需要更多可分配的内存,您可以 运行 解决内存问题(OutOfMemory 异常)。您可以通过创建一个简单的 XAgent 来监视此值以输出 JVM 的当前值:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false" viewState="nostate">
<xp:this.afterRenderResponse><![CDATA[#{javascript:
var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-cache");
var max = java.lang.Runtime.getRuntime().maxMemory();
var free = java.lang.Runtime.getRuntime().freeMemory();
var total = java.lang.Runtime.getRuntime().totalMemory();
var memory = {
max : max,
total : total,
free : free,
available : (max - total) + free
};
writer.write( toJson(memory) );
writer.endDocument();
}]]>
</xp:this.afterRenderResponse>
</xp:view>
我们的其中一台服务器在使用某个特定的 XPages 应用程序时报告了间歇性性能问题。我的第一个想法是它与 Java 内存使用和代码回收不良有关,所以我从那里开始。目前,根据 Mark Leusink 出色的调试工具栏,服务器(具有 32Gb 物理 RAM 的 64 位 Windows 机器)的使用数据如下所示:
我想确认一下我对数字的理解:
- 最大堆大小 - 我对此很满意并且知道如何更改它(推荐设置是可用 RAM 的四分之一,但由于用户数量较少这台服务器,我确定 2Gb 绰绰有余)
- 总分配 - 这对我来说似乎很低,但我是正确的,因为这是由服务器自动设置的,如果需要更多 Java 内存,那么它将分配更多(最多达到最大堆大小中指定的数量?)是否仅当垃圾收集无法释放足够的 space 来加载新的 java 对象时才会发生这种情况?
- Used - 我相信这显示了整个服务器正在使用的内存,而不仅仅是包含调试工具栏本身的应用程序。这只会显示 Domino HTTP 任务(所有 XPage 应用程序)正在使用的内存,还是它也会受到 Java 代理的影响?
奖金问题:
- "total allocated"这个数字最初是怎么设置的?在我们的开发服务器上(有一个当前用户 - 我)该数字当前设置为 256M,但我无法将其与任何 Notes.ini 参数相关联。 (还有,这个图有推荐值吗?)
- 如果我关于垃圾收集 运行ning 在达到 "total allocated" 数字时是正确的,那么,低数字大概会迫使它更频繁地 运行。这会对服务器性能产生不利影响吗?
- 事实上我们也在这个服务器上 运行ning Traveler(尽管只有大约 9 个用户),我们应该考虑这一点吗?
谢谢
工具栏中显示的信息是JVM提供的标准数字:totalMemory()
、maxMemory()
和freeMemory()
。有关详细说明,请参阅 this 问题。给出的三个值是针对整个 JVM,而不是特定应用程序。
在 Domino HTTP JVM 中,您可以使用 HTTPJVMMaxHeapSize
notes.ini 参数设置 maxMemory
。您不能设置/更改总分配 (totalMemory) 值,但这也不是必需的。 JVM 会在需要时简单地分配更多内存(最多 maxMemory
的值)。执行垃圾收集后,它最终也会再次释放该内存。
Java 代理不影响这些数字。唯一的例外是在 HTTP 进程中 运行 的 Java 代理(例如,使用 ?OpenAgent 命令从浏览器调用)。
在服务器上,如果 JVM 需要更多可分配的内存,您可以 运行 解决内存问题(OutOfMemory 异常)。您可以通过创建一个简单的 XAgent 来监视此值以输出 JVM 的当前值:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false" viewState="nostate">
<xp:this.afterRenderResponse><![CDATA[#{javascript:
var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-cache");
var max = java.lang.Runtime.getRuntime().maxMemory();
var free = java.lang.Runtime.getRuntime().freeMemory();
var total = java.lang.Runtime.getRuntime().totalMemory();
var memory = {
max : max,
total : total,
free : free,
available : (max - total) + free
};
writer.write( toJson(memory) );
writer.endDocument();
}]]>
</xp:this.afterRenderResponse>
</xp:view>