Memory leaks 如何避免Mule应用程序中的内存泄漏?
是否有一些特殊的事情必须考虑以避免内存泄漏 我们如何避免Mule应用程序中的内存泄漏Memory leaks 如何避免Mule应用程序中的内存泄漏?,memory-leaks,mule,anypoint-studio,mule-esb,Memory Leaks,Mule,Anypoint Studio,Mule Esb,是否有一些特殊的事情必须考虑以避免内存泄漏 我们如何避免Mule应用程序中的内存泄漏 比如,;我们真的必须删除流变量吗?Mule应用程序的开发人员必须明确完成哪些工作,以及和的(自动)完成哪些工作?一般建议 会话变量 对于具有多个端点的应用程序,与多个或多个端点相比,更喜欢更少、更小的会话变量 每次消息通过时,会话作用域都被序列化和反序列化 端点,甚至是VM端点。因此,如果一个应用程序有很多端点,那么它将涉及很多端点 序列化/反序列化。使用越来越少的会话变量有助于将此最小化 头顶 有效载荷
比如,;我们真的必须删除流变量吗?Mule应用程序的开发人员必须明确完成哪些工作,以及和的(自动)完成哪些工作?一般建议
- 会话变量
- 有效载荷格式
- 数据提取
- 流引用
- MuleSoft使用标准Oracle JVM HotSpot。热点是 支持良好,易于为各种目的定制。 MuleSoft的性能测试强调吞吐量,因此 并行GC。HotSpot也很容易优化响应时间。这个 以下各节中的提示显示了如何校准的热点 吞吐量或响应时间
- 将初始堆大小和最大堆大小指定为相同的值。 这可以通过设置MaxMetaspaceSize=MetaspaceSize和 MaxNewSize=新闻大小。这样做可以避免JVM需要 在运行时动态分配额外内存。旗帜是 在wrapper.conf中设置 e、 g。 wrapper.java.additional.16=-XX:NewSize=1365m wrapper.java.additional.17=-XX:MaxNewSize=1365m wrapper.java.additional.18=-XX:MetaspaceSize=256m wrapper.java.additional.19=-XX:MaxMetaspaceSize=256m wrapper.java.additional.20=-Xms=2048m wrapper.java.additional.21=-Xmx=2048m
- 至少有两个原因可以解释这样的动态再分配 妨碍表演。首先,JVM对每个堆执行主要GC 调整大小。完整GC会在一段时间内停止所有线程。那就行了 即使使用并发标记和扫描(CMS)。世界停止 在其他条件相同的情况下,应始终最小化。这是 对于优先考虑低响应时间的应用程序尤其重要。 当内存紧张时,动态堆大小调整会产生第二个问题。 假设JVM在运行时和系统运行时增加堆大小 没有足够的可用内存页。作为一个 结果,内核所选进程的某些页面可能会被调出 到磁盘。由于磁盘容量增加,这种情况会导致速度减慢 木卫一
wrapper.java.additional.22=-XX:+UseConcMarkSweepGC
wrapper.java.additional.23=-XX:CMSInitiatingOccupancyFraction=65
wrapper.java.additional.24=-XX:UseCMSInitiatingOccupancyOnly
标志-XX:CMSInitiatingOccupancyFraction指定总堆的百分比
用法。当达到该百分比时,JVM将触发CMS GC。40到40的值
70通常足以满足在Mule上运行的应用程序。如果该值太低,可能会导致
过度、过早的收集。通常建议从相对较高的值开始
-XX:CMSInitiatingOccupancyFraction,并根据需要减少它,以优化最少的CMS
最佳表现的活动。
指定-XX:+指定-XX时仅使用CMSinitiatingOccupancy:
+CMSInitiatingOccupancyFraction。否则,JVM将尝试动态调整该值
对于-XX:+CMSInitiatingOccupancyFraction。变化的值为undesi
wrapper.java.additional.4=-XX:+PrintGCApplicationStoppedTime
wrapper.java.additional.5=-XX:+PrintGCDetails
wrapper.java.additional.6=-XX:+PrintGCDateStamps
wrapper.java.additional.7=-XX:+PrintTenuringDistribution
wrapper.java.additional.8=-XX:ErrorFile=%MULE_HOME%/logs/err.log
wrapper.java.additional.9=-Xloggc:%MULE_HOME%/logs/gc.log
wrapper.java.additional.10=-XX:+HeapDumpOnOutOfMemoryError
wrapper.java.additional.<XX>=-Dorg.glassfish.grizzly.DEFAULT_MEMORY_MANAGER=org.glassfish.grizzly.memory.HeapMemoryManager
wrapper.java.additional.<XX>=-DAsyncLoggerConfig.RingBufferSize=128
<AsyncLogger name="DebugLog" level="info" includeLocation="true" ringBufferSize="128">
@Override
public void expire(int entryTTL, int maxEntries, String partitionName) throws ObjectStoreException
{
super.expire(entryTTL, maxEntries, partitionName);
if (getPrivatePartitionSize(partitionName) == 0) {
disposePartition(partitionName);
}
}