The mappings of systemd limits to 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= ulimit -R Microseconds
If a ulimit is set to 'unlimited' set it to 'infinity' in the systemd config
ulimit -c unlimited
is the same as LimitCORE=infinity
ulimit -v unlimited
is the same as LimitAS=infinity
ulimit -m unlimited
is the same as LimitRSS=infinity
So a final config would look like
[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
In this particular case, I don't know the full java path (since it changes based on server type), and systemd isn't happy about relative paths, I wrap the java command in a simple bash script located at /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
. – Totor Aug 11 '17 at 09:58