Does OpenBSD have a limit to the number of file descriptors?

5,518

Solution 1

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.

Solution 2

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.

Share:
5,518

Related videos on Youtube

cnst
Author by

cnst

Completed: mdoc.su — short manual page URLs, a deterministic URL shorterer, written wholly in nginx.conf aibs(4) in OpenBSD, DragonFly, NetBSD and FreeBSD WIP: ports.su — OpenBSD's ports-readmes based on sqlports bmap.su — 100Mbps residential broadband under 100$/mo BXR.SU — Super User's BSD Cross Reference (publicly private beta over IPv6) ngx.su — grok nginx

Updated on September 18, 2022

Comments

  • cnst
    cnst almost 2 years

    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)?

  • sambler
    sambler about 4 years
    @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.