LoginSignup
8
1

More than 5 years have passed since last update.

dockerコンテナでcgroupを使ったときにホスト側はどこでその設定を見れるかめも

Posted at

たとえば、docker-compose.ymlでmem_limitを使ったらcgroupでメモリの最大使用量を設定してますが、それはホスト側ではどこで設定されてるかの確認です。確認に使った環境はfedora 28です。dockerはsystemdで起動してます。

こんな感じでapp1は15MB、app2は20MBとしてメモリの上限をセットします。

version: '2'

services:
  app1:
    build:
      context: .
      dockerfile: Dockerfile
    cap_add:
      - IPC_LOCK
    mem_limit: 15m

  app2:
    build:
      context: .
      dockerfile: Dockerfile
    cap_add:
      - IPC_LOCK
    mem_limit: 20m

そうするとコンテナ内はこんなふうに設定が見えます。想定通りですね。

app1のcgroup設定状況

masami@fedora:~/mem-limit-test$ sudo docker-compose run app1 /bin/bash                                                                                                                                             
[root@fe7c57f1de53 /]# cat /sys/fs/cgroup/memory/tasks
1
15
[root@fe7c57f1de53 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
15728640
[root@fe7c57f1de53 /]#

app2のcgroup設定状況

masami@fedora:~/mem-limit-test$ sudo docker-compose run app2 /bin/bash
[root@e7b9f2845ed8 /]# cat /sys/fs/cgroup/memory/tasks
1
14
[root@e7b9f2845ed8 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
20971520
[root@e7b9f2845ed8 /]#

ホスト側では/sys/fs/cgroup/memory/system.sliceにdockerコンテナのディレクトリがあります。これの
.scopeで終わっているのが起動してるdockerコンテナのディレクトリです。

 docker-containerd.service                                                       NetworkManager.service
 docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope   notify_on_release
 docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope   polkit.service

app1のmemory.limit_in_bytes。

[root@fedora docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope]# cat tasks 
13636
[root@fedora docker-fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64.scope]# cat memory.limit_in_bytes 
15728640

app2のmemory.limit_in_bytes。

[root@fedora docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope]# cat tasks 
13930
[root@fedora docker-e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11.scope]# cat memory.limit_in_bytes 
20971520

このようにホスト側ではsystemc.sliceディレクトリの下にあるdockerコンテナのcgroupのディレクトリで設定内容を確認できます。

dockerコンテナのプロセスツリーを確認した様子。

  ├─sshd,668 -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc-oMACs=hma
  │   ├─sshd,1220                                                                                                                                         ...
  │   │   └─sshd,1227                                                                                                                                     ...
  │   │       └─bash,1228
  │   │           └─sudo,13884 docker-compose run app2 /bin/bash
  │   │               └─docker-compose,13888 /usr/bin/docker-compose run app2 /bin/bash
  │   │                   └─docker-current,13892 start --attach --interactive e7b9f2845ed8c361f8166b9890121538b2c46a8ca54c6f30fb6922b96fde1b11
  │   │                       ├─{docker-current},13894
  │   │                       ├─{docker-current},13895
  │   │                       ├─{docker-current},13896
  │   │                       ├─{docker-current},13897
  │   │                       ├─{docker-current},13901
  │   │                       ├─{docker-current},13902
  │   │                       ├─{docker-current},13903
  │   │                       ├─{docker-current},17062
  │   │                       └─{docker-current},17063
  │   ├─sshd,2988                                                                                                                                         ...
  │   │   └─sshd,2991                                                                                                                                     ...
  │   │       └─bash,2992
  │   │           └─pstree,3150 -ap
  │   ├─sshd,12209                                                                                                                                        ...
  │   │   └─sshd,12219                                                                                                                                    ...
  │   │       └─bash,12220
  │   ├─sshd,12874                                                                                                                                        ...
  │   │   └─sshd,12877                                                                                                                                    ...
  │   │       └─bash,12878
  │   │           └─sudo,13586 docker-compose run app1 /bin/bash
  │   │               └─docker-compose,13591 /usr/bin/docker-compose run app1 /bin/bash
  │   │                   └─docker-current,13605 start --attach --interactive fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64
  │   │                       ├─{docker-current},13606
  │   │                       ├─{docker-current},13607
  │   │                       ├─{docker-current},13608
  │   │                       ├─{docker-current},13609
  │   │                       ├─{docker-current},13610
  │   │                       ├─{docker-current},13611
  │   │                       ├─{docker-current},13616
  │   │                       ├─{docker-current},25177
  │   │                       └─{docker-current},25178

.scopeファイルの名前にあるhash値はpstreeとかpsでプロセスの情報を見たときに確認できます。

masami@fedora:~$ ps -p 13605 -w 300
  PID TTY      STAT   TIME COMMAND
13605 pts/6    Sl+    0:00 /usr/bin/docker-current start --attach --interactive fe7c57f1de535c56204625d860fb7648ad3d2f9f1d5a9922afa10c1c658e2f64
8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1