Amazon EC2 Instance - m1.medium Ubuntu 12.04 - начал падать три дня назад
Окружающая среда:
Amazon EC2 Instance - m1.medium
Ubuntu 12.04
Apache 2.2.22 - Running a Drupal Site
Using MySQL DB Server
RAM info:
~$ free -gt
total used free shared buffers cached
Mem: 3 1 2 0 0 0
-/+ buffers/cache: 0 2
Swap: 0 0 0
Total: 3 1 2
Hard drive info:
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.9G 4.7G 2.9G 62% /
udev 1.9G 8.0K 1.9G 1% /dev
tmpfs 751M 180K 750M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.9G 0 1.9G 0% /run/shm
/dev/xvdb 394G 199M 374G 1% /mnt
Эта проблема
Около двух дней назад сайт начал отказывать, потому что сервер MySQL был закрыт Apache со следующим сообщением:
kernel: [2963685.664359] [31716] 106 31716 226946 22748 0
0 0 mysqld
kernel: [2963685.664730] Out of memory: Kill process 31716 (mysqld)
score 23 or sacrifice child
kernel: [2963685.664764] Killed process 31716 (mysqld)
total-vm:907784kB, anon-rss:90992kB, file-rss:0kB
kernel: [2963686.153608] init: mysql main process (31716)
killed by KILL signal
kernel: [2963686.169294] init: mysql main process ended, respawning
Это говорит о том, что виртуальная машина занимала 0,9 ГБ, но у моего Ram 2 ГБ свободно, поэтому 1 ГБ все еще оставалось свободным. Я понимаю, что в приложениях Linux можно выделить больше памяти, чем физически доступно. Я не знаю, если это проблема, это первый раз, когда это начало происходить. Очевидно, что сервер MySQL пытается перезапустить, но, очевидно, для него нет памяти, и он не будет перезагружен. Вот его журнал ошибок:
Plugin 'FEDERATED' is disabled.
The InnoDB memory heap is disabled
Mutexes and rw_locks use GCC atomic builtins
Compressed tables use zlib 1.2.3.4
Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
Completed initialization of buffer pool
Fatal error: cannot allocate memory for the buffer pool
Plugin 'InnoDB' init function returned error.
Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
[Note] /usr/sbin/mysqld: Shutdown complete
Я просто перезапустил службу Mysql. Примерно через два часа это случилось снова. Я перезапустил это. Затем это случилось снова 9 часов спустя. Затем я подумал о параметре MaxClients в apache.conf, и я решил проверить его. Это было установлено в 150. Я решил понизить это до 60. Как так:
<IfModule mpm_prefork_module>
...
MaxClients 60
</IfModule>
<IfModule mpm_worker_module>
...
MaxClients 60
</IfModule>
<IfModule mpm_event_module>
...
MaxClients 60
</IfModule>
Как только я это сделал, у меня был перезапуск службы apache2, и все прошло гладко в течение 3/4 дня. Так как ночью служба MySQL снова закрылась, но на этот раз она не была убита службой Apache2. Вместо этого он вызвал OOM-Killer со следующим сообщением:
kernel: [3104680.005312] mysqld invoked oom-killer: gfp_mask=0x201da, order=0,
oom_adj=0, oom_score_adj=0
kernel: [3104680.005351] [<ffffffff81119795>] oom_kill_process+0x85/0xb0
kernel: [3104680.548860] init: mysql main process (30821) killed by KILL signal
Теперь у меня нет идей. В некоторых статьях говорится, что в идеале нужно изменить поведение ядра следующим образом (включить его в файл /etc/sysctl.conf).
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
Так что никаких чрезмерных коммитов не будет. Мне интересно, если это путь? Имейте в виду, я не администратор сервера, у меня есть базовые знания.
Большое спасибо заранее.