<mohammadrony>

Open File Limits

  • Default configuration is for 2-4 GB RAM.
  • Increase limits for "too many open files" error.
  • Limit varies for available RAM and CPU.
  • Running Containers, Database server needs to increase limit.

Configuration

System wide configuration

sudo vi /etc/sysctl.conf
# Limit for 8 GB RAM
# /etc/sysctl.conf
fs.nr_open=65536
fs.file-max=65536
net.core.somaxconn=16384
net.core.netdev_max_backlog=16384
net.ipv4.tcp_max_syn_backlog=16384
fs.inotify.max_user_watches=65536
# Limit for 16 GB RAM
fs.nr_open=131072
fs.file-max=131072
net.core.somaxconn=32768
net.core.netdev_max_backlog=32768
net.ipv4.tcp_max_syn_backlog=32768
fs.inotify.max_user_watches=131072
# Limit for 32 GB RAM
fs.nr_open=262144
fs.file-max=262144
net.core.somaxconn=65535
net.core.netdev_max_backlog=65536
net.ipv4.tcp_max_syn_backlog=65536
fs.inotify.max_user_watches=262144
sudo sysctl -p

Process resource limits

sudo vi /etc/security/limits.conf
# Limit for 8 GB RAM
*     soft     nproc      32768
*     hard     nproc      32768
*     soft     nofile     32768
*     hard     nofile     32768
root  soft     nproc      32768
root  hard     nproc      32768
root  soft     nofile     32768
root  hard     nofile     32768
# Limit for 16 GB RAM
*     soft     nproc      65535
*     hard     nproc      65535
*     soft     nofile     65535
*     hard     nofile     65535
root  soft     nproc      65535
root  hard     nproc      65535
root  hard     nofile     65535
root  soft     nofile     65535
# Limit for 32 GB RAM
*     soft     nproc      131072
*     hard     nproc      131072
*     soft     nofile     131072
*     hard     nofile     131072
root  soft     nproc      131072
root  hard     nproc      131072
root  soft     nofile     131072
root  hard     nofile     131072

System service resources

sudo vi /etc/systemd/system.conf
# Limit for 8 GB RAM
DefaultLimitNOFILE=32768
DefaultLimitNPROC=32768
# DefaultTasksMax=32768
# Limit for 16 GB RAM
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
# DefaultTasksMax=65535
# Limit for 32 GB RAM
DefaultLimitNOFILE=131072
DefaultLimitNPROC=131072
# DefaultTasksMax=131072

[Optional] User level system service

sudo vi /etc/systemd/user.conf
# Limit for 8 GB RAM
DefaultLimitNOFILE=32768
DefaultLimitNPROC=32768
# DefaultTasksMax=32768
# Limit for 16 GB RAM
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
# DefaultTasksMax=65535
# Limit for 32 GB RAM
DefaultLimitNOFILE=131072
DefaultLimitNPROC=131072
# DefaultTasksMax=131072

Limit apply in new session

sudo vi /etc/pam.d/common-session

Add

session required pam_limits.so
sudo vi /etc/pam.d/common-session-noninteractive

Add

session required pam_limits.so

Apply Configuration

Daemon reload

sudo systemctl daemon-reload

Restart services

sudo systemctl restart <service-name>

Reload login session

sudo systemctl restart systemd-logind
# exec su -l $USER

Restart

sudo reboot now

Check Status

Kernel parameters

sysctl -a
sysctl fs.file-max

System configuration

systemctl show
systemctl show --property DefaultLimitNPROC
systemctl show --property DefaultLimitNOFILE