在低功耗设备(或低功耗设备)上运行时,java是否适合docker



我正在运行一个docker容器,它绑定了java应用程序(java 1.8(

我的问题是我的物联网设备内存有限(RAM 2 GB,需要由5个应用程序共享(。

当我尝试运行我的应用程序时,我保留了450 MB的RAM,并将50%分配给JVM,如下所示:

FROM openjdk:8u252-jre-slim-buster
ADD myIotApp.jar myIotApp.jar
ADD jsr47min.properties jsr47min.properties
CMD java -Djava.util.logging.config.file=jsr47min.properties -jar -XX:+UseContainerSupport -XX:MaxRAMPercentage=50.0 -XshowSettings:vm myIotApp.jar

我知道JVM需要一些内存才能平稳运行,并且存在一些兼容性问题(如以下线程中所述(:https://developers.redhat.com/blog/2017/03/14/java-inside-docker/

但我接受了克服这个问题的建议。

但我观察到,一旦应用程序执行一些复杂的操作,它就会消耗几乎80%的内存,但一旦计算完成,它就永远不会释放回来

有什么办法解决这个问题吗?

对于这样的环境,java是一个不错的选择吗?

我想java不应该是您环境中的首选语言。但有时已经做出了选择,您必须在受限制的设备中运行该应用程序。因此,你可以注意以下几点:

作为开发人员,尽量让应用程序使用尽可能少的内存。这可以通过查看RAM、缓存等中存储了多少信息来实现。使用可以流式传输数据和从磁盘存储/加载的算法。确保您的应用程序没有内存泄漏,并尽早释放内存。

作为系统集成商,即使JVM行为不端,也要确保系统稳定性不受影响。对JVM设置合理的内存限制,使其在OutOfMemoryError上死亡,而不是损害其他进程。为了安全起见,还配置容器上的内存限制。然后将Docker配置为在应用程序死亡时自动重新启动容器。

最新更新