https://access.redhat.com/solutions/454133
Ядро резервирует некоторый объем памяти (пропорциональный ее общему размеру) при запуске для таблиц памяти (для преобразования виртуальных адресов в физические) . Эта память, предоставленная таблицам памяти, не может использоваться чем-либо еще и вычитается из сообщаемого общего объема памяти.
Чем больше размер физического ОЗУ, тем меньше соотношение памяти, которое не может быть использовано, к общему размеру физического ОЗУ:
On 12Gb desktop this ratio is around 4.5%
On 32Gb server this ratio is around 2%
On 512Gb server this ratio is around 1.56%
Ответ REDHAT: Это не ошибка, это особенность.
Самый простой ответ - установить ПУТЬ
как часть вашей команды ExecStart
в файле модуля systemd. Например, если у вас сейчас
ExecStart=/bin/mycmd arg1 arg2
, измените его на
ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'
. Расширение $ PATH
будет выполняться bash, а не systemd. Альтернативы, такие как использование Environment = PATH = / new / path: $ PATH
, не будут работать, поскольку systemd не будет расширять $ PATH
.
У меня был успех с программой env (systemd не позволяет изменять ее через файлы конфигурации):
ExecStart=/usr/bin/env PATH=/usr/bin:/path1:/path2 mycmd arg1 arg2
Обратите внимание, что env не запускает новую оболочку для выполнения программы, что может быть, а может и не быть тем, что вам нужно.