Subject: Re: Replacement for grep(1) (part 2)
To: Robert Elz <kre@munnari.OZ.AU>
From: Matthew Dillon <>
List: tech-userlevel
Date: 07/14/1999 14:05:20
:Now let's look at what happens with the two methods.
:With all VM backed by real mem or swap space, processes go about allocating
:memory - when there is no more left, the allocations start failing.
:If the process is perl, it just collapses in a heap, and the log file
:summary doesn't get made that day.   So sad...   If its sendmail, it
:issues "OS error, temporary failure" type responses, saves its queue files,
:and exits.   A later sendmail will deliver those messages, no harm.
:If its a shell, who knows (I forget what the shells do, I think most just
:keep trying, at least if interactive), but they consume mem at such a slow
:rate it doesn't matter - fork() would typically fail though, so no new
:processes could get started.   innd would just pause, and wait till a
:bit later when mem might be available again (those perls and sendmails
:all gone away).   named just the same (at least the named munnari ran).
:They're the two processes munnari was supposed to be runinng - those two
:don't just die.

    Which means that if one of those two processes happen to be the ones
    primarily responsible for running the machine out of VM, memory resources
    will never be released and now you can't even login!  Not only that, but 
    if you are running a news subsystem, it is actually *worse* if the news
    process bogs down and gets behind then it for the news process to simply 
    die and alert someone.   When you are pushing news, you cannot afford to
    get behind.

    Also, your named is badly misconfigured if it grows to 130MB.  We never
    allow ours to grow past 30MB.

    Since the machine is basically in an unworking state anyway, and since
    you can now no longer login, I don't quite see why you are happy that
    those two processes are still running.  From my standpoint, the machine
    is badly broken and needs to be rebooted and then fixed so the problems
    do not reoccur and I would be much happier if I could log into the beast
    to get that done then to have to hit the reset button.

:Now, with overcommit mode, we get an extra 30 seconds of life, because
:no doubt there are a few pages floating around that have been allocated
:to some process, but nothing has bothered to write into yet.   An extra 30
:... garbage removed ...
:Sure it would get lots of VM back again, but the system would no longer
:have been doing what it was supposed to be doing.   Adding more swap space

    The machine isn't doing what it is supposed to be doing in either case
    once it has run out of VM.  Except in the first case you think you should
    be happy because it didn't kill the news process, when in fact you ought
    to be trying to figure out why the thing ran out of VM in the first place
    and then fix it so it never happens again.

    To me, this whole scenario sounds like a badly configured machine which
    the sysop isn't willing to fix.  I feel sorry for the poor company who 
    hired that sysop!

:would be easy, but the wrong thing to do, that would just have allowed
:the system to page itself to death, thrashing into eternity - having
:processes go away is the only solution to this kind of problem.   Except
:it needs to be the right processes, and "right" does not equal "big",
:nor any other criteria the kernel could possibly figure out for itself.

    If you consider this a critical problem, then the only acceptable solution
    is to write a watchdog script that monitors swap utilization and kills
    the correct processes if swap starts to get low.  If you wait until swap
    actually runs out, you've already lost because too many things are likely
    to break in a general purpose computing environment.  Of course I suppose
    you could advocate that programs must be written 'properly' to handle 
    the case... well, more power to you, but in a general computing environment
    you are running dozens if not hundreds of third party applications and
    fixing them all is a pipe dream.

    It seems to me that you are willing to blame the operating system for
    a situation that is really not the OS's fault, and that you are not willing
    to sit down and spend the 10 minutes necessary writing a simple watchdog

    I don't bother to write watchdog scripts to check for swap, because my
    machines DO NOT RUN OUT OF SWAP.  If your machines do, then maybe you
    should consider writing the watchdog script.  Personally, I think you would
    get better reliability by fixing your systems.

    You are blaming what is essentially a last-resort effort by the kernel for
    not being nice to your processes.  Well Duh!  It's a last-resort mechanism,
    it isn't supposed to be nice.  Maybe you shouldn't be depending on last
    resort mechanisms to keep your machines running.

					Matthew Dillon