Почему systemctl показывает текущее значение памяти как [Не установлено]?

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

Я пытался ограничить использование памяти Firefox, следуя этому руководству: https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02

В нем мы ограничиваем использование памяти Firefox, используя systemd

systemd-run --unit=my-firefox --user --scope -p MemoryHigh=6G -p MemoryMax=7G -p MemorySwapMax=0 firefox

А затем проверяем использование памяти с помощью systemctl

systemctl --user show my-firefox.scope | grep Memory

К сожалению, в моем случае, в MemoryCurrent значение не установлено, что-то вроде такого вывода:

$ systemctl --user show limited-firefox.scope | grep Memory
MemoryCurrent=[not set]
EffectiveMemoryNodes=
AllowedMemoryNodes=
MemoryAccounting=yes
DefaultMemoryLow=0
DefaultMemoryMin=0
MemoryMin=0
MemoryLow=0
MemoryHigh=2147483648
MemoryMax=3221225472
MemorySwapMax=0
MemoryLimit=infinity

Что-то я упускаю или неправильно в моей системе?

Попробуйте установить в /etc/systemd/user.conf:

DefaultCPUAccounting = yes
DefaultIOAccounting = yes
DefaultIPAccounting = yes
DefaultBlockIOAccounting = yes
DefaultMemoryAccounting = yes
DefaultTasksAccounting = yes

и перезапустите пользовательский слайс: systemctl restart user-$UID.slice

Примечание: IPAccounting может быть включено, но это пока невозможно для пользовательских единиц.

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

Проблема, с которой вы столкнулись, связана с тем, что команда systemctl показывает MemoryCurrent=[Not Set]. Давайте более подробно разберемся в возможных причинах и способах решения этой проблемы, основываясь на представленном вами описании и контексте.

Возможные причины

  1. Отсутствие учета памяти: Основная причина, по которой MemoryCurrent может быть отображено как [Not Set], заключается в том, что учет памяти (MemoryAccounting) может быть неактивирован или настроен неправильно. В вашем выводе видно, что MemoryAccounting=yes, что может означать, что проблема в другой области.

  2. Настройки системы: Неактивированные настройки или ошибки в конфигурации могут привести к подобным ошибкам. В системных конфигурациях может быть недостаточно полномочий для информации по управлению памятью.

  3. Стадия выполнения процесса: Если код был запущен, но не выполнялся достаточно долго, чтобы systemd успел собрать достаточно данных, он может вернуть значение [Not Set].

Решения и рекомендации

  • Проверка системных конфигураций: Убедитесь, что все необходимые системные настройки активированы в файле конфигурации /etc/systemd/user.conf. В вашем случае уже предложено активировать различные виды учета, включая DefaultMemoryAccounting=yes.

  • Перезапуск пользовательских служб: После изменения конфигурации не забудьте перезапустить срез пользователя (user slice):

    systemctl restart user-$UID.slice

    Это действие гарантирует, что новый настройки вступят в силу.

  • Убедитесь, что процесс активен и потребляет ресурсы: Запустите firefox, убедитесь, что процесс активен, и используйте команду systemd-cgtop или top для проверки потребления памяти в реальном времени.

  • Обновление системы: Проверьте в своей системе последние обновления и исправления. В некоторых случаях более старая версия systemd может иметь баги или ограничения, влияющие на вашу задачу.

  • Документация и поддержка: Если проблема сохраняется, обратитесь к документации systemd или к сообществу за технической поддержкой.

Проверив и выполнив описанные шаги, вы сможете диагностировать и, возможно, исправить проблему, связанную с MemoryCurrent=[Not Set]. Всегда полезно поддерживать систему и пакеты в обновленном состоянии, чтобы минимизировать вероятность возникновения подобных ошибок.

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

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