Page 1 of 23

MySQL падает

Posted: Mon Aug 26, 2013 7:30 am
by Avanege
Привет ребята, подскажите в чем проблема.
У меня стоит Drupal CMS, в некоторые момент на совершенно не нагруженном сайте (1-3 посетителя) падает MySQL.

Вот часть лог файла перед падением. (После падения, MySQL сервер не запускается)
Version: '5.5.33' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL) by Remi
130826 02:09:25 mysqld_safe Number of processes running now: 0
130826 02:09:25 mysqld_safe mysqld restarted
130826 2:09:25 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
130826 2:09:25 [Note] Plugin 'FEDERATED' is disabled.
130826 2:09:25 InnoDB: The InnoDB memory heap is disabled
130826 2:09:25 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130826 2:09:25 InnoDB: Compressed tables use zlib 1.2.3
130826 2:09:25 InnoDB: Using Linux native AIO
130826 2:09:25 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130826 2:09:25 InnoDB: Completed initialization of buffer pool
130826 2:09:25 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130826 2:09:25 [ERROR] Plugin 'InnoDB' init function returned error.
130826 2:09:25 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130826 2:09:25 [ERROR] Unknown/unsupported storage engine: InnoDB
130826 2:09:25 [ERROR] Aborting

130826 2:09:25 [Note] /usr/libexec/mysqld: Shutdown complete

130826 02:09:25 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Re: MySQL падает

Posted: Mon Aug 26, 2013 8:29 am
by skid
Причина падений видна в строке
Fatal error: cannot allocate memory for the buffer pool
Серверу нехватает оперативной памяти для работы. Попробуйте уменишить до 20 ол-во max_connections в конфигурационном файле /etc/my.cnf

Re: MySQL падает

Posted: Mon Aug 26, 2013 2:04 pm
by Avanege
skid wrote:Причина падений видна в строке
Fatal error: cannot allocate memory for the buffer pool
Серверу нехватает оперативной памяти для работы. Попробуйте уменишить до 20 ол-во max_connections в конфигурационном файле /etc/my.cnf
Очень странно, сервер поставил на чистый CentOs с 512 оперативки - DigitalOcean

Re: MySQL падает

Posted: Wed Aug 28, 2013 6:11 pm
by rez0n
У меня сейчас похожая ситуация. Тоже DigitalOcean 512.
Зажимаю на 5 секунд F5 и получаю

Code: Select all

[root@quaded ~]# service mysqld status
mysqld dead but subsys locked
В логе

Code: Select all

130828 20:48:28 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130828 20:48:28 [Note] Plugin 'FEDERATED' is disabled.
130828 20:48:28 InnoDB: The InnoDB memory heap is disabled
130828 20:48:28 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130828 20:48:28 InnoDB: Compressed tables use zlib 1.2.3
130828 20:48:28 InnoDB: Using Linux native AIO
130828 20:48:28 InnoDB: Initializing buffer pool, size = 128.0M
130828 20:48:29 InnoDB: Completed initialization of buffer pool
130828 20:48:29 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130828 20:48:29  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
130828 20:48:29  InnoDB: Waiting for the background threads to start
130828 20:48:30 InnoDB: 5.5.31 started; log sequence number 7085934
130828 20:48:30 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130828 20:48:30 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130828 20:48:30 [Note] Server socket created on IP: '0.0.0.0'.
130828 20:48:30 [Note] Event Scheduler: Loaded 0 events
130828 20:48:30 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.31'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL) by Remi
130828 20:49:47 mysqld_safe Number of processes running now: 0
130828 20:49:48 mysqld_safe mysqld restarted
130828 20:49:51 [Note] Plugin 'FEDERATED' is disabled.
130828 20:49:51 InnoDB: The InnoDB memory heap is disabled
130828 20:49:51 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130828 20:49:51 InnoDB: Compressed tables use zlib 1.2.3
130828 20:49:51 InnoDB: Using Linux native AIO
130828 20:50:10 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
Что есть собственно ничего... Не вижу конкретной проблемы.

Re: MySQL падает

Posted: Wed Aug 28, 2013 7:36 pm
by rez0n
После переключения домена с phpcgi - сайт стал работать в 8 раз шустрее, но SQL падает практически моментально.
(Кстати не понятно, почему генерация страницы через phpcgi занимала 8 сек, а через hosting пресет 1.5)

Code: Select all

130828 22:29:55 mysqld_safe Number of processes running now: 0
130828 22:29:55 mysqld_safe mysqld restarted
130828 22:29:57 [Note] Plugin 'FEDERATED' is disabled.
130828 22:29:57 InnoDB: The InnoDB memory heap is disabled
130828 22:29:57 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130828 22:29:57 InnoDB: Compressed tables use zlib 1.2.3
130828 22:29:57 InnoDB: Using Linux native AIO
130828 22:29:57 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130828 22:29:57 InnoDB: Completed initialization of buffer pool
130828 22:29:57 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130828 22:29:57 [ERROR] Plugin 'InnoDB' init function returned error.
130828 22:29:57 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130828 22:29:57 [ERROR] Unknown/unsupported storage engine: InnoDB
130828 22:29:57 [ERROR] Aborting

130828 22:29:57 [Note] /usr/libexec/mysqld: Shutdown complete

130828 22:29:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Re: MySQL падает

Posted: Wed Aug 28, 2013 7:44 pm
by rez0n
Размер этого buffer pool
key_buffer x (max_connections x max_user_connections) = buffer pool size

Так получается?


UPD 1.
Попробовал сделать так.

Code: Select all

max_connections=70
max_user_connections=30
...
key_buffer = 1M
myisam_sort_buffer_size = 3M
Упал.

UPD 2.
Попробовал сделать так.

Code: Select all

max_connections=20
max_user_connections=30
...
key_buffer = 16M
myisam_sort_buffer_size = 32M
Упал.

UPD 3.
Попробовал сделать так.

Code: Select all

max_connections=20
max_user_connections=30
...
key_buffer = 1M
myisam_sort_buffer_size = 3M
На странице появилось сообщение "Can't connect to MySQL ...", через 10 сек сам поднялся. Пригрузил чутку сильнее (10 секунд ддоса по F5) - упал безвозвратно.

UPD 4.
По мотивам http://habrahabr.ru/qa/22541
Судя по всему нужно задать innodb_buffer_pool_size в размер страниц х2.
Но вопрос в том, что вообще есть эти страницы и как их считать.
У меня вот так.

Code: Select all

Buffer pool size   8192
Free buffers       7804
Database pages     387
387 чего? Байт чтоли.. skid, надеюсь на твою помощь.

UPD 5.
Сейчас сделал так.

Code: Select all

max_connections=70
max_user_connections=30
...
key_buffer = 16M
myisam_sort_buffer_size = 32M
...
innodb_buffer_pool_size=10M
mysql> SHOW ENGINE INNODB STATUS\G;
отдает следующее.

Code: Select all

Buffer pool size   639
Free buffers       251
Database pages     387
По сути никаких изменений. Mysql так же падает и сайт по туже стал работать.

Re: MySQL падает

Posted: Thu Aug 29, 2013 10:28 am
by rez0n
Есть подозрение что проблема в настройке Httpd/nginx... Возможно создает очень много запросов?

У меня на аналогичной конфигурации, только с ISP manager - sql не вешается. Очень долго думает после такого стресс теста, но не вешается.

UPD 2.
Поднял тариф до 1GB Ram. При "зажатии" F5 - через секунд 7-10 получаю "Database connection error (2): Could not connect to MySQL." При этом, вот что в htop происходит - http://verbin.pp.ua/screen/Quaded_-_Xsh ... .01.09.png
Собственно отпускаю F5, жду 2 сек и жму снова - сайт есть, sql падать перестал. Это меня видимо рубит по max_user_connections... Так?

UPD 3.
Попробовал поднять max_connections и max_user_connections в 10 раз. Держится дольше, но в итоге умирает и не подымается до service restart.

Скорее всего нужно смотреть в сторону httpd/nginx на кол-во запросов от юзера, дабы не доводить до лимита подключений. Даже если лимит подключений будет 20, mysql - не упадет, но все равно будет сообщение о "Database connection error (2): Could not connect to MySQL.", что уже есть неприятность, так как выводится это всем пользователям (это я проверял).

Re: MySQL падает

Posted: Thu Aug 29, 2013 11:53 am
by vitroot
могу бесплатно помочь без проблем, но без доступа к серверу я бы гадать не стал, в лимит какого конкретно буфера он упирается.

Re: MySQL падает

Posted: Thu Aug 29, 2013 1:25 pm
by skid
По скриншоту видно, что сервер серьезно нагружен. Показатель LA равен 8.89. Это много.

LoadAverage это комплексное из нескольких показателей. Для подсчета используется количество выполняющихся процессов, количество процессов ожидающих процессороного времени и количество спящих процессов, тех которые ждух ответа системы ввода ввывода. Чаще всего узким горлышком становится система ввода вывода, то есть диск.

В этой ситуации видно, что загружен процессор. В тоже самое время, общее количество процессов небольшое и можно сделать вывод, что 1 конкретный запрос кладет всю систему на лопатки. Почему так происходит сказать сложно. Нужно собрать больше информации. Много вопросов вызывает сайт, точнее его код. Возможно при данных условиях возникает бесконечный цикл?

Попробуйте вернуться к изначальным настройкам MySQL.
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_connections=25
max_user_connections=20
wait_timeout=10
interactive_timeout=50
long_query_time=5
#log-queries-not-using-indexes
#log-slow-queries=/var/log/mysql/log-slow-queries.log

key_buffer = 16M
myisam_sort_buffer_size = 32M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=1024
thread_cache_size=286
interactive_timeout=25
connect_timeout=5
max_allowed_packet=1M
max_connect_errors=1000
query_cache_limit=1M
query_cache_size=8M
query_cache_type=1
tmp_table_size=16M

#innodb_use_native_aio = 0
innodb_file_per_table

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Прооптимизируйте базы на сервере

Code: Select all

mysqlcheck -Ao

Приведите файл /etc/httpd/conf.d/status.conf к следующему виду

Code: Select all

Listen 127.0.0.1:8081
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from all
</Location>
Переведите сайт на default шаблон и перезапустите апач или даже весь сервер.

После перезапуска внимательно следите за запросами к апачу, открыв в браузере http://xxx.xxx.xxx.xxx/server-status
Проверьте количество запросов в секунду и посмотрите на сами запросы.

То же самое для MySQL

Code: Select all

mysqladmin status
mysqladmin processlist
В системе есть swap раздел? Он используется?

Code: Select all

free -m
Какая нагрузка

Code: Select all

top -b |head -n5

Re: MySQL падает

Posted: Thu Aug 29, 2013 2:05 pm
by rez0n
Нагрузка это да, так как запросов очень много.

Вот конкретно по этому серверу.

Code: Select all

[root@quaded ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           996        517        479          0         17        202
-/+ buffers/cache:        298        698
Swap:            0          0          0
[root@quaded ~]# top -b |head -n5
top - 17:03:23 up  3:12,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.8%us,  1.8%sy,  0.0%ni, 91.5%id,  0.3%wa,  0.3%hi,  0.2%si,  0.0%st
Mem:   1020592k total,   530360k used,   490232k free,    17796k buffers
Swap:        0k total,        0k used,        0k free,   207160k cached
[root@quaded ~]# 
Я проверил на других серверах с vesta (2G RAM и выше) - тоже падает, F5 держать нужно долго, но в итоге падает.
С ISPManager конфигурацией - даже на дохленьком сервере, еле еле, очень медленно - но вывозит и не падает.