-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uncomment TasksMax=unlimited for recent distros #78
Conversation
@kolyshkin can we remove the fedora 25 commit here? I have a separate PR up to do that: #79 |
Since systemd version 228, a new setting, `TasksMax`, has appeared, which limits the number of tasks used by a service (via pids cgroup controller). Unfortunately, a default for this setting, `DefaultTaskMax`, is set to 512. In systemd version 231 it is changed to 15% which practically is 4195, as the value from /proc/sys/kernel/pid_max is treated like 100%). Either 512 or 4195 is severily limited value for Docker Engine, as it can run thousands of containers with thousands of tasks in each, and the number of tasks limit should be set on a per-container basis by the Docker user. So, the most reasonable setting for `TasksMax` is `unlimited`. Unfortunately, older versions of systemd warn about unknown `TasksMax` parameter in `docker.service` file, and the warning is rather annoying, therefore this setting is commented out by default, and is supposed to be uncommented by the user. The problem with that is, once the limit is hit, all sorts of bad things happen and it's not really clear even to an advanced user that this setting is the source of issues. As Fedora 25 ships systemd 231, it (and later Fedora releases) support TasksMax, so it makes total sense to uncomment the setting, this is what this commit does. Signed-off-by: Kir Kolyshkin <[email protected]>
Since systemd version 228, a new setting, `TasksMax`, has appeared, which limits the number of tasks used by a service (via pids cgroup controller). Unfortunately, a default for this setting, `DefaultTaskMax`, is set to 512. In systemd version 231 it is changed to 15% which practically is 4195, as the value from /proc/sys/kernel/pid_max is treated like 100%). Either 512 or 4195 is severily limited value for Docker Engine, as it can run thousands of containers with thousands of tasks in each, and the number of tasks limit should be set on a per-container basis by the Docker user. So, the most reasonable setting for `TasksMax` is `unlimited`. Unfortunately, older versions of systemd warn about unknown `TasksMax` parameter in `docker.service` file, and the warning is rather annoying, therefore this setting is commented out by default, and is supposed to be uncommented by the user. The problem with that is, once the limit is hit, all sorts of bad things happen and it's not really clear even to an advanced user that this setting is the source of issues. Now, `rules` file already contain a hack to check for the systemd version (during build time) and in case the version is greater than 227, uncomment the `TasksMax=unlimited` line. Alas, it does not work during normal builds, the reason being systemd is not installed into build environments. An obvious fix would be to add systemd to the list of installed packages in all Dockerfiles used to build debs. Fortunately, there is a simpler way, as libsystemd-dev is installed, and it's a subpackage of systemd built from the same source and carrying the same version, so it can also be checked. Signed-off-by: Kir Kolyshkin <[email protected]>
@seemethere done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
This fixes running Docker Engine under limited number of processes (docker/for-linux#73). It was supposedly fixed for deb packaged, but the fix was/is not working. For Fedora, it was never fixed.
See docker/for-linux#73 and https://github.com/docker/docker-ee/pull/164 for more details