En uno de nuestros maestros de MySQL, OOM Killer fue invocado y mató al servidor MySQL, lo que provocó una gran interrupción. El siguiente es el registro del kernel:
[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
Esta máquina tiene 64 GB de RAM.
Las siguientes son las variables de configuración de mysql:
innodb_buffer_pool_size = 48G
innodb_additional_mem_pool_size = 512M
innodb_log_buffer_size = 64M
Excepto algunos de los complementos de nagios y scripts de recopilación de métricas, nada más se ejecuta en esta máquina. ¿Puede alguien ayudarme a averiguar por qué se invocó al asesino de OOM y cómo puedo evitar que se invoque en el futuro? ¿Hay alguna manera de decirle al asesino de OOM que no mate el servidor mysql? Sé que podemos establecer un oom_adjvalor muy bajo para un proceso para evitar que sea asesinado por OOM asesino. Pero, ¿hay alguna otra forma de evitar esto?
48G+512M+64Mporque también hay algunos gastos generales y otras estructuras a considerar; había una fórmula para esto en alguna parte, pero no puedo encontrarla en este momento. No estoy seguro si esto haría que explote64G. Sin embargo, solo para asegurarse, ¿freeconfirma que64Gestán disponibles en primer lugar?