How to set ulimits for mongod?

Modify /etc/security/limits.conf with what you need. Example:

user soft nproc 64000

This line will set the number of processors (-u) to 64000 for "user". Soft/hard limits can be the same (soft allows spikes while hard prevents spawning).


The newer version of the CentOS mongod startup script (/etc/init.d/mongod) has the default settings built into the start option:

start()
{
  # Recommended ulimit values for mongod or mongos
  # See http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
  #
  ulimit -f unlimited
  ulimit -t unlimited
  ulimit -v unlimited
  ulimit -n 64000
  ulimit -m unlimited
  ulimit -u 32000

  echo -n $"Starting mongod: "
  daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mongod
}

If you want to change the values and not modify the script, copy the script to /etc/init.d/mongod-custom, then edit the custom init script, set your values and change chkconfig to use mongod-custom instead of mongod.


To add to thaspius's answer, the limits seem to be set as he describes in the init script, but I was still getting the warning

[initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

This seems to suggest that files limit defined in the init script had taken effect, but not the processes limit. Also following Nathan C's answer and adding

mongod soft nproc 64000

to /etc/security/limits.d/90-nproc.conf and restarting the system solved the issue.

If anyone is able to shed light on why that was necessary despite having the values in the mongodb init script I'm all ears!