Службу запускает systemd, и лимиты она получает от него.
systemd берёт лимиты из файла юнита: строка LimitNOFILE=64 в разделе [Service] ставит сборщику оба лимита. Без такой строки служба получает лимиты systemd по умолчанию: мягкий 1024 и жёсткий 524288. Поэтому ulimit в твоей оболочке и /etc/security/limits.conf на службы не действуют: limits.conf читают программы входа в систему, а systemd его не читает.
Файл юнита сборщика лежит в /usr/lib/systemd/system: там его держит пакет, и обновление пакета перепишет любую правку в нём. Своё значение кладут в drop-in — файл /etc/systemd/system/<юнит>.d/<имя>.conf, который systemd читает поверх основного; так ты поднимал MemoryMax в уроке о памяти. systemctl cat <юнит> показывает оба файла по порядку, а sudo systemctl edit <юнит> открывает drop-in в редакторе.
Правка лимита проходит три места: файл, описание в systemd после daemon-reload и процесс после перезапуска. Описание показывает systemctl show -p LimitNOFILE <юнит>, процесс — /proc/<PID>/limits. Пока служба не перезапущена, процесс работает со старым лимитом.
Подними лимит сборщику
Подними сборщику lab-shipper лимит открытых файлов до 4096 так, чтобы правка пережила обновление пакета: файл юнита в /usr/lib/systemd/system не меняй. Работающий сборщик должен получить новый лимит.
Цели · 0 из 2
- Задать лимит 4096 в drop-in поверх файла пакета ещё не выполнена
- Дать новый лимит работающему сборщику ещё не выполнена