premature ENOMEM

Brad Penoff penoff at cs.ubc.ca
Sat Feb 27 01:00:38 UTC 2010


Solved!!!

Peter Lei of Cisco noticed this application uses mmap rather than
malloc so I could get what I wanted (go beyond 200 MB without ENOMEM)
if I adjusted sysctl -w vm.max_proc_mmap to be a higher value.

Thanks so much for everyone's help,
brad

On Fri, Feb 26, 2010 at 8:12 AM, Brad Penoff <penoff at cs.ubc.ca> wrote:
> Thanks Anton for the advice about a low kern.maxdsiz .  Does that work
> on your machine?  I tried to give instructions in the original post so
> that anyone can tune their machine and try to see what I am seeing.
> Can others try to see on their own machines if the suggestions work?
> I'll do anything to help (even provide machines, if need be).  I'm
> surprised how difficult this is FreeBSD compared to Linux and Mac OS
> X, but I think FreeBSD will be the most performant if I can get over
> this hump.
>
> On my machine, I had kern.maxdsiz, kern.maxssiz, and kern.dfldsiz all
> set to 2147483648 to match the 2 GB on my machine; that wasn't working
> though.  I tried to modify but had much worse results...
>
> I set this:
> kern.maxdsiz="1000000"
> kern.maxssiz="2147483648"
> kern.dfldsiz="2147483648"
> ... and NFS didn't load.
>
> I set this:
> kern.maxdsiz="0"
> kern.maxssiz="2147483648"
> kern.dfldsiz="2147483648"
> ... and sshd didn't load!
>
> What combination should I try or what combination did you have in
> mind?  Please excuse my ignorance.
>
> Also, I don't understand the link you sent... was it mistyped?  It
> seems to go to some index and not any advice on this matter...
> http://docs.freebsd.org/cgi/mid.cgi?200207291839.g6TIduVw055637
>
> Thanks again for your help and ahead of time to anyone else's... I'm
> getting a bit desperate and I'm surprised how difficult this is to get
> working in FreeBSD when it was so simple in Linux and Mac OS X.  The
> thing is, I typically use FreeBSD for the best performance but I can't
> even get it to run there, at the moment.
>
> Thanks,
> brad
>
>
> On Thu, Feb 25, 2010 at 10:49 PM, Brad Penoff <penoff at cs.ubc.ca> wrote:
>> Greetings,
>>
>> I have a 32-bit machine with 2 GB running FreeBSD 8.  I have a complex
>> application that starts getting ENOMEM once the resident memory is
>> about 200 MB.  I adjusted the appropriate /boot/loader.conf and
>> /etc/login.conf settings resulting in an increase in the "limit"
>> values to around 2 GB, but still the complex application gives me
>> ENOMEM at 200 MB.  Including swap space, I should be able to handle 3
>> GB in an application.  I need help understanding how I can enable this
>> or why I cannot.
>>
>> I had this same problem on FreeBSD 6.3 about a year and a half ago,
>> but I found an application-level work-around particular for FreeBSD
>> (the full thread is here http://markmail.org/message/5nsld7pb25m5bfja
>> ; but we found no general solution unfortunately ).  This
>> application-level work-around is no longer sufficient so I wanted to
>> revisit the root of this problem I was seeing and hopefully ask this
>> community of smart hackers to give me a hand here...
>>
>> I have created a simplified application that demonstrates this exact
>> same problem and made it easy to reproduce.  I was hoping that some
>> kind and helpful person could take a look at it and help me out.  It
>> doesn't require any editing of code or anything... In the end, I just
>> need to know how to configure my FreeBSD box with 2 GB of RAM to not
>> give me ENOMEM for this application when it is using only 200 MB,
>> something that never happened in the previous unresolved thread
>> reverenced above.
>>
>> This simplified application has a deliberate memory leak but the goal
>> is for it to not give ENOMEM at 200 MB (I want to be able to use about
>> 1.5 GB).  I have created a tarball... I think it may only work on a
>> 32-bit machine.
>>
>> download/wget http://cs.ubc.ca/~penoff/reslim.tgz
>> tar zxf reslim.tgz
>> cd reslim
>> gmake (or make on Linux)
>> sh ./myumem.sh
>>
>> On my system, when this prints our an error message, in "top", I only
>> see about 200 MB of both "SIZE" and "RES" (they are a few numbers
>> off).  The goal is for "SIZE" to be 1.5 GB or higher; "RES" is up to
>> the OS.  For example, on Linux, "SIZE" (called "VIRT") goes as high as
>> 2.8 GB before the system just becomes slow and unusable (never saw
>> ENOMEM).  For FreeBSD, what can I change to increase the possible
>> "SIZE" before I see ENOMEM?  I have tried increasing
>> /boot/loader.conf values to match my 2 GB RAM (kern.maxdsiz,
>> kern.maxssiz, kern.dfldsiz), as well as unlimited values in
>> /etc/login.conf, but still 200 MB seems a hard limit.  Any ideas?  Why
>> is it not going beyond 200 MB?  Resident memory is equal to memory
>> size used by the app so why is it never going to disk to swap before
>> ENOMEM comes up?
>>
>> Thanks a million for any help or advice you could lend.  I would be
>> more than willing to help in any way, even providing a machine to try
>> this on (I could sponsor an emulab.net account).  Anxious to hear what
>> options exist.
>>
>> Thanks again,
>> brad
>>
>


More information about the freebsd-questions mailing list