Высокая загрузка ЦП с меньшим в режиме прокрутки вперед (F) после отключения SSH на Gentoo Linux (OpenRC)

Вопрос или проблема

Я сталкиваюсь с проблемой, когда команда less использует 100% одного ядра ЦП после отключения SSH-сессии. Ниже приведены подробные шаги для воспроизведения этого поведения:

  1. Войдите на сервер:

    ssh john@server-example
    
  2. Переключитесь на другого пользователя:

    sudo su - testuser
    
  3. Откройте файл с помощью less:

    less /var/log/somefile.log
    
  4. Включите режим прокрутки вперед (F): (Этот режим непрерывно мониторит файл, аналогично tail -f.)

  5. Резко завершите SSH-сессию (на стороне клиента):

    • Используя последовательность ухода SSH: Enter ~ ., или завершив процесс SSH на клиентской машине.

После отключения SSH-сессии процесс less остается активным на сервере и использует 100% ЦП. При проверке с помощью ps -ef вывод показывает:

testuser   9930  9906 35 22:54 ?        00:02:05 less /var/log/somefile.log

Дополнительная информация:

  • Это поведение происходит только после переключения пользователей (например, с john на testuser).
  • Если я запускаю less непосредственно от имени пользователя john, процесс less завершается как ожидалось, когда отключается SSH-сессия.
  • Файл журнала небольшой и статический (в него не записываются новые данные).
  • Настройка huponexit: Я пытался включить shopt -s huponexit как в начальной SSH-сессии, так и после переключения пользователей (sudo su - testuser), но это не решает проблему.
  • Детали окружения:
    • ОС: Gentoo Linux
    • Система инициализации: OpenRC

Почему less попадает в состояние высокого использования ЦП, когда SSH-сессия отключается после переключения пользователей?
Существует ли способ автоматически завершать процессы, такие как less, когда пользовательская сессия завершается, особенно после переключения пользователей?

Буду признателен за любые советы или предложения!

Ответ или решение

Высокая загрузка CPU с использованием less в режиме прокрутки (F) после отключения SSH на Gentoo Linux (OpenRC)

Проблема с высокой загрузкой процессора, которую вы наблюдаете при использовании команды less, когда SSH-сессия прерывается, является довольно распространенной и может быть вызвана особенностями управления процессами в Linux, особенно при использовании sudo для смены пользователей.

Причины возникновения проблемы

Когда вы входите в систему как john и затем переключаетесь на testuser, процесс less, запущенный от имени testuser, становится "приросшим" к терминалу, связанному с SSH-сессией. Когда SSH-клиент завершает сессию, он не уведомляет об этом процессы, запущенные на сервере, которые были запущены от имени другого пользователя. Это приводит к тому, что less продолжает работать, ожидая ввода, и в зависимости от настроек может начать потреблять 100% от одного ядра процессора.

Конкретно в вашем случае, использование режима прокрутки (F) заставляет less постоянно активным, ожидая новых данных, даже когда лог-файл, к которому он обращается, не изменяется. Это объясняет высокую загрузку CPU.

Причины исключения поведения для пользователя john

Когда вы запускаете less напрямую как john, выполнение команды нормально завершается, потому что процесс получает сигнал от SSH, что сессия отключена. Однако процесс less, запущенный от имени другого пользователя (как testuser), не получает этого сигнала, что и приводит к бесконечному циклу ожидания.

Решение проблемы

  1. Настройка huponexit: Хотя вы уже пробовали включить shopt -s huponexit, это не всегда срабатывает, особенно при использовании sudo su, так как shopt влияет только на текущую оболочку. Если необходимо, используйте прямую команду su с параметром -m, чтобы сохранить окружение.

  2. Использование системных утилит: Рассмотрите возможность использования nohup или disown для работы с такими процессами. Это избавит вас от контроля за процессом после выхода, но может не полностью решить вопрос.

  3. Замена less на tail: Иногда более опытные системные администраторы предпочитают использовать tail -f, потому что он автоматически завершается при отключении SSH, что исключает проблему с высоким использованием CPU.

  4. Написание скрипта для автоматизации выхода: Напишите bash-скрипт, который будет следить за событиями клиента SSH и автоматически завершит процессы less, запущенные неинтерактивно.

Заключение

Для устранения проблемы с высокой загрузкой CPU при использовании less в режиме прокрутки (F) после отключения SSH-сессии, необходимо учитывать несколько факторов, включая управление процессами и корректные настройки окружения. Данные рекомендации помогут вам лучше управлять поведеними процессов при переходе между пользователями и сокрасят потери ресурсов системы.

Для дальнейших вопросов и рекомендаций, не стесняйтесь обращаться – вся необходимая информация по улучшению управления процессами крепко держится в профессиональном сообществе Linux администраторов.

Оцените материал
Добавить комментарий

Капча загружается...