Kısa süre önce MySQL çalıştıran eski bir sunucuyu MariaDB 5.5 çalıştıran yeni bir VPS'ye taşıdım. Sunucuda çok fazla çalışmıyorum (sadece birkaç PHP sitesi) ve boş bellek iyi görünüyor, ancak DB çökmeye devam ediyor - bazen birkaç günde bir, birkaç saat içinde diğer zamanlarda.
Günlüklerde aşağıdaki hataları alıyorum:
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231 1:43:04 InnoDB: The InnoDB memory heap is disabled
131231 1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231 1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231 1:43:04 InnoDB: Using Linux native AIO
131231 1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231 1:43:04 InnoDB: Completed initialization of buffer pool
131231 1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231 1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231 1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231 1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231 1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231 1:43:04 [ERROR] Aborting
131231 1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete
Ben yardımcı gibi görünmüyor InnoDB Heap için my.cnf ayarları ile oynadım. İlgili bölüm:
innodb_buffer_pool_size = 128M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
Ben "bol" boş RAM var gibi, ve ben de kullanılabilir bazı takas var:
root@phoenix:~# free -m
total used free shared buffers cached
Mem: 994 923 71 0 19 417
-/+ buffers/cache: 486 508
Swap: 1023 131 892
Bu sorunu nasıl çözebilir / giderebilirim? İnterwebz'i ipuçları için ovuşturdum, ancak hiçbir şey yardımcı olmadı.
top
neyin neden olabileceğini bilmek için , kullanılan dosya tanıtıcılarını ve çökmeden önce ve sonra kullanılan belleği (hatta her aralıkta komut dökümü ) günlüğe kaydetmelisiniz. Sunucularınızda mysql (mariadb) gibi çalışan başka hizmetler var mı?
[ERROR] mysqld: Out of memory
güçlü bir ipucuna benziyor. Çekirdeğin (OOM) mysql'i öldürmeye karar verip vermediğini görmek için sistem günlüklerinizi kontrol ettiniz mi?