4
我一直在試圖用Docker容器化一個Java應用程序。當我讓容器以超級用戶身份運行此進程時,CPU使用率達到100%並保持在那裏。然而,以根爲主,它的表現要好得多,約佔2%。作爲非root用戶的Java進程消耗100%的CPU,但是因爲root很好
# docker run -d -p 8006:8006 -u root --name root app:latest
# docker run -d -p 8007:8006 -u nonroot --name nonroot app:latest
# ps aux | grep java
root 26537 9.2 4.1 174800 115636 ? Sl 10:14 0:02 /opt/app/jvm16/bin/java -Xmx128M -Xms128M […]
nonroot 26808 94.8 6.2 202744 175368 ? Sl 10:15 0:08 /opt/app/jvm16/bin/java -Xmx128M -Xms128M […]
該應用程序的功能與root或非root用戶(未掛起)的功能相同。但是如果我在一個真實的(不在容器內)服務器上運行這個相同的應用程序,那麼對於root或非root用戶來說,CPU使用情況都很好,這暗示着與容器相關的原因。
Docker主機上沒有任何東西(我能找到)借鑑了洞察力,而容器內部的Java轉儲並沒有指向任何東西。
我的問題是:這可能是什麼解釋?
出色的工作。你是對的,我在JVM的pid上運行了一個strace -F -p,實際上,它反覆嘗試在/ tmp中創建一個文件並獲得權限被拒絕。我調整了權限並正常工作。謝謝! –