需要有关 OSGi 内存消耗的经验

Experience about OSGi memory consumption needed

我们有一个 运行 带有 OSGi 和 1 GB RAM 的应用程序。它 运行 在某种嵌入式设备上运行,因此限制为 1 GB RAM。我们在没有 Karaf 的情况下使用 Felix,因为 Karaf 导致应用程序停滞不前。

现在的问题是我们不断地 运行 进入 OutOfMemory 错误。堆转储分析显示此图:

我现在的问题是 OSGi aka Felix 为应用程序消耗 30% 的可用 RAM 是否“正常”。有没有经验 OSGi >>通常<<消耗了多少 RAM?这 30% 是否还包括我们应用程序对象使用的 RAM,或者这纯粹是 Felix 消耗的 RAM?

建立内存所有者总是很棘手,而且大多不直观,而且我发现它通常没有那么有用。我不确定你如何衡量内存布局,但由于 Felix 掌握了根,这可能会严重扭曲分配的数量。

根据我的经验,当您遇到内存不足错误时,就会发生一些泄漏。所以我倾向于关注相同类型的初始启动后增长的内存是什么。尤其是今天使用 lambdas,很容易创建禁止垃圾回收的引用。

如果 Java VM 有 1Gb,那么我看不出 OSGi 如何可见? OSGi 所需的内存量非常小,启动后不应增加。此外,您与 Karaf 有问题这一事实似乎暗示这里有些可疑的事情。初始启动后,除非您以创造性的方式使用它,否则 OSGi 应该不会妨碍您。

我假设您已经设置了 VM 的不同调整参数?

嗯,我记得 运行 12Mb 路由器中的 OSGi ...