Trên một trong những bậc thầy MySQL của chúng tôi, OOM Killer đã gọi và giết máy chủ MySQL dẫn đến mất điện lớn. Sau đây là nhật ký 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
Máy này có RAM 64GB.
Sau đây là các biến cấu hình mysql:
innodb_buffer_pool_size = 48G
innodb_additional_mem_pool_size = 512M
innodb_log_buffer_size = 64M
Ngoại trừ một số plugin nagios và tập lệnh bộ sưu tập số liệu, không có gì khác chạy trên máy này. Ai đó có thể giúp tôi tìm hiểu lý do tại sao kẻ giết người OOM bị triệu tập và làm thế nào tôi có thể ngăn chặn nó để được triệu tập trong tương lai. Có cách nào tôi có thể nói với sát thủ OOM không giết máy chủ mysql không. Tôi biết chúng ta có thể đặt oom_adj
giá trị rất ít cho một quá trình để ngăn chặn nó bị giết bởi kẻ giết người OOM. Nhưng có cách nào khác để ngăn chặn điều này.
48G
+512M
+64M
vì cũng có một số chi phí và các cấu trúc khác cần xem xét; có một công thức cho việc này ở đâu đó nhưng tôi không thể tìm thấy nó ngay bây giờ. Không chắc chắn nếu điều này sẽ làm cho nó thổi64G
. Chỉ để chắc chắn rằng,free
xác nhận64G
có sẵn ở nơi đầu tiên?