Вопрос или проблема
У меня свежая установка Centos 7, и я вижу, что setroubleshootd использует много CPU. Как я могу это исправить? Что делает этот процесс?
Прежде всего, вы не должны отключать SELinux. Так что же может вызывать высокую нагрузку CPU у setroubleshootd
.
Попробуйте выяснить, в каком режиме работает SELinux на машине, набрав sestatus
. Это должно отобразить несколько строк. Интересные части — это Статус SELinux:
и Текущий режим
, которые обычно являются включенным
и принуждающим
. Если текущий режим разрешающий
, то SELinux ничего не блокирует, а только ведет журнал (что полезно для диагностики).
Предполагая, что SELinux включен и в принуждающем режиме, теперь взгляните на журнал /var/log/audit/audit.log
. Я бы порекомендовал использовать tail -f /var/log/audit/audit.log
, чтобы видеть живые изменения файла.
Поскольку у вас высокая нагрузка CPU у setroubleshootd
, я предполагаю, что у вас есть постоянные изменения/записи в файле, что означает, что что-то постоянно нарушает политику SELinux, и вывод может дать вам первую подсказку, почему.
Для более глубокого устранения неполадок вы можете установить setroubleshoot-server
с помощью yum install setroubleshoot-server
. Этот пакет представляет собой набор инструментов, которые могут помочь вам найти истинную причину нарушения SELinux. Чаще всего это происходит, когда вы добавили файлы в систему без установки правильных разрешений SELinux или когда процесс пытается получить доступ к нетипичному файлу или папке.
Я бы рекомендовал вам сначала прочитать этот документ о SELinux и этот документ, чтобы получить общее представление, а затем взглянуть на документы вроде этого для вашей дистрибуции.
С SELinux есть определенный кривой обучения, и слишком много для простого ответа, но я никогда не отключал бы его на сервере с публичным доступом.
a) Установите setroubleshoot.x86_64
для графического интерфейса; это может быть проще, чем использовать tail
.
# yum install setroubleshoot.x86_64 setroubleshoot-plugins.noarch
Добавление политик SE Linux для mongodb
(и возможных других) может уменьшить нагрузку.
Обратите внимание, что предложения, которые он делает, могут иногда быть бесполезными или вводящими в заблуждение.
b) Переустановка setroubleshootd
может быть вариантом:
yum reinstall setroubleshoot-server
setroubleshootd
анализирует сообщения аудита, которые генерирует ядро, когда процесс выполняет действие, которое запрещено политикой SELinux. Он записывает полезные рекомендации о том, что вы, как системный администратор, можете с этим сделать.
Если вы получаете много сообщений аудита, то setroubleshootd
будет постоянно активироваться и генерировать сообщения, выполняя много работы.
Как системный администратор, вы захотите исследовать коренную причину проблемы: большое количество сообщений аудита, вызванных процессами, пытающимися сделать то, что запрещает политика SELinux.
Вы можете использовать ausearch -m avc,user_avc -i -ts today
, чтобы увидеть все записи аудита, зафиксированные с полуночи, и вы можете посмотреть свои системные журналы, чтобы узнать вывод setroubleshootd
. Однако не следуйте его рекомендациям бездумно, это, вероятно, принесет больше вреда, чем пользы. Вы должны внимательно рассмотреть вывод таких инструментов.
Если вы хотите, чтобы он продолжал работать, но ограничить количество используемого процессора/памяти, выполните systemctl edit setroubleshootd.service
, а затем воспользуйтесь директивами, документированными в systemd.resource-control(5)
, такими как CPUQuota=
и MemoryMax=
.
Вы также можете выбрать отключение механизма, который передает сообщения аудита в setroubleshootd
для анализа. Этот механизм — это плагин auditd
под названием sedispatch
, и его можно отключить в файле /etc/audit/plugins.d/sedispatch.conf
на современных системах (на старых системах есть отдельный процесс, audispd
, который передает сообщения плагинам; его можно отключить в файле /etc/audisp/plugins.d/sedispatch.conf
).
Вы также можете полностью удалить пакет setroubleshoot-server
.
С учетом, что это старый вопрос, но ни одно из решений не дало результата. Я нашел этот ответ: полная деинсталляция flatpak на самом деле устранила чрезмерное использование CPU.
Этот демон setroubleshootd
является частью SELinux (Security Enhanced Linux). SELinux был внедрен для предоставления типa контекста для файлов, чтобы добавить больше безопасности и соблюсти требования NSA. SELinux может вызывать проблемы, если он неправильно настроен и используется. Setroubleshootd мониторит и сообщает о проблемах SELinux и предоставляет рекомендации по их решению.
Определите, действительно ли вам нужно, чтобы SELinux работал. Если нет, отключите его.
Нажмите здесь, чтобы получить больше информации об отключении SELinux.
Ответ или решение
Проблема высоких нагрузок CPU и памяти от setroubleshootd в CentOS 7
Ваша проблема с высоким потреблением ресурсов CPU и памяти со стороны процесса setroubleshootd
на свежей установке CentOS 7 связана с работой SELinux (Security Enhanced Linux). Давайте детально разберемся в сути вопроса, возможных причинах и способах решения.
Что такое setroubleshootd?
setroubleshootd
является демоном, который анализирует сообщения аудита, созданные ядром, когда процессы пытаются выполнить действия, запрещенные политиками SELinux. Этот процесс собирает информацию о конфликтах и предоставляет рекомендации администраторам по их устранению. Высокая нагрузка CPU со стороны setroubleshootd
зачастую возникает из-за большого количества сообщений аудита, когда какие-либо процессы систематически нарушают политики SELinux.
Шаги для диагностики и решения проблемы
-
Проверка статуса SELinux
Первым делом необходимо определить, в каком режиме работает SELinux. Это можно сделать с помощью команды:
sestatus
Вывод этой команды должен показать несколько строк, среди которых интересуют
SELinux status
иCurrent mode
. На большинстве систем они должны бытьenabled
иenforcing
. -
Изучение журнала аудита
Если SELinux включен и работает в режиме
enforcing
, обратите внимание на файл журнала аудита:tail -f /var/log/audit/audit.log
Здесь вы сможете увидеть актуальные сообщения и выявить процессы, которые систематически нарушают политики SELinux.
-
Дополнительные средства для диагностики
Рассмотрите возможность установки пакета
setroubleshoot-server
, чтобы получить расширенные возможности для анализа SELinux:yum install setroubleshoot-server
Этот пакет предоставляет дополнительные инструменты для выяснения причин нарушения политик.
-
Обработка сообщений
Также можете использовать команду для просмотра всех записей аудита за текущий день:
ausearch -m avc,user_avc -i -ts today
Это поможет вам выявить, какие именно процессы создают нагрузку и почему
setroubleshootd
активен на много раз. -
Изменение настроек системных ресурсов
Если вы хотите ограничить использование CPU и памяти
setroubleshootd
, вы можете редактировать его параметры службы:systemctl edit setroubleshootd.service
Используйте директивы, такие как
CPUQuota=
иMemoryMax=
, для управления ресурсами.
Альтернативные меры
- Удаление ненужных пакетов: Если выяснилось, что высокую нагрузку вызывает конкретное приложение (например,
flatpak
), подумайте о его удалении. - Отключение механизмов обработки сообщений: Вы можете отключить механизм, передающий сообщения аудита
setroubleshootd
, изменив файл/etc/audit/plugins.d/sedispatch.conf
. - Полное удаление setroubleshoot-server: Если проблема не решается, вы можете полностью удалить пакет:
yum remove setroubleshoot-server
Заключение
Высокая загрузка CPU и памяти процессом setroubleshootd
указывает на системные проблемы, связанные с нарушениями политик SELinux. Устранение источников этих нарушений и оптимизация работы самого процесса должны привить вашему серверу стабильность и производительность. Вместе с тем, не рекомендуется отключать SELinux на публично доступных серверах без тщательной проверки необходимости и анализа рисков. Обязательно проведите оценку нужд вашего сервера в отношении безопасности и выберите наиболее подходящий подход к настройкам SELinux.
Для более детального изучения вопросов SELinux рекомендуются следующие ресурсы:
Следуйте этим рекомендациям, и вы сможете эффективно управлять производительностью вашего сервера.