Skip to content

Instantly share code, notes, and snippets.

@mhausenblas
Last active October 9, 2016 19:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mhausenblas/ae5bfa7df795471c12554b7c2621add3 to your computer and use it in GitHub Desktop.
Save mhausenblas/ae5bfa7df795471c12554b7c2621add3 to your computer and use it in GitHub Desktop.
U Can’t Touch This deep dive

U Can’t Touch This

To get a snapshot of the 'world view' we use gen-worldview.sh:

$ curl -O https://gist.githubusercontent.com/mhausenblas/44860b0a7e8688d1822ebaa02522656b/raw/4e3d43c18aabe3885b504a09caecb7c37abf5d79/gen-worldview.sh
$ chmod 755 gen-worldview.sh
$ ./gen-worldview.sh
$ cat 14*

Agent

Executing gen-worldview.sh on agent ip-10-0-3-43 yields worldview-agent.txt.

Legacy App

When we launch legacy-app.json as a Marathon app the following is happening on agent ip-10-0-3-43:

A Mesos sandbox /var/lib/mesos/slave/slaves/6522d1b9-0806-41c6-a0fb-b82f20c3c038-S1/frameworks/6522d1b9-0806-41c6-a0fb-b82f20c3c038-0000/executors/legacy-app.e7d94ca7-8e34-11e6-985c-e2bc47a71b50/runs/170661b0-ac21-41ba-a9b5-5460ca1b14d4 was created with the following content:

core@ip-10-0-3-43 $ ls -al
total 56
drwxr-xr-x. 2 root root  4096 Oct  9 15:27 .
drwxr-xr-x. 3 root root  4096 Oct  9 15:27 ..
-rw-r--r--. 1 root root 13616 Oct  9 15:27 1476026856
-rwxr-xr-x. 1 root root   934 Oct  9 15:27 gen-worldview.sh
-rw-r--r--. 1 root root   485 Oct  9 15:27 stderr
-rw-r--r--. 1 root root   255 Oct  9 15:27 stderr.logrotate.conf
-rw-r--r--. 1 root root 15187 Oct  9 15:27 stdout
-rw-r--r--. 1 root root   255 Oct  9 15:27 stdout.logrotate.conf

With stdout containing worldview-legacy-app.txt.

Common tools such as free are not cgroups aware, so we do systemd-cgtop on agent ip-10-0-3-43:

Control Group                                                                               Tasks   %CPU   Memory  Input/s Output/s
/                                                                                               -    3.3     2.4G        -        -
/system.slice                                                                                 420    1.5     2.4G        -        -
/user.slice                                                                                     4    0.9     3.7M        -        -
/mesos                                                                                          -    0.8    59.3M        -        -
/system.slice/dcos-minuteman.service                                                           90    0.8   130.0M        -        -
/system.slice/dcos-navstar.service                                                             90    0.7    85.7M        -        -
/mesos/slave                                                                                    -    0.6    53.7M        -        -
/mesos/170661b0-ac21-41ba-a9b5-5460ca1b14d4                                                     -    0.2     4.7M        -        -
/system.slice/dcos-pkgpanda-api.service                                                         2    0.0    28.7M        -        -
/system.slice/dcos-spartan.service                                                            126    0.0    97.5M        -        -
/system.slice/docker.service                                                                   15    0.0   248.7M        -        -
/init.scope                                                                                     1      -    10.0M        -        -
/init.scope/system.slice                                                                        -      -     3.3M        -        -
/system.slice/dbus.service                                                                      2      -     2.1M        -        -
/system.slice/dcos-3dt.service                                                                  8      -    10.5M        -        -
/system.slice/dcos-adminrouter-agent.service                                                    2      -     3.2M        -        -
/system.slice/dcos-epmd.service                                                                 1      -   244.0K        -        -
/system.slice/dcos-mesos-slave.service                                                         60      -     7.0M        -        -
/system.slice/dcos-rexray.service                                                               9      -     7.2M        -        -
/system.slice/polkit.service                                                                    5      -    10.0M        -        -
/system.slice/proc-sys-fs-binfmt_misc.mount                                                     -      -    80.0K        -        -
/system.slice/system-getty.slice                                                                1      -        -        -        -
/system.slice/system-getty.slice/getty@tty1.service                                             1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice                                                      1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice/serial-getty@ttyS0.service                           1      -        -        -        -
/system.slice/system-sshd.slice                                                                 -      -     2.6M        -        -
/system.slice/system-system\x2dcloudinit.slice                                                  -      -     6.9M        -        -
/system.slice/systemd-journald.service                                                          1      -   124.0M        -        -
/system.slice/systemd-logind.service                                                            1      -     1.5M        -        -
/system.slice/systemd-networkd.service                                                          1      -     1.9M        -        -
/system.slice/systemd-timesyncd.service                                                         2      -   868.0K        -        -
/system.slice/systemd-udevd.service                                                             1      -    17.1M        -        -
/user.slice/user-500.slice                                                                      4      -        -        -        -
/user.slice/user-500.slice/session-2.scope                                                      4      -        -        -        -

In /mesos/170661b0-ac21-41ba-a9b5-5460ca1b14d4 we identify the cgroup (task ID, from sandbox). The default path to the cgroups hierarchy root in DC/OS is /sys/fs/cgroup (unchanged from vanilla Apache Mesos). This leads us to the directories /sys/fs/cgroup/$CGRUOP/mesos/170661b0-ac21-41ba-a9b5-5460ca1b14d4, for example, to check on the memory usage:

core@ip-10-0-3-43 $ cd /sys/fs/cgroup/memory/mesos/170661b0-ac21-41ba-a9b5-5460ca1b14d4
core@ip-10-0-3-43 $ cat cat memory.max_usage_in_bytes
6651904

Note that memory.max_usage_in_bytes shows the maximum memory usage recorded.

Type Docker

When we launch type-docker.json as a Marathon app the following is happening on agent ip-10-0-3-43:

core@ip-10-0-3-43 $ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0fb8849a255d        alpine:3.4          "/bin/sh -c 'apk --no"   6 minutes ago       Up 6 minutes                            mesos-6522d1b9-0806-41c6-a0fb-b82f20c3c038-S1.22c34e3b-222e-4af6-b2a5-ad1056743f3b

Marathon used Mesos to shell out to the Docker engine to run the specified container with a container ID of 0fb8849a255d....

Further, a Mesos sandbox /var/lib/mesos/slave/slaves/6522d1b9-0806-41c6-a0fb-b82f20c3c038-S1/frameworks/6522d1b9-0806-41c6-a0fb-b82f20c3c038-0000/executors/type-docker.fea40dd6-8e2f-11e6-985c-e2bc47a71b50/runs/22c34e3b-222e-4af6-b2a5-ad1056743f3b was created with a stdout containing worldview-type-docker.txt.

When we do systemd-cgtop on agent ip-10-0-3-43:

Control Group                                                                               Tasks   %CPU   Memory  Input/s Output/s
/                                                                                               -    6.2     2.4G        -        -
/system.slice                                                                                 399    4.2     2.4G        -        -
/system.slice/dcos-navstar.service                                                             90    2.8    87.7M        -        -
/system.slice/dcos-minuteman.service                                                           90    1.1   142.2M        -        -
/mesos                                                                                          -    1.0    50.6M        -        -
/mesos/slave                                                                                    -    1.0    49.8M        -        -
/user.slice                                                                                     4    0.9     3.4M        -        -
/system.slice/dcos-spartan.service                                                            126    0.2    97.3M        -        -
/system.slice/dcos-pkgpanda-api.service                                                         2    0.0    28.7M        -        -
/system.slice/docker.service                                                                   14    0.0   248.7M        -        -
/system.slice/systemd-journald.service                                                          1    0.0   122.9M        -        -
/init.scope                                                                                     1      -    10.3M        -        -
/init.scope/system.slice                                                                        -      -     3.3M        -        -
/system.slice/dbus.service                                                                      2      -     2.1M        -        -
/system.slice/dcos-3dt.service                                                                  8      -    10.5M        -        -
/system.slice/dcos-adminrouter-agent.service                                                    2      -     3.2M        -        -
/system.slice/dcos-epmd.service                                                                 1      -   244.0K        -        -
/system.slice/dcos-mesos-slave.service                                                         40      -     7.0M        -        -
/system.slice/dcos-rexray.service                                                               9      -     7.2M        -        -
/system.slice/docker-0fb8849a...f3f5a80186da9e7866e5a6d48c05ff2bf7009601e5f3e7fb403.scope       2      -    20.5M        -        -
/system.slice/polkit.service                                                                    5      -    10.0M        -        -
/system.slice/proc-sys-fs-binfmt_misc.mount                                                     -      -    80.0K        -        -
/system.slice/system-getty.slice                                                                1      -        -        -        -
/system.slice/system-getty.slice/getty@tty1.service                                             1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice                                                      1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice/serial-getty@ttyS0.service                           1      -        -        -        -
/system.slice/system-sshd.slice                                                                 -      -     2.6M        -        -
/system.slice/system-system\x2dcloudinit.slice                                                  -      -     6.9M        -        -
/system.slice/systemd-logind.service                                                            1      -     1.5M        -        -
/system.slice/systemd-networkd.service                                                          1      -     1.9M        -        -
/system.slice/systemd-timesyncd.service                                                         2      -   868.0K        -        -
/system.slice/systemd-udevd.service                                                             1      -    17.1M        -        -
/user.slice/user-500.slice                                                                      4      -        -        -        -
/user.slice/user-500.slice/session-2.scope                                                      4      -        -        -        -

We can now change to directory /sys/fs/cgroup/cpu/system.slice/docker-0fb8849a255dcf3f5a80186da9e7866e5a6d48c05ff2bf7009601e5f3e7fb403.scope (the actual directory we obtain from the docker ps command from the beginning) to verify CPU usage. Same is true for RAM, for example:

core@ip-10-0-3-43 $ cd /sys/fs/cgroup/memory/system.slice/docker-0fb8849a255dcf3f5a80186da9e7866e5a6d48c05ff2bf7009601e5f3e7fb403.scope
core@ip-10-0-3-43 $ cat memory.max_usage_in_bytes
31711232

Universal Containerizer Docker

When we launch unicon-docker.json as a Marathon app the following is happening on agent ip-10-0-3-43:

core@ip-10-0-3-43 $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

As expected, using the universal containerizer results in no Docker container running under the control of the Docker engine.

However, as usual, a Mesos sandbox /var/lib/mesos/slave/slaves/6522d1b9-0806-41c6-a0fb-b82f20c3c038-S1/frameworks/6522d1b9-0806-41c6-a0fb-b82f20c3c038-0000/executors/unicon-docker.01297b08-8e42-11e6-985c-e2bc47a71b50/runs/46d7cb05-ad44-4dc1-9f6b-2880bb287bd8 was created with a stdout containing worldview-unicon-docker.txt.

When we do systemd-cgtop on agent ip-10-0-3-43:

Control Group                                                                               Tasks   %CPU   Memory  Input/s Output/s
/                                                                                               -    4.4     2.4G        -        -
/system.slice                                                                                 392    2.8     2.4G        -        -
/system.slice/dcos-minuteman.service                                                           90    2.1   138.0M        -        -
/user.slice                                                                                     4    0.9     3.6M        -        -
/mesos                                                                                          -    0.7    72.2M        -        -
/system.slice/dcos-navstar.service                                                             90    0.5    85.6M        -        -
/mesos/slave                                                                                    -    0.4    49.8M        -        -
/mesos/46d7cb05-ad44-4dc1-9f6b-2880bb287bd8                                                     -    0.4    21.5M        -        -
/system.slice/dcos-spartan.service                                                            126    0.1    98.6M        -        -
/system.slice/systemd-journald.service                                                          1    0.1   131.4M        -        -
/system.slice/dcos-pkgpanda-api.service                                                         2    0.0    28.7M        -        -
/system.slice/docker.service                                                                   15    0.0   248.4M        -        -
/system.slice/dcos-epmd.service                                                                 1    0.0   244.0K        -        -
/init.scope                                                                                     1      -    10.0M        -        -
/init.scope/system.slice                                                                        -      -     3.3M        -        -
/system.slice/dbus.service                                                                      2      -     2.1M        -        -
/system.slice/dcos-3dt.service                                                                  8      -    10.3M        -        -
/system.slice/dcos-adminrouter-agent.service                                                    2      -     3.1M        -        -
/system.slice/dcos-mesos-slave.service                                                         34      -     6.9M        -        -
/system.slice/dcos-rexray.service                                                               9      -     7.2M        -        -
/system.slice/polkit.service                                                                    5      -    10.0M        -        -
/system.slice/proc-sys-fs-binfmt_misc.mount                                                     -      -    80.0K        -        -
/system.slice/system-getty.slice                                                                1      -        -        -        -
/system.slice/system-getty.slice/getty@tty1.service                                             1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice                                                      1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice/serial-getty@ttyS0.service                           1      -        -        -        -
/system.slice/system-sshd.slice                                                                 -      -     2.8M        -        -
/system.slice/system-system\x2dcloudinit.slice                                                  -      -     6.9M        -        -
/system.slice/systemd-logind.service                                                            1      -     1.6M        -        -
/system.slice/systemd-networkd.service                                                          1      -     1.9M        -        -
/system.slice/systemd-timesyncd.service                                                         2      -   868.0K        -        -
/system.slice/systemd-udevd.service                                                             1      -    17.2M        -        -
/user.slice/user-500.slice                                                                      4      -        -        -        -
/user.slice/user-500.slice/session-3.scope                                                      4      -        -        -        -

Using the cgroup /mesos/46d7cb05-ad44-4dc1-9f6b-2880bb287bd8 (as was the case with in the frist example, named after the Mesos task ID) we can have a look at the memory usage:

core@ip-10-0-3-43 $ cd /sys/fs/cgroup/memory//mesos/46d7cb05-ad44-4dc1-9f6b-2880bb287bd8
core@ip-10-0-3-43 $ cat memory.max_usage_in_bytes
32567296

Resources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment