Как бы вы установили ulimit в системном сервисном модуле?
Этот вопрос о переполнении стека объясняет, что systemd игнорирует системные ограничения
Как будет выглядеть синтаксис для установки следующих пределов?
ulimit -c
ulimit -v
ulimit -m
[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
SOLR_INSTALL_DIR=/opt/solr
SOLR_ENV=/etc/default/solr.in.sh
RUNAS=solr
SOLR_PID_DIR="/var/solr"
SOLR_HOME="/opt/solr/server/solr"
LOG4J_PROPS="/var/solr/log4j.properties"
SOLR_LOGS_DIR="/opt/solr/server/logs"
SOLR_PORT="8389"
PIDFile=/var/solr/solr-8389.pid
ExecStart=/opt/solr/bin/solr start
ExecStatus=/opt/solr/bin/solr status
ExecStop=/opt/solr/bin/solr stop
Restart=on-failure
User=solr
SuccessExitStatus=143 0
[Install]
WantedBy=multi-user.target
man 5 systemd.exec
.Ответы:
Отображение системных ограничений на ulimit
Если для ulimit установлено значение «unlimited», установите его в «infinity» в конфигурации systemd.
ulimit -c unlimited
такой же какLimitCORE=infinity
ulimit -v unlimited
и такойLimitAS=infinity
ulimit -m unlimited
же как иLimitRSS=infinity
Итоговый конфиг будет выглядеть так
В данном конкретном случае я не знаю полного пути Java (так как он изменяется в зависимости от типа сервера), и systemd не рад относительным путям, я заключаю команду Java в простой скрипт bash, расположенный по адресу
/opt/solr/bin/solr-foo
источник
RUNAS
иSOLR_ENV
либо исправлены, либо удалены. Кроме того, в сценарииbin/solr
оболочки есть все шумихи, которые совершенно не нужны для менеджера сервисов.bin/solr
скрипт.exec
в сценарии оболочки.