7

What's the maximum number of file descriptors that a process can get on OpenBSD successfully?

For example, there is an openfiles limit in login.conf(5) in OpenBSD. If I want to have as many file descriptors as possible, but still don't let a runaway process to bog down the system, what would be a sensible value to set?

E.g. if I specify, say, 20000, will the kernel be capable of giving my application all of these 20000 FDs? What if I'm running multiple instances of a given application (e.g. multiple worker processes)?

5

Taking a look at the source code, to get the default value of max open files:

Well documented code

extern int maxfiles;                 /* kernel limit on number of open files */

maxfiles, on param.c defines the formula to maxfiles

int maxfiles = 5 * (NPROCESS + MAXUSERS) + 80;

OK, we found it.

NPROCESS =

#define NPROCESS (30 + 16 * MAXUSERS)

MAXUSERS = - Lets take amd64 architecture as an example:

machine         amd64
include         "../../../conf/GENERIC"
maxusers        80                      # estimated number of users

Lets sum all the stuff:

maxfiles = 5 * ((30 + 16 * 80) + 80) + 80
maxfiles = 5 * ((30 + 1280) + 80) + 80
maxfiles = 5 * (1390) + 80
maxfiles = 6950 + 80
maxfiles = 7030

To increase the total of max open files, you will need first of all to increase the max open files kernel limit with sysctl kern.maxfiles=20000 and increase the number of files a process/user can open, editing login.conf. This Tor daemon setup have both examples for you.

| improve this answer | |
4

There's a good chance that the default values are already set to reasonable values that will support most if not all use cases, they would be based on values found to be needed by running systems used by the OpenBSD developers and admins over the years of development and usage. I believe any limits would be programatically enforced and only truly limited by available resources.

On FreeBSD we have sysctl values for kern.maxfiles and kern.maxfilesperproc - I expect OpenBSD to have the same. Current default limits are much higher than they were just a few years ago as most systems now have enough resources that we don't have a need to limit them.

On my desktop machine I have maxfilesperproc at the default 18000 - I am running xfce4 with chrome, liferea, blender, gimp, text editors and terminals running - ps shows 215 processes and kern.openfiles is at 2683

If you get errors from too many open files then increase them but I doubt you would need to and I doubt you will overload your system by increasing them too high.

| improve this answer | |
  • Unfortunately in openbsd openfiles-max under daemon: is set to 1024, not remotely enough for a tor relay. This needs to be increased to something higher, such as 13500, as specified by the tor relay setup guide. – hygri May 19 at 10:15
  • @hygri yes, resource limits can be set in /etc/login.conf which are applied per user while the sysctl values are system wide. While you can adjust the login limits, it will be applied to all processes using the daemon class login. I would suggest adding a new class just for tor with altered settings. – sambler May 31 at 4:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.