
62
| 第四章
容器帶來的挑戰
使用容器技術最大的挑戰就是學習曲線。這種技術不但與雲端和 PaaS 有很大的不同,
也是一種新興且不斷演變的技術。有時維持最新的容器創新技術甚至是一項全職的工
作。它的另一個主要挑戰是當舊的技術(包括 JVM 本身)在容器內運行時,不一定都
會正確或如預期地運作,你通常需要具備(至少要有基本的)運維知識才可能找出、了
解與修正問題。
在
Docker
內運行
Java
:
Daniel
經常遇到的陷阱
我參加過許多使用 Java 與 Docker 專案,我和我的團隊也克服了許多
不少問題。我曾經在2015 年的JavaOne 跟 IBM Cloud Runtimes 的
Developer Advocate 一起演說“Debugging Java Apps In Containers:
No Heavy Welding Gear Required”(
http://bit.ly/2DxYdzm
),以下是一些
挑戰與問題的摘要:
• 每一個 Java 9 之前的 Java 執行環境都不知道控制群組(cgroup)。
當你索取 app 可用的 CPU 核心數量時,它會回傳底層主機的 CPU 資
源資訊,事實上,這些資源可能被多個在同一台主機上運行的容器共
用。這也會影響一些 Java 執行環境屬性,因為 fork-join pool 與記憶
體回收參數都是根據這項資訊來設置的。你可以在啟動 JVM 時,用
命令列旗標設定資源限制來克服這個問題。
• 容器通常共用主機上的單一熵源(source ...