Hi All, I have a server that has its swappiness set to 0. It is running a little tight on memory and so there have been a couple of events where the OOM_killer has been invoked and killed off MySQL, which you would expect. Now if you have your swappiness at 0 then "A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone."[1] So even in this event should I expect to start swapping instead of invoking the oom_killer? Is the logic Memory request -> OOM - > Can I swap? Y-> swap N-> OOM-Killer Or as the OOM-Killer there to prevent an OOM Condition, that as the OOM Condition is prevented by killing mysql and therefore we will never swap? Any clarification on how this all works in this situation would be most helpful. [1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/sysctl/vm.txt Kind Regads -- Callum
On 09/16/2015 09:11 AM, Callum Scott wrote:> It is running a little > tight on memory and so there have been a couple of events where the > OOM_killer has been invoked and killed off MySQL, which you would expect.One thing that should be noted is that regardless of swappiness, overcommit might be an issue. If a single process is using most of the memory in a system, and attempts to fork(), as it will if it calls system(), then the system may require that there is enough memory for a second instance of that huge process. This is one of the reasons why swap should be as large or larger than system RAM. If you have very little swap, you should consider allocating more, or reviewing the overcommit options in addition to the swappiness settings.
Gordon Messmer wrote:> On 09/16/2015 09:11 AM, Callum Scott wrote: >> It is running a little >> tight on memory and so there have been a couple of events where the >> OOM_killer has been invoked and killed off MySQL, which you would >> expect. > > One thing that should be noted is that regardless of swappiness, > overcommit might be an issue. If a single process is using most of the > memory in a system, and attempts to fork(), as it will if it calls > system(), then the system may require that there is enough memory for a > second instance of that huge process. > > This is one of the reasons why swap should be as large or larger than > system RAM.<snip> Excerpt on heavy-duty servers. We're certainly not going to allocate hundreds of gigs, or a terabyte or so, for swap. (Yes, we do have servers with that kind of RAM, and that's not counting the small SGI supercomputer....) mark