Linux Labs

Система изнутри: ресурсы, ядро, процессы / Ступень 4 из 12

ulimit и sysctl: потолки системы

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 1 из 10 · на машине · 4 мин

Сборщик теряет журналы

Чему научишься

  • Находить лимит открытых файлов процесса в /proc/<PID>/limits и отличать мягкий лимит от жёсткого.
  • Поднимать лимит службы строкой LimitNOFILE в drop-in так, чтобы он пережил перезапуск и обновление пакета.
  • Читать и менять параметры ядра командой sysctl и закреплять их файлом в /etc/sysctl.d.

Сборщик журналов lab-shipper пересылает в центр журналы ста служб магазина из /var/log/shop. Коллеги видят журналы только части служб. Посмотри, что пишет сам сборщик, какой лимит открытых файлов у тебя и сколько файлов открыто у сборщика.

Упражнение · посмотреть

Посмотри на сборщик

Сборщик lab-shipper пересылает журналы из /var/log/shop. Посмотри последние строки его журнала, свой лимит открытых файлов и сколько файлов открыто у процесса shipper.

Сначала предположи

Сборщик не может открыть очередной журнал: Too many open files. Сколько файлов у процесса shipper уже открыто?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа
Проверь себя 1 вопрос

У процесса shipper открыто 64 файла, и следующий он открыть не может. У тебя ulimit -n — 1024. Что из этого следует?

  • Linux не запрещает открывать файл, открытый у другого процесса: журнал одновременно пишет служба и читает сборщик. Отказ в доступе выглядел бы как Permission denied.

  • Журналы уже лежат на диске, сборщик их только читает. Нехватку места показывает df -h, а ошибка звучала бы No space left on device.

  • Тогда файлы не открывались бы и у других программ, а ты открываешь их свободно. Сборщик упирается ровно в 64 — это его предел.

У процесса сборщика свой предел — 64 открытых файла, и он меньше твоего.

Ubuntu 24.04
Загрузка…