Os mapeamentos dos limites systemd para ulimit
Directive ulimit equivalent Unit
LimitCPU= ulimit -t Seconds
LimitFSIZE= ulimit -f Bytes
LimitDATA= ulimit -d Bytes
LimitSTACK= ulimit -s Bytes
LimitCORE= ulimit -c Bytes
LimitRSS= ulimit -m Bytes
LimitNOFILE= ulimit -n Number of File Descriptors
LimitAS= ulimit -v Bytes
LimitNPROC= ulimit -u Number of Processes
LimitMEMLOCK= ulimit -l Bytes
LimitLOCKS= ulimit -x Number of Locks
LimitSIGPENDING= ulimit -i Number of Queued Signals
LimitMSGQUEUE= ulimit -q Bytes
LimitNICE= ulimit -e Nice Level
LimitRTPRIO= ulimit -r Realtime Priority
LimitRTTIME= No equivalent
Se um ulimit estiver definido como 'ilimitado', defina-o como 'infinito' na configuração do systemd
ulimit -c unlimited
é o mesmo que LimitCORE=infinity
ulimit -v unlimited
é o mesmo que LimitAS=infinity
ulimit -m unlimited
é o mesmo queLimitRSS=infinity
Portanto, uma configuração final pareceria
[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
WorkingDirectory=/opt/solr/server
User=solr
Group=solr
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=65536
ExecStart=/opt/solr/bin/solr-foo
Restart=on-failure
SuccessExitStatus=143 0
SyslogIdentifier=solr
[Install]
WantedBy=multi-user.target
Nesse caso em particular, não conheço o caminho completo do java (já que ele muda com base no tipo de servidor) e o systemd não está satisfeito com os caminhos relativos, envolvo o comando java em um simples script bash localizado em /opt/solr/bin/solr-foo
#!/bin/bash
. /opt/solr/bin/solr.in.sh
# Load $JAVA_HOME from 1 of 2 places where it could be defined
# Last one wins
if [[ -f "/etc/profile.d/jdk.sh" ]]; then
. /etc/profile.d/jdk.sh
fi
if [[ -f "/etc/profile.d/zing.sh" ]]; then
. /etc/profile.d/zing.sh
fi
exec ${JAVA_HOME}/bin/java -server \
-Djetty.port=${SOLR_PORT} \
${SOLR_JAVA_MEM} \
${GC_TUNE} \
${GC_LOG_OPTS} \
-DzkClientTimeout=${ZK_CLIENT_TIMEOUT} \
-DzkHost=${ZK_HOST} \
-DSTOP.PORT=7900 \
-DSTOP.KEY=foobar \
-Dhost=${SOLR_HOST} \
-Duser.timezone=${SOLR_TIMEZONE} \
-Djetty.home=/opt/solr/server \
-Dsolr.solr.home=${SOLR_HOME} \
-Dsolr.install.dir=/opt/solr \
-Dlog4j.configuration=file:/var/solr/log4j.properties \
-Xss256k \
-Dbootstrap_conf=true \
-Dbootstrap_confdir=/opt/solr/server/solr/configsets/foobar/conf \
-Dcollection.configName=foobar \
-jar start.jar --module=http
man 5 systemd.exec
.