我一直在尝试使用Docker将Java应用程序容器化。 当我让容器以root以外的用户身份运行此进程时,CPU使用率升至100%并保持不变。 但是,使用root时,它表现得更好,保持在2%左右。
# 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转储也没有指向任何问题。
我的问题是:这可能有什么解释呢?