如何解决需要有关 OSGi 内存消耗的经验
我们有一个使用 OSGi 和 1 GB RAM 运行的应用程序。它在某种嵌入式设备上运行,因此仅限于 1 GB RAM。我们在没有 Karaf 的情况下使用 Felix,因为事实证明 Karaf 使应用程序陷入困境。
现在的问题是我们不断遇到 OutOfMemory 错误。 heap dump 分析显示了这张图:
- org.apache.felix:30%(其中 org.apache.felix.framework 消耗 22%)
- org.hsqldb:22%
- io.vertx:24%
- io.netty:15%
- 我们自己的应用程序包:0.35%
我现在的问题是,OSGi aka Felix 为应用程序消耗 30% 的 RAM 是否“正常”。有没有经验,OSGi >>通常
解决方法
建立内存所有者总是很棘手,而且大多不直观,而且我发现它通常没有那么有用。我不确定您如何衡量内存布局,但由于 Felix 拥有根,这可能会严重扭曲分配的数量。
根据我的经验,当您遇到内存不足错误时,就会发生一些泄漏。所以我倾向于关注相同类型的初始启动后增长的内存是什么。尤其是在今天的 lambdas 中,很容易创建禁止垃圾收集的引用。
如果 Java VM 有 1Gb,那么我看不到 OSGi 是如何可见的? OSGi 所需的内存量非常小,启动后不应增加。此外,您在使用 Karaf 时遇到问题这一事实似乎暗示这里发生了一些可疑的事情。初次启动后,除非您以创造性的方式使用 OSGi,否则您应该不会使用它。
我假设您已经设置了 VM 的不同调整参数?
嗯,我记得在 12Mb 路由器中运行 OSGi ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。