tomcat容器 占用CPU 100%


环境:
宿主机系统:ubuntu 14.04
docker版本:1.70
问题容器创建命了:docker run -itd -m 5G -c 512 #这里就写一些重要参数,其他省略...
服务器CPU:两颗4核CPU Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz
内存:128G
硬盘:2T (raid 1)

查看所有容器资源情况:
docker stats $(docker ps -q)

发现某个tomcat容器占用CPU 100%

3333333.jpg


top查看宿主机资源情况:
其中是有个java进程占用CPU是100%,可是宿主机运行一切正常,负载也不是很大,而且其他容器运行也正常

4444.jpg


问题:

1.其中某个容器占用CPU 100%,可宿主机和其他容器为什么还运行正常,它这个100%CPU指的是什么?
2. 在创建该容器时-c 512 指定了容器CPU配额,是否起到了作用?
3. docker stats命令到底是什么机制去统计容器资源情况的(重要)

谢谢各位 大神 解答菜鸟问题
已邀请:

wangzi19870227 - sina攻城狮,docker爱好者

赞同来自:


1)容器就是在进程外包了一层,你看到的某个容器占用100%,其实是这个容器里的一个进程使用了物理机上100%的cpu,你的环境是2颗四核cpu,加上物理机上其它进程占的,所以top看到的总cpu使用是12%左右。

2)-c 512,这个要明白他是一个相对值,不是绝对值。想要验证是否生效了,可以跑两个container,每个container里一个能把单cpu打满的进程,一个container -c 512,一个container -c 1024,这是你stats就可以看到效果了。

3)没看代码,给个个人理解:
容器说白了就是一个或一组进程的封装,所以统计一个容器的资源使用,就是统计一个容器内进程的资源使用情况。
又因为宿主机上可以知道一个容器内有哪些进程,而这每一个进程的资源使用情况,物理机上也都可以拿到。
所以,推测stats就是先获取一个容器的进程信息,然后依此获取每个进程的资源使用,最后加和得到结果。

要回复问题请先登录注册