这两天需要在一个docker里面用java起多个thread,每个thread都起一个go的process,go里面又100个goroutine,并且监控着。就比较关心内存使用问题,顺带查了查内存和cpu在docker中的限制方式。
在我们的监控中有两个内存占用统计。
RSS resident set size:常驻内存,其实就是里面各个process占据的内存。
total memory:这个开始不明白为啥会这么大,后来看到有人是说是cache导致的,一般写log或者有缓冲的情况下会导致这种情况。
在docker里面 cat /sys/fs/cgroup/memory/memory.stat
这个文件里有所有相关的内存信息,的确是看到cache 和 rss加起来就是总占用。既然是cache的,这个应该不会导致docker的oom。真正的进程占用如果超过了内存限制+swap空间,理论上才会oom。
之后反复跑几次看能不能让rss很大。
这个博主两篇文章生动形象。
cpu限制:
https://www.cnblogs.com/sparkdev/p/8052522.html
总结:所谓-cpus=4不是真的cpu使用数量。1代表的是单个cpu的全部时钟,4代表单个cpu的400%的时钟。所以在博主测试中,真正的计算会分到不同cpu上,但是总和是对的。
对于指定cpu,其实只共享不独占。
内存限制:
https://www.cnblogs.com/sparkdev/p/8032330.html
内存这块比较好懂了,就是里面提到的swap,就是操作系统的内存页的换入换出。https://www.linux.com/news/all-about-linux-swap-space
网友评论