sysctl maxfiles

Jeremy Chadwick koitsu at FreeBSD.org
Sat Sep 27 20:31:47 UTC 2008


On Sat, Sep 27, 2008 at 10:14:09PM +0200, Miroslav Lachman wrote:
> Jeremy Chadwick wrote:
>> On Sat, Sep 27, 2008 at 11:10:01AM +1000, Aristedes Maniatis wrote:
>>
>>> By default FreeBSD 7.0 shipped with the sysctls set to:
>>>
>>> kern.maxfiles: 12328
>>> kern.maxfilesperproc: 11095
>
> [...]
>
>> Anyway, I'd like to know why you have so many fds open simultaneously in
>> the first place.  We're talking over 11,000 fds actively open at once --
>> this is not a small number.  What exactly is this machine doing?  Are
>> you absolutely certain tuning this higher is justified?  Have you looked
>> into the possibility that you have a program which is exhausting fds by
>> not closing them when finished?  (Yes, this is quite common; I've seen
>> bad Java code cause this problem on Solaris.)
>
> I can imagine some webhosting machine running Apache virtualhosts. Each  
> virtual host using 3 logfiles (access log, error log, IO log) so it is  
> "only" about 4000 domains (virtualhosts) which is not so uncommon in  
> these days ;)

We're a web/shell hosting provider who used to do it that way.  It
became unreasonable/impossible to manage.  Also, if said logfiles are
being placed in directories where users of those virtualhosts can remove
the files (and make symlinks to other places), that's a security hole
(because Apache opens webserver logfiles as root).

The way we do it is much more resource-friendly: log everything to a
single logfile, then every night split the logfile up (based on the
CustomLog %v parameter into per-vhost log files.  Apache comes with a
script to do this called split-logfile.

> I don't know what files are "really" open in the meaning of  
> kern.maxfiles. I have webserver with about 100 hosted domains and there  
> is some numbers:
>
> root at roxy ~/# fstat -u www | wc -l
>     9931

I don't think this is an accurate portrait of the number of open files.
The number is going to be too high; I believe entries that contain
FD=jail/mmap/root/text/tr/wd are not actual descriptors (are they?)

> root at roxy ~/# fstat -u root | wc -l
>      718
> root at roxy ~/# fstat | grep httpd | wc -l
>     6379
> root at roxy ~/# fstat | grep httpd | wc -l
>     6002
> root at roxy ~/# fstat -u www | wc -l
>     4691
> root at roxy ~/# sysctl kern.openfiles
> kern.openfiles: 846
>
> All above taken within few seconds.
>
> Can somebody explain the difference between kern.openfiles and fstat?

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |



More information about the freebsd-stable mailing list