Ubuntu-Server: каждый SSH-Connect создает не удаленную группу

79
2

Мы запускаем некоторые серверы Ubuntu 14.04, которые каким-то образом создают новую группу для каждого сеанса SSH, но, к сожалению, группы не удаляются, когда сеанс закрыт.

Поскольку мы также запускаем GitLab на одном из этих серверов и один опрос Git-клиентов раз в минуту, мы получаем тысячи зомби-групп для git-user в неделю.

Примерно раз в месяц мы достигаем cgroup-limit приводит к проблемам с докером:

процесс запуска контейнера вызвал "process_linux.go: 258: применение конфигурации cgroup для вызванного процесса" mkdir/sys/fs/cgroup/memory/docker/28485427c2689d7a2c4be83990af873e9ab5732c5c741f0d10bfc3ba21b1d167: на устройстве не осталось места \""

Похоже, что проблема возникает только на серверах, на которых установлен докер. Другие серверы правильно удаляют группы. Возможно, проблема здесь связана с установкой-зависимостями докеров. Докер сам правильно удаляет свои группы.

Единственное исправление проблемы, о которой мы знаем, - это перезагрузка машины.

Здесь вывод docker version:

Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:10:36 2017
OS/Arch: linux/amd64

Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:10:36 2017
OS/Arch: linux/amd64
Experimental: false

Здесь вывод информации о docker info

Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 4576
Server Version: 17.03.1-ce
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 2359
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
apparmor
Kernel Version: 4.2.0-42-generic
Operating System: Ubuntu 14.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.33 GiB
Name: repo
ID: KT6V:FLPI:EHY6:2FSP:NEBT:T65W:23IX:IRFK:AQM5:KSLM:FQ3D:57X5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

Версия ядра через uname -a:

Linux repo 4.2.0-42-generiС# 49 ~ 14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

cat/proc/cgroups после ~ 3 часов работы:

#subsys_name    hierarchy   num_cgroups enabled
cpuset 1 623 1
cpu 2 627 1
cpuacct 3 623 1
blkio 4 623 1
memory 5 627 1
devices 6 623 1
freezer 7 623 1
net_cls 8 623 1
perf_event 9 623 1
net_prio 10 623 1
hugetlb 11 623 1

Из этих 623 групп 616 находятся в /sys/fs/cgroup/memory/user/998.user где пользователь 998 является пользователем git.

спросил(а) 2017-08-15T12:27:00+03:00 4 года, 2 месяца назад
1
Решение
81

Я знаю, что это не идеальное решение, поскольку оно устраняет только симптом, а не причину, но на данный момент я создал скрипт, который можно запустить через cron.

#!/bin/bash
set -e
CGROUP_BASE_DIR="/sys/fs/cgroup"
declare -a CGROUP_SUBSYSTEMS=('cpuset' 'cpu' 'cpuacct' 'blkio' 'memory' 'devices' 'freezer' 'net_cls' 'perf_event' 'net_prio' 'hugetlb')

for CGROUP_SUBSYSTEM in "${CGROUP_SUBSYSTEMS[@]}"; do
cd "${CGROUP_BASE_DIR}/${CGROUP_SUBSYSTEM}"
for OLD_CGROUP in $(find user/*.user/*.session -type d -ctime +10); do
/usr/bin/cgdelete -r "${CGROUP_SUBSYSTEM}:/${OLD_CGROUP}"
done
done

Это приведет к поиску всех cgdelete сеансов старше 10 дней и удалит их с помощью cgdelete из cgdelete cgroup-tools.

ответил(а) 2017-08-18T12:38:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема