在使用一个特定的XPage应用程序时,我们在一些用户报告的服务器上出现间歇性性能问题。我的第一个想法是它与Java内存的使用和糟糕的代码回收有关,所以我从那里开始。目前,根据Mark Leusink奇妙的调试工具栏,服务器(具有32Gb物理RAM的64位Windows机器)的使用数据如下所示:
我想确认一下我对这些数字的理解:
奖金问题:
由于
答案 0 :(得分:3)
工具栏中显示的信息是JVM提供的标准数字:totalMemory()
,maxMemory()
和freeMemory()
。有关详细说明,请参阅this问题。给出的三个值是针对整个JVM的,而不是特定的应用程序。
在Domino HTTP JVM中,您可以使用maxMemory
notes.ini参数设置HTTPJVMMaxHeapSize
。您无法设置/更改总分配(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>