作为非root的Java进程消耗100%的CPU,但作为根是好的【JAVA教程】

!
也想出现在这里? 联系我们
信息

作为非root的Java进程消耗100%的CPU,但作为根是好的,第1张

概述作为非root的Java进程消耗100%的CPU,但作为根是好的

我一直在试图用Docker容器化一个Java应用程序。 当我有容器运行这个过程作为一个非root用户,cpu使用率达到100%,并保持在那里。 然而,有了根,它的performance要好得多,坐在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用户(未挂起)的function相同。 但是,如果我在一个真实的(不在容器内)服务器上运行这个相同的应用程序,那么对于root或non-root来说,cpu使用情况都是正常的,暗示着与容器有关的原因。

Docker主机上没有任何东西(我可以find)借鉴了洞察力,容器内的java转储并没有指向任何东西。

我的问题是:这可能是什么解释?

是否有windows复合文件的开源替代品?

docker重启容器失败:“已经在使用”,但没有更多的docker图像

用于STL容器的C ++ IDE

在windows 10周年更新无法正常工作的windows容器

docker集装箱不给我一个壳

无法在正在运行的Docker容器中ssh localhost

如何创build一个AngularJs应用程序的Docker容器?

为什么Docker容器不能相互通信?

使用CLONE_NEWNS设置效果父项后,使用clone()方法mount()

如何运行Nginx的docker容器与自定义configuration?

我的问题是:这可能是什么解释?

一种可能的解释是,应用程序反复尝试以JVM作为root运行时的作用,而以普通用户的形式运行时失败; 即它是一个设计不好的应用程序和权限问题的组合。

我会尝试以下尝试找出正在发生的事情:

使用Jstack来查看哪些线程处于活动状态以及他们在做什么。 如果cpu是100%并且是使用cpu的JVM,则应该有活动线程。

使用strace来查看JVM正在做什么系统调用。

查看应用程序日志文件和docker以及其他系统日志文件,查看是否有任何线索。

总结

以上是内存溢出为你收集整理的作为非root的Java进程消耗100%的CPU,但作为根是好的全部内容,希望文章能够帮你解决作为非root的Java进程消耗100%的CPU,但作为根是好的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞91 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容