最近需要一个sandbox,里面会运行用户的命令、程序。最近初学Docker,所以想利用Docker来实现。
但是看了一些资料,还是没搞明白怎么样才能对Docker容器的内存、CPU、磁盘等进行限制。
昨天试了一下docker run
加-m
参数来限制内存,算是有点用吧。使用-c
来限制CPU,貌似不太可行。运行一个无限fork
程序就把整个系统给拖死了。
所以想问一下究竟应该是怎么用的?
怪我咯2017-04-21 10:57:52
-c는 CPU 사용량을 제한하는 것이 아니라 프로세스 그룹의 상대적 CPU 사용량을 의미합니다. 이는 공유 비율입니다. docker 프로세스는 호스트 시스템의 일반적인 프로세스일 뿐이며 다른 모든 프로세스와 함께 cgroup에 의해 정의됩니다. 프로세스는 CPU 스케줄링을 수행하지만 동일한 cgroup의 CPU 제한 단위는 CPU 사용량을 공유합니다. 따라서 동일한 cgroups 제한 단위에 여러 docker 프로세스가 있는 경우 사용량을 공유하지만 이를 방지할 수는 없습니다. CPU 사용량을 공유하면 CPU100%가 발생합니다.