Вопрос или проблема
Я пытался ограничить использование памяти 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]
. Давайте более подробно разберемся в возможных причинах и способах решения этой проблемы, основываясь на представленном вами описании и контексте.
Возможные причины
-
Отсутствие учета памяти: Основная причина, по которой
MemoryCurrent
может быть отображено как[Not Set]
, заключается в том, что учет памяти (MemoryAccounting) может быть неактивирован или настроен неправильно. В вашем выводе видно, чтоMemoryAccounting=yes
, что может означать, что проблема в другой области. -
Настройки системы: Неактивированные настройки или ошибки в конфигурации могут привести к подобным ошибкам. В системных конфигурациях может быть недостаточно полномочий для информации по управлению памятью.
-
Стадия выполнения процесса: Если код был запущен, но не выполнялся достаточно долго, чтобы
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]
. Всегда полезно поддерживать систему и пакеты в обновленном состоянии, чтобы минимизировать вероятность возникновения подобных ошибок.