Auf einem unserer MySQL-Master wurde OOM Killer aufgerufen und der MySQL-Server getötet, was zu einem großen Ausfall führte. Es folgt das Kernel-Protokoll:
[2006013.230723] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0
[2006013.230733] Pid: 1319, comm: mysqld Tainted: P 2.6.32-5-amd64 #1
[2006013.230735] Call Trace:
[2006013.230744] [<ffffffff810b6708>] ? oom_kill_process+0x7f/0x23f
[2006013.230750] [<ffffffff8106bde2>] ? timekeeping_get_ns+0xe/0x2e
[2006013.230754] [<ffffffff810b6c2c>] ? __out_of_memory+0x12a/0x141
[2006013.230757] [<ffffffff810b6d83>] ? out_of_memory+0x140/0x172
[2006013.230762] [<ffffffff810baae8>] ? __alloc_pages_nodemask+0x4ec/0x5fc
[2006013.230768] [<ffffffff812fca02>] ? io_schedule+0x93/0xb7
[2006013.230773] [<ffffffff810bc051>] ? __do_page_cache_readahead+0x9b/0x1b4
[2006013.230778] [<ffffffff810652f8>] ? wake_bit_function+0x0/0x23
[2006013.230782] [<ffffffff810bc186>] ? ra_submit+0x1c/0x20
[2006013.230785] [<ffffffff810b4e53>] ? filemap_fault+0x17d/0x2f6
[2006013.230790] [<ffffffff810cae1e>] ? __do_fault+0x54/0x3c3
[2006013.230794] [<ffffffff812fce29>] ? __wait_on_bit_lock+0x76/0x84
[2006013.230798] [<ffffffff810cd172>] ? handle_mm_fault+0x3b8/0x80f
[2006013.230803] [<ffffffff8103a9a0>] ? pick_next_task+0x21/0x3c
[2006013.230808] [<ffffffff810168ba>] ? sched_clock+0x5/0x8
[2006013.230813] [<ffffffff81300186>] ? do_page_fault+0x2e0/0x2fc
[2006013.230817] [<ffffffff812fe025>] ? page_fault+0x25/0x30
Dieses Gerät verfügt über 64 GB RAM.
Im Folgenden sind die MySQL-Konfigurationsvariablen aufgeführt:
innodb_buffer_pool_size = 48G
innodb_additional_mem_pool_size = 512M
innodb_log_buffer_size = 64M
Außer einigen Nagios-Plugins und Metrik-Erfassungsskripten wird auf diesem Computer nichts anderes ausgeführt. Kann mir jemand helfen, herauszufinden, warum der OOM-Killer aufgerufen wurde und wie ich verhindern kann, dass er in Zukunft aufgerufen wird? Kann ich OOM Killer auf irgendeine Weise anweisen, den MySQL-Server nicht zu töten? Ich weiß, dass wir oom_adj
für einen Prozess einen sehr geringen Wert festlegen können, um zu verhindern, dass er vom OOM-Killer getötet wird. Aber gibt es eine andere Möglichkeit, dies zu verhindern?
48G
+512M
+,64M
da auch einige Overhead- und andere Strukturen zu berücksichtigen sind. Irgendwo gab es eine Formel dafür, aber ich kann sie momentan nicht finden. Ich bin mir nicht sicher, ob dies dazu führen würde, dass es durchbrennt64G
. Nur um sicherzugehen,free
bestätigt, dass die64G
überhaupt verfügbar sind?