Java -- 每日一问:Java程序运行在Docker等容器环境有哪些新问题?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:Java程序运行在Docker等容器环境有哪些新问题?相关的知识,希望对你有一定的参考价值。

典型回答

对于 Java 来说,Docker 毕竟是一个较新的环境,例如,其内存、CPU 等资源限制是通过 CGroup(Control Group)实现的,早期的 JDK 版本(8u131 之前)并不能识别这些限制,进而会导致一些基础问题:

  • 如果未配置合适的 JVM 堆和元数据区、直接内存等参数,Java 就有可能试图使用超过容器限制的内存,最终被容器 OOM kill,或者自身发生 OOM。

  • 错误判断了可获取的 CPU 资源,例如,Docker 限制了 CPU 的核数,JVM 就可能设置不合适的 GC 并行线程数等。

从应用打包、发布等角度出发,JDK 自身就比较大,生成的镜像就更为臃肿,当我们的镜像非常多的时候,镜像的存储等开销就比较明显了。

如果考虑到微服务、Serverless 等新的架构和场景,Java 自身的大小、内存占用、启动速度,都存在一定局限性,因为 Java 早期的优化大多是针对长时间运行的大型服务器端应用。

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

以上是关于Java -- 每日一问:Java程序运行在Docker等容器环境有哪些新问题?的主要内容,如果未能解决你的问题,请参考以下文章

Java -- 每日一问:动态代理是基于什么原理?

Java -- 每日一问:Exception 和 Error 有什么区别?

Java -- 每日一问:谈谈你对 Java 平台的理解?

Java -- 每日一问:Exception 和 Error 有什么区别?

Java -- 每日一问:什么情况下Java程序会产生死锁?如何定位修复?

Java -- 每日一问:有人说“Lambda能让Java程序慢30倍”,你怎么看?