no pv entries: increase vm.pmap.shpgperproc

Bill Moran wmoran at collaborativefusion.com
Mon Jan 22 14:12:20 UTC 2007


In response to "peter" <peter at topcomtech.com.cn>:
> > In response to "peter" <peter at topcomtech.com.cn>:
> > > Hi,
> > > My freebsd box runs the apache httpd2.0 server, postgresql8.1server,
> > > Recently, I got the below info in /var/crash.
> > > “Dump header from device /dev/da0s1b
> > >   Architecture: i386
> > >   Architecture Version: 2
> > >   Dump Length: 1073127424B (1023 MB)
> > >   Blocksize: 512
> > >   Dumptime: Wed Jan 17 16:39:08 2007
> > >   Hostname: myhost.mydomain.com
> > >   Magic: FreeBSD Kernel Dump
> > >   Version String: FreeBSD 6.0-RELEASE #0: Tue Apr 25 15:07:33 CST 2006
> > >     peter at myhost.mydomain.com:/usr/src/sys/i386/compile/MYKNL
> > >   Panic String: no pv entries: increase vm.pmap.shpgperproc
> > >   Dump Parity: 2383301964
> > >   Bounds: 49
> > >   Dump Status: good”
> > > I had searched in google, but I didn’t know how to do.
> > 
> > You _should_ be able to raise the vm.pmap.shpgperproc sysctl to prevent
> > the problem -- but there doesn't seem to be any such sysctl.  I'm not sure
> > what's going on here, but it seems to me that a PR is in order.
> 
> I had ever added the line "kern.vm.pmap.shpgperproc=4096" to /boot/loader.conf ,
> but it seems to be ineffective.

http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/108121

> > Failing that, you could set the following in your kernel config:
> > options PMAP_SHPGPERPROC=250
> > and rebuild/reinstall your kernel. 
> >
> > The default value is 200, so I expect 250 will be enough of a bump to
> > fix the problem.  If it's not, raise it a little higher and try again.
> > I don't know of any way to tell exactly what this value should be other
> > than trial and error.  I've seen warnings that raising this value too
> > high can result in an unbootable kernel, so take care to understand how
> > to recover from the installation of an unbootable kernel.
> 
> How to know the default value?

Experiment.  You can also look at the PV line in the sysctl vm.zone, but
I'm not sure how to interpret that information.

> The website on the box has about 22000  visits every day, so i think the
> physical memory size maybe small. 

OK.

> I configured httpd.conf like this:
> ....
> KeepAlive Off
> ....
> <IfModule prefork.c>
> StartServers         8
> MinSpareServers      3
> MaxSpareServers      5
> ServerLimit    170
> MaxClients         160
> MaxRequestsPerChild 300
> </IfModule>
> .....

If this is a dedicated web server, you sure are configuring it wrong.
First off, you tell it to start 8 workers, then immediately kill off
three of them to meet the MaxSpareServers.  That's pretty minor, however,
as it only happens at startup.

MaxSpareServers of 5 is pretty low for a busy webserver.  If the site
is seeing a lot of traffic, or the traffic is erratic, you're forcing
Apache to try to constantly tune itself to exactly what the load is.

If this server is dedicated to webserving, you'd do better to raise
MaxSpareServers to something like 25, so you have some spare capacity
when the load spikes instead of forcing Apache to do a lot of forking,
then kill off a lot of processes, then fork a lot of them again ...

But that discussion belongs on the Apache lists ...

-- 
Bill Moran
Collaborative Fusion Inc.


More information about the freebsd-questions mailing list