MySQL terbunuh oleh OS setiap 25 hari atau lebih

9

Sekitar 4 bulan yang lalu kami bermigrasi dari MS SQL Server ke MySQL 5.5 . Sejak itu kami telah mengalami masalah sekali sekitar 25 hari sejak CentOS kehabisan memori dan akibatnya membunuh MySQL. Aman MySQL me-restart mysql sehingga database hanya benar-benar turun selama satu atau dua menit, tetapi kita bisa menderita kerugian kinerja dan konektivitas selama berjam-jam sebelum CentOS membunuh thread mysqld.

Kami biasanya melihat masalah dari jam 1 pagi hingga jam 5 pagi , tetapi tidak pernah pada siang hari ketika lalu lintas tertinggi yang merupakan apa yang benar-benar membingungkan tentang situasi ini. Meskipun biasanya melihat masalah konektivitas dan kinerja dari jam 1 pagi sampai jam 5 pagi, server mysql biasanya terbunuh sekitar jam 4 pagi atau 5 pagi, sekitar waktu yang sama saat mysqldump berjalan.

Kami pikir mysqldumpmungkin penyebabnya. Namun itu dimulai pukul 4 pagi setiap hari, tetapi kami melihat masalah sedini jam 1 pagi pada beberapa malam. Juga mysqldumpberjalan dengan --optsaklar, jadi seharusnya tidak buffering banyak data selama proses dump.

Kami juga mempertimbangkan aplikasi cadangan yang kami gunakan yang mendapatkan file dump dan mendukungnya hingga direkam. Kami mengubah waktu berjalan hingga 6 pagi dan masalahnya tidak berubah.

Kami memiliki beberapa pekerjaan yang berjalan secara berkala sepanjang malam, tetapi tidak ada yang sangat intensif sumber daya dan tidak butuh waktu lama untuk berjalan sama sekali.

Berikut adalah beberapa statistik untuk apa yang kami kerjakan dan entri saat ini dalam my.cnffile. Setiap bantuan atau saran untuk hal-hal yang dapat kita coba akan sangat dihargai.

STATUS SERVER :

  • Intel (R) Xeon (R) CPU E5530 @ 2.40GHz
  • core cpu: 4
  • Memori: 12293480 (12 gigs)

OS :

  • CentOS 5.5
  • Linux 2.6.18-274.12.1.el5 # 1 SMP Sel 29 Nov 13:37:46 EST 2011 x86_64 x86_64 x86_64 GNU / Linux

MY.CNF:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock

skip-name-resolve

ssl-ca=<file location>
ssl-cert=<file location>
ssl-key=<file location>

back_log = 50
max_connections = 500
table_open_cache = 2048
table_definition_cache = 9000
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 130
thread_concurrency = 16
query_cache_size = 64M
query_cache_limit = 1M
ft_min_word_len = 4
default-storage-engine=INNODB
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=/log/mysql/mysql-bin
expire_logs_days=7
binlog_format=mixed
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 7G
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 70
innodb_lock_wait_timeout = 120

[mysql]
no-auto-rehash

[mysqld_safe]
open-files-limit = 8192
bahamat
sumber
Konfigurasikan log kesalahan dev.mysql.com/doc/refman/5.5/en/error-log.html dan periksa apakah ada sesuatu yang terdaftar saat masalah terjadi
Saya menggunakan situs ini omh.cc/mycnf dan menentukan bahwa masalahnya kemungkinan besar dengan konfigurasi itu sendiri. Saya akan menyesuaikan banyak kolam koneksi terkait myisam dan melihat apakah itu membantu dengan konsumsi memori.
2
CentOS 5.5 tidak terkini. 5.8 adalah (jika Anda peduli dengan keamanan OS)
Nils
1
Solusinya akan menarik. Bisakah Anda mempostingnya sebagai jawaban untuk pertanyaan Anda sendiri?
Nils
duplikat pos di utas reddit di mana ia diselesaikan. itu juga diposting di forum MySQL
Mark McKinstry

Jawaban:

2
  1. Anda harus memeriksa log kesalahan MySQL

  2. Periksa apakah nilai ini sama dengan ulimit -afile terbuka:

    int my.cnf 
    [mysqld_safe]
    open-files-limit = 8192
    
Bill Xie
sumber
0

Konfigurasi Anda bermasalah.

Di sini gunakan alat ini . Ini memberi tahu Anda berapa banyak memori RAM yang Anda butuhkan untuk konfigurasi khusus Anda?

RAM Anda saat ini seperti yang Anda sebutkan adalah 12GBtetapi Anda membutuhkan 31.6GB500 koneksi MySQL aktif.

Session variables
max_allowed_packet 16.0 MB
sort_buffer_size 8.0 MB
net_buffer_length 16.0 KB
thread_stack 192.0 KB
read_rnd_buffer_size 16.0 MB
read_buffer_size 2.0 MBSession variables
max_allowed_packet 16.0 MB
sort_buffer_size 8.0 MB
net_buffer_length 16.0 KB
thread_stack 192.0 KB
read_rnd_buffer_size 16.0 MB
read_buffer_size 2.0 MB
join_buffer_size 8.0 MB
Total (per session)50.2 MB
Global variables
innodb_log_buffer_size 1.0 MB
query_cache_size 64.0 MB
innodb_buffer_pool_size 7.0 GB
innodb_additional_mem_pool_size 16.0 MB
key_buffer_size 32.0 MB
Total 7.1 GB
Total memory needed (for 500 connections): 31.6 GB
Ahmad Awais
sumber