Jak ustawić ulimit w usłudze systemowej?
To pytanie dotyczące przepełnienia stosu wyjaśnia, że systemd ignoruje ograniczenia systemowe
Jak wyglądałaby składnia, aby ustawić następujące ulimity?
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
.Odpowiedzi:
Odwzorowania systemowych limitów na ulimit
Jeśli ulimit jest ustawiony na „nieograniczony”, ustaw go na „nieskończoność” w konfiguracji systemowej
ulimit -c unlimited
jest taki sam jakLimitCORE=infinity
ulimit -v unlimited
jest taki sam jakLimitAS=infinity
ulimit -m unlimited
jest taki sam jakLimitRSS=infinity
Tak wyglądałaby końcowa konfiguracja
W tym konkretnym przypadku nie znam pełnej ścieżki Java (ponieważ zmienia się ona w zależności od typu serwera), a systemd nie jest zadowolony ze ścieżek względnych, zawijam polecenie Java w prostym skrypcie bash znajdującym się pod adresem
/opt/solr/bin/solr-foo
źródło
RUNAS
iSOLR_ENV
albo skorygowane albo usunięte. A potem wbin/solr
skrypcie powłoki jest cała dudka, która jest zupełnie niepotrzebna pod menedżerem serwisu.bin/solr
skryptu.exec
w skrypcie powłoki.