# Adjusting the File Handle Limits

This topic covers how to adjust file handle limits in Linux and MacOS. It also provides details on ensuring container platforms do not override the file handle limits configured in our Docker images.

## Docker Images

The Nexus Repository Docker images are configured with adequate file limits. Some container platforms such as Amazon ECS override the default limits. On these platforms, it is recommended that the Docker image be run with the following flags:

```
--ulimit nofile=65536:65536
```

## Linux Environments

### init.d

When using `init.d` we manage the file handle limit by setting persistent limits for a Linux user.

1. Add the following to the `/etc/security/limits.conf` file where the `userid` is the user running Nexus Repository.

```
<userid> - nofile 65536
<userid> - nproc 65536
```

2. Optional: Ubuntu ignores the `limits.conf` file for processes started by the `init.d` process. Edit the `/etc/pam.d/common-session` file and uncomment the following line:

```
# session    required   pam_limits.so
```

3. Restart the service for the change to take effect.

### systemd

When using `systemd` to launch the server, modify the configuration file to add a `LimitNOFILE` line:

```
[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNPROC=65536
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target
```

Restart the Nexus Repository for the change to take effect.

## MacOS Environments

The method to modify the file descriptor limits on MacOS has changed a few times over the years. Please note your OS version and follow the appropriate instructions.

### For OS X Yosemite (10.10) and newer

1. Create the file: `/Library/LaunchDaemons/limit.maxfiles.plist`

```
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
       <dict>
         <key>Label</key>
           <string>limit.maxfiles</string>
         <key>ProgramArguments</key>
           <array>
             <string>launchctl</string>
             <string>limit</string>
             <string>maxfiles</string>
             <string>65536</string>
             <string>65536</string>
           </array>
         <key>RunAtLoad</key>
           <true/>
         <key>ServiceIPC</key>
           <false/>
       </dict>
     </plist>
```

If this file already exists, then ensure the value is at least 65536 as shown.

The file must be owned by `root:wheel` and have permissions `-rw-r--r--`.

```
sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
```

Reboot to activate the change.

2. Add a new line to `$install-dir/bin/nexus.vmoptions` containing:

```
   -XX:-MaxFDLimit
```

Restart Nexus Repository to activate the change.

### For OS X Lion (10.7) up to OS X Mavericks (10.9)

1. Create and edit the system file `/etc/launchd.conf` using this command:

```
sudo sh -c 'echo "limit maxfiles 65536 65536" >> /etc/launchd.conf'
```

Reboot to activate the change.

2. Add a new line to `$install-dir/bin/nexus.vmoptions` containing:

```
   -XX:-MaxFDLimit
```

Restart Nexus Repository to activate the change.
