powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql периодически жрет ресурс CPU
54 сообщений из 54, показаны все 3 страниц
Mysql периодически жрет ресурс CPU
    #39260936
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сайт, сделан на Вордпрессе.
Проблема : приблизительно 1-3 раза в неделю, в бизнес-время( после 10:30 и до 16:00) сайт начинает долго открываться, выдавать через раз 502 ошибки, причем количество отказов быстро возрастает

Все это сопровождается тем, что mysql при этом резко начинает потреблять процессорный ресурс( с обычных 50-90% по top до 300 - 600%).
Нагрузка в бизнес-время: около 1500 запросов к MySQL в секунду
Хостится все это на нашем собственном сервере, сервер - виртуальная машина (гипервизор Proxmox) , 24 ядра и 28 ГБ ОЗУ(это сейчас, когда проблема проявилась первые разы, было 16 ядер и 16 ГБ ОЗУ).

Софт: Операционка Debian 8, nginx 1.6.2 в связке с php-fpm( версия php 5.6.14), mysql 5.5.44

Еще симптоматика:
При возрастающем потреблении процессорного ресурса в processlist видно от 100 до 200 запросов в состоянии waiting_for_query_cache_lock
Висит каждый из них в таком состоянии недолго, но если все оставить как есть, то количество запросов с таким состоянием увеличивается, потребление процессорного ресурса процессом mysqld возрастает,
и в syslog сыпяться ошибки типа BUG: soft lockup - CPU#10 stuck for 22s [php-fpm:20108]
Сайт превращается в однгу сполшную 502 ошибку, сервер может даже не отвечать на команды в консоли

Зато если на 30-60 секунд сайт отключить от базы данных, то запросы завершаются, и вновь подключенный сайт к БД спокойно может работать от нескольких часов до пары суток, пока вновь не произойдет такая ситуация

Как я понимаю, при возрастающем потреблении процессорного ресурса демоном mysql этого ресурса не хватает процессам php-fpm, которые в свою очередь вовремя не отдают ответ nginx, и возникает 502 ошибка
Чем меньше ресурса СPU для php-fpm - тем больше запросов к nginx возвращаются с ошибкой

Что делалось:
Во-первых, мы попробовали отказаться совсем от кэша запросов и вынесли каталог с временными таблицами(/dev/shm) в ОЗУ, но при отключенном кэше mysql сразу же жрет процессор до 600-1000%,
processlist показывает несколько сотен выолняющихся одновременно запросов с разным состоянием, время выполнения до 2 сек.,
сайт по сути не работает
Кэш вернули, поигрались с размером(от 32 до 96 МБ), на проблему это никак не повлияло, увеличили query_cache_min_res_unit с дефолтных 4 Кбайт до 8, чтобы избежать разбиения больших результатов запросов на большое количество блоков в кэше
Практически никак не повлияло.
Уменьшили wait_timeout до 2 сек., чтобы отсечь долго выполняющиеся запросы(хотя их и так не было ни в processlist, ни в slow-log)
Сайт продолжил работать как ни в чем не бывало - в вечернее, ночное время все страницы открывались без проблем, днем преиодически возникали описанные выше ситуации


my.cnf
автор
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /dev/shm
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 256M
max_allowed_packet = 256M
wait_timeout = 2
thread_stack = 192K
thread_cache_size = 256
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
max_connections = 2046
#table_cache = 64
#thread_concurrency = 10
#
# * Query Cache Configuration
#
#query_cache_limit = 10M
#query_cache_size = 128M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file = /var/log/mysql/mysql.log
general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
slow_query_log_file = /var/log/mysql/mysql-slow.log
slow_query_log = 1
long_query_time = 20
log_queries_not_using_indexes

# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_buffer_pool_size = 8192M
innodb_flush_log_at_trx_commit = 2
thread_cache_size = 16
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem


#skip-name-resolve

query_cache_limit = 10M
#query_cache_size = 128M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 8192

max_heap_table_size=128M
tmp_table_size=128M


key_buffer_size=128M
key_cache_division_limit=70


[mysqldump]
quick
quote-names
max_allowed_packet = 256M



Какие еще будут идеи?
П.С. Поменять переписать сайт на другом движке не предлагать - это довольно очевидное решение, но у него слишком много издержек.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39260988
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261003
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

У нас же запись запросов без использования индексов и так велась, это видно из конфига.

по сути, у нас там постоянно только одна группа запросов, к стандартной вордпрессовской таблице termmeta, в которой у нас одна строка, а вордпресс периодически (раз в несколько секунд) делает запрос типа
SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (933) ORDER BY meta_id ASC

при этом индекс для поля term_id присутствует, просто такого значения term_id=933 нет и никогда не было в таблице(и соответственно, в индексе), из-за этого, как я понимаю, запрос попадает в slow-log

Но опять же, повторюсь: подобных запросов(без индексов) в логе где-то один за несколько секунд(при порядка 1500 общего числа запросов в секунду), и время выполнения его либо миллисекунды либо доли миллисекунд.

Вы думаете, в этом может быть одна из причин проблемы с производительностью?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261037
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мил человек. прогони сначала mysqltuner.

потом покажи кусок лога который без индексов.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261160
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот результаты прогона mysqltuner

>> MySQLTuner 1.6.13 - Major Hayden <major@mhtx.net>;
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
[--] Performing tests on 127.0.0.1:3306
[OK] Logged in using credentials passed on the command line
[!!] failed to execute: SHOW SLAVE STATUS\G
[!!] FAIL Execute SQL / return code: 256
[!!] failed to execute: SHOW SLAVE HOSTS
[!!] FAIL Execute SQL / return code: 256
[OK] Currently running supported MySQL version 5.5.44-0+deb8u1-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in InnoDB tables: 772M (Tables: 48)
[--] Data in MyISAM tables: 260K (Tables: 6)
[OK] Total fragmented tables: 0

-------- Security Recommendations ------------------------------------------------------------------
[!!] failed to execute: SELECT CONCAT(user, '@', host) FROM mysql.user WHERE TRIM(USER) = '' OR USER IS NULL
[!!] FAIL Execute SQL / return code: 256
[OK] There are no anonymous accounts for any database users
[!!] failed to execute: SELECT CONCAT(user, '@', host) FROM mysql.user WHERE (password = '' OR password IS NULL) AND plugin NOT IN ('unix_socket', 'win_socket')
[!!] FAIL Execute SQL / return code: 256
[OK] All database users have passwords assigned
[!!] failed to execute: SELECT CONCAT(user, '@', host) FROM mysql.user WHERE CAST(password as Binary) = PASSWORD(user) OR CAST(password as Binary) = PASSWORD(UPPER(user)) OR CAST(password as Binary) = PASSWORD(UPPER(LEFT(User, 1)) + SUBSTRING(User, 2, LENGTH(User)))
[!!] FAIL Execute SQL / return code: 256
[!!] failed to execute: SELECT CONCAT(user, '@', host) FROM mysql.user WHERE HOST='%'
[!!] FAIL Execute SQL / return code: 256
[!!] There is no basic password file list!

-------- CVE Security Recommendations --------------------------------------------------------------
[--] Skipped due to --cvefile option undefined

-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 2d 1h 24m 45s (286M q [1K qps], 1M conn, TX: 1224G, RX: 34G)
[--] Reads / Writes: 99% / 1%
[--] Binary logging is enabled (GTID MODE: OFF)
[--] Physical Memory : 28.5G
[--] Max MySQL memory : 13.7G
[--] Other process memory: 36.7G
[--] Total buffers: 8.3G global + 2.7M per thread (2046 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 9.4G (33.09% of installed RAM)
[OK] Maximum possible memory usage: 13.7G (48.02% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
[OK] Slow queries: 0% (33K/286M)
[OK] Highest usage of available connections: 20% (424/2046)
[OK] Aborted connections: 0.26% (4370/1682146)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[!!] Query cache may be disabled by default due to mutex contention.
[OK] Sorts requiring temporary tables: 0% (2K temp sorts / 4M sorts)
[OK] No joins without indexes
[!!] Temporary tables created on disk: 80% (1M on disk / 2M total)
[!!] Table cache hit rate: 2% (400 open / 15K opened)
[OK] Open file limit used: 0% (5/10K)
[OK] Table locks acquired immediately: 99% (51M immediate / 51M locks)
[OK] Binlog cache memory access: 99.73% ( 453472 Memory / 454700 Total)

-------- Performance schema ------------------------------------------------------------------------
[--] Performance schema is disabled.

-------- ThreadPool Metrics ------------------------------------------------------------------------
[--] ThreadPool stat is disabled.

-------- MyISAM Metrics ----------------------------------------------------------------------------
[!!] Key buffer used: 18.2% (24M used / 134M cache)
[OK] Key buffer size / total MyISAM indexes: 128.0M/23.0K
[OK] Read Key buffer hit rate: 100.0% (46M cached / 1 reads)
[OK] Write Key buffer hit rate: 100.0% (28M cached / 0 writes)

-------- AriaDB Metrics ----------------------------------------------------------------------------
[--] AriaDB is disabled.

-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[OK] InnoDB buffer pool / data size: 8.0G/772.7M
[!!] InnoDB buffer pool instances: 1
[!!] InnoDB Used buffer: 8.30% (43494 used/ 524287 total)
[OK] InnoDB Read buffer efficiency: 100.00% (15712886119 hits/ 15712924640 total)
[!!] InnoDB Write Log efficiency: 44.04% (834843 hits/ 1895459 total)
[OK] InnoDB log waits: 0.00% (0 waits / 1060616 writes)

-------- TokuDB Metrics ----------------------------------------------------------------------------
[--] TokuDB is disabled.

-------- Galera Metrics ----------------------------------------------------------------------------
[--] Galera is disabled.

-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] This is a standalone server.

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
Dedicate this server to your database for highest performance.
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries which have no LIMIT clause
Increase table_open_cache gradually to avoid file descriptor limits
Read this before increasing table_open_cache over 64: http://bit.ly/1mi7c4C
Beware that open_files_limit (10230) variable
should be greater than table_open_cache ( 400)
Variables to adjust:
long_query_time (<= 10)
query_cache_type (=0)
tmp_table_size (> 128M)
max_heap_table_size (> 128M)
table_open_cache (> 400)
innodb_buffer_pool_instances(=8)
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261176
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор[!!] Temporary tables created on disk: 80% (1M on disk / 2M total)
скорее всего вот это и есть.

автор[--] Binary logging is enabled (GTID MODE: OFF)
у вас репликация? если нет то отключайте - тормозит же.

автор[!!] InnoDB Write Log efficiency: 44.04% (834843 hits/ 1895459 total)
тоже добавить.

автор[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
отключить нафик.


авторtmp_table_size (> 128M)
max_heap_table_size (> 128M)
table_open_cache (> 400)
innodb_buffer_pool_instances(=8)

сделать.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261180
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В архиве приложил кусок slow-log на интервале около 1,5 часов
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261199
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавтор[!!] Temporary tables created on disk: 80% (1M on disk / 2M total)
скорее всего вот это и есть.

Я писал выше, что мы сам каталог вынесли в RAM на уровне операционной системы.
Я еще раньше обращал внимание на это(высокий процент временных таблиц, создаваемых на диске),
мы увеличили tmp_table_size с 32 до 128M и max_heap_table_size с 32 до 128M, но на процент соотношение временных таблиц в памяти/на диске это не повлияло никак, я подозреваю что проблема в том, что у Wordpress поля, в котором храниться собственно контент сайта, типа text, и временные таблицы, которые создаются с таки же типом соответствующего поля, сразу попадают на диск
Именно поэтому мы вынесли их в ОЗУ на уровне операционной системы.

ScareCrowавтор[--] Binary logging is enabled (GTID MODE: OFF)
у вас репликация? если нет то отключайте - тормозит же.

Репликация - да, есть (это сейчас вынужденное явление, у нас после наступления этих проблем появился резервный сервер, на который реплицируется вся инфа, и опробуются изменения в конфигурации)

ScareCrowавтор[!!] InnoDB Write Log efficiency: 44.04% (834843 hits/ 1895459 total)
тоже добавить.

А тут можно подробнее - какой именно параметр править и насколько?

ScareCrowавторtable_open_cache (> 400)


сделать.

А что можете по этому поводу сказать
авторRead this before increasing table_open_cache over 64: http://bit.ly/1mi7c4C

Нет ли описываемых проблем в версии 5.5.44, не в курсе ?
Спасибо за ответы.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261210
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА тут можно подробнее - какой именно параметр править и насколько?
https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-logging.html
очевидно что вдвое.

сделйте скриншот top и iotop при тормозах.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261216
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте перейти на Pecona Server последней версии.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261289
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowпопробуйте перейти на Pecona Server последней версии.

А что скажете по поводу мысли доапгрейдить mysql до версии 5.7?
С Percona пока что не знаком, хотелось бы как-то обкатать ее, прежде чем переносить на нее критичные для компании сервисы.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261360
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_vistprocesslist показывает несколько сотен выолняющихся одновременно запросов с разным состоянием, время выполнения до 2 сек.,
сайт по сути не работает

А пусть не показывает. Ограничивайте число одновременно выполняющихся php-fpm.
Запросы станут в очередь, но кеш сохранится в порядке.

П.С. Поменять переписать сайт на другом движке не предлагать - это довольно очевидное решение, но у него слишком много издержек.
тогда вот вам неочевидное : выключить все нестандартные плагины. гарантия 146% что отпустит.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261367
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как собран этот slow log ? log_queries_not_using_indexes ? Ну попробуйте создать индексы, если запросы такие простые
В slow.log запросы все простые и быстрые. И с одной и той же таблицей.

long_query_time = 20 - зачем так много? Много полезной информации теряете.

Раз вы заявляете о 1500 запросах в секунду, значение немаленькое, то выглядит это все как очередная неудачная реализация хранения данных, не так как принято с субд.
Я предлагаю на несколько десятков секунд включить general log через запрос SQL и посмотреть вообще на все запросы.

В итоге, нужно стремиться найти что это за плагин, заменить и отключить его. Это единственный способ. mysqltuner-ом ничего не натюните.

И пожалуй, в этом случае поможет полное отключение query_cache.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261472
LiveMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте перевести реплику(бекап-рестор) на перкону 5.6, потом переведете и основной сервер. Версия 5.6 появилась достаточно давно, чтобы на неё ставить основной сервер.
Перкона работает чуть шустрее(а иногда и не чуть) и дает больше возможностей для мониторинга. Например можно будет узнать из каких таблиц больше всего данных выбирается без использования индексов.

Через рестарт докиньте в конфиг параметр innodb_buffer_pool_instances = 8 # можно и 16 в вашем случае попробовать. Больше 16 ставить не стоит.

Перед восстановлением базы из бекапа добавить параметр
innodb_file_per_table = 1

Еще мне кажется тут нужно добавить
innodb_io_capacity = 500 # default=200



Похожая ситуация по загрузке у меня была, когда не было нужных индексов в двух самых часто используемых таблицах. Добавил 2 индекса и нагрузка в простое упала с 100% до 0% CPU.

ЗЫ: после того как я один раз попробовал перкону, на ванильный мускл возвращаться даже мыслей не возникало.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261740
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiveManПеркона работает чуть шустрее(а иногда и не чуть) и дает больше возможностей для мониторинга. Например можно будет узнать из каких таблиц больше всего данных выбирается без использования индексов.

эффект плацебо кстати тоже научно подтвержден и существует. Чудеса.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261771
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindLiveManПеркона работает чуть шустрее(а иногда и не чуть) и дает больше возможностей для мониторинга. Например можно будет узнать из каких таблиц больше всего данных выбирается без использования индексов.

эффект плацебо кстати тоже научно подтвержден и существует. Чудеса.

про мониторинг правда. вот сейчас топикстартер реально вместо селекта из перфоманс схемы на кофейной гуще гадает.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261779
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, про мониторинг согласен. лишнего в цитату зацепил. Однако и простые способы не были испробованы.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261897
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока не дошли до применения всех рекомендаций
(прежде всего, изменение innodb_log_file_size, table_open_cache, skip-resolve-name и ограничения
числа одновременно выполняющихся php-fpm)

Сделали 2 вещи
innodb_buffer_pool_size = 1024M вместо 8192(8ГБ дали исходя из размера всех таблиц БД + запас с учетом роста)
Но учитывая
автор InnoDB buffer pool / data size: 8.0G/772.7M
решили забрать у буфера неиспользуемую память, чтобы поменять
thread_cache_size = 16
на 128
Вчера картинка была такая
| Threads_cached | 0 |
| Threads_connected | 37 |
| Threads_created | 80631 |
| Threads_running | 8 |

Через после реконфига и перезапуска Mysql такая:
| Threads_cached | 96 |
| Threads_connected | 126 |
| Threads_created | 349 |
| Threads_running | 99 |

Cпустя сутки после перезапуска:
| Threads_cached | 111 |
| Threads_connected | 18 |
| Threads_created | 349 |
| Threads_running | 3 |

Пока наблюдаем
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39261902
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогло?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262220
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot s_vist]Есть сайт, сделан на Вордпрессе.
Проблема : приблизительно 1-3 раза в неделю, в бизнес-время( после 10:30 и до 16:00) сайт начинает долго открываться, выдавать через раз 502 ошибки, причем количество отказов быстро возрастает

Все это сопровождается тем, что mysql при этом резко начинает потреблять процессорный ресурс( с обычных 50-90% по top до 300 - 600%).


1) само потребление процессора MySQL ем не является какой-то проблемой. это нормально

2) проблемы сайте не обязательно связаны с MySQL.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262275
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_vist,

в первую очередь я бы разобраться, почему именно 502 выдается, поглядел в логи сервера- фронтенд.

Чтобы это все до MySQL дошло, еще достаточно много чего нужно отместь...
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262303
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, 502 выдается если время работы скрипта превышено. Это единственная причина. Что тут смотреть ?
А происходит это в условиях нехватки процессорной мощности и лавинообразного нарастания запущенных процессов и скриптов.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262446
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowпомогло?

Пока сложно сказать.
С момента внесения изменений описываемых проблем не наблюдалось
Если брать пятницу(23.06), то обратили внимание, что пик потребления процессора в пятницу(24.06) был на 30% ниже( в процентах от максимального ресурса процессора), чем в остальные будние дни на неделе, составил 40%(статистика бралась с гипервизора, данные о пиках беруться на 3-часовом интервале каждых суток).

Но сегодня, 25.06, аналогичный пик составил 64%, что весьма нетипично для субботы(обычно в выходные дни нагрузка на процессор существенно ниже).

При этом кол-во запросов за сутки не сильно отличалось от стандартных(в пятницу - как для буднего дня в субботу - как для выходного).

Короче еще несколько дней на следующей неделе будем наблюдать, потом делать выводы.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262448
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай таки скрин top и iotop
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262674
LiveMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwindLiveManПеркона работает чуть шустрее(а иногда и не чуть) и дает больше возможностей для мониторинга. Например можно будет узнать из каких таблиц больше всего данных выбирается без использования индексов.

эффект плацебо кстати тоже научно подтвержден и существует. Чудеса.

Я на перкону переходил 2 года назад(с 5.5 на 5.5), точных цифр не помню. Прирост был очень значительный, видимый на глаз по скорости загрузки интерфейса. По цифрам какие то запросы стали работать до 20-30% быстрее.
Естественно, что не все стало работать быстрее, основная часть запросов не ускорилась. Быстрее стали работать особенно кривые либо сложные запросы с большим количеством соединений.

Если кто то считает что сравнение цифр выполнения запросов это плацебо, то напоминаю, что у нас в стране все еще свобода мыслей. ;)


А ТС почему то упорно не желает делить буфер иннодб, хотя при большом количестве соединений это помогает.
И переход на 5.6 я советовал из похожих соображений - там улучшена работа с кешем запросов.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262781
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiveMannetwindпропущено...

эффект плацебо кстати тоже научно подтвержден и существует. Чудеса.

Я на перкону переходил 2 года назад(с 5.5 на 5.5), точных цифр не помню. Прирост был очень значительный, видимый на глаз по скорости загрузки интерфейса. По цифрам какие то запросы стали работать до 20-30% быстрее.
Естественно, что не все стало работать быстрее, основная часть запросов не ускорилась. Быстрее стали работать особенно кривые либо сложные запросы с большим количеством соединений.

Если кто то считает что сравнение цифр выполнения запросов это плацебо, то напоминаю, что у нас в стране все еще свобода мыслей. ;)

То есть вы в высокопараллельной системе по одному запросы запускали и проверяли? Ясно.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262784
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowсделай таки скрин top и iotop
Сделаю, как только будет замечена проблема с производительностью.
Пока что полет нормальный.

LiveMan А ТС почему то упорно не желает делить буфер иннодб, хотя при большом количестве соединений это помогает.

А что, несколько инстансов поможет даже при том, что буфера реально используется меньше 1 ГБ ?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262800
LiveMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwind....
То есть вы в высокопараллельной системе по одному запросы запускали и проверяли? Ясно.

Интересно конечно когда человек сам задает вопрос и сам пишет что ему все ясно. Ну хорошо что ясно :)
Только мне не понятно зачем вопрос писать.


s_vist...
LiveMan А ТС почему то упорно не желает делить буфер иннодб, хотя при большом количестве соединений это помогает.

А что, несколько инстансов поможет даже при том, что буфера реально используется меньше 1 ГБ ?

Разделить буфер надо для того, чтобы не использовать один мютекс буфера. Чеб больше разделено - тем больше параллельности.
Но официальные рекомендации делить не менее чем по 1Гб. У меня разделено по 512 и это себя оправдывает, меньше делить точно не стоит(по крайней мере у меня на тестах не получилось выиграть в производительности)

Заполняться буфер будет одновременно во всех инстансах. То есть у вас будет 2 не до конца заполненных инстанса буфера.


У вас ведь есть тестовый сервер. Вы на нем можете попробовать радикальные способы ? Типа как перейти на перкону, перезалить бекап.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262801
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiveManА ТС почему то упорно не желает делить буфер иннодб, хотя при большом количестве соединений это помогает.
И переход на 5.6 я советовал из похожих соображений - там улучшена работа с кешем запросов.
Большое количество соединений они сами создали на пустом месте из-за того что запросы плохие. Соединений там мало должно быть и их мало в отсутствии "лавины".
И я что-то никаких улучшений query_cache не обнаружил на соответствующей страничке https://www.percona.com/doc/percona-server/5.6/performance/query_cache_enhance.html
Раз ничего не написано, может все-таки плацебо ?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262806
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiveMannetwind....
То есть вы в высокопараллельной системе по одному запросы запускали и проверяли? Ясно.

Интересно конечно когда человек сам задает вопрос и сам пишет что ему все ясно. Ну хорошо что ясно :)
Только мне не понятно зачем вопрос писать.

Суть поста в том, что мне ясно, что у вас методика измерений ненадежная и я это демонстрирую. А вы, возможно, не осознаете этого.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262857
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторРаз ничего не написано, может все-таки плацебо ?
там паралельность увеличили. а судя по всему это актуально.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262889
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, тогда актуальнее просто выключить.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262951
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторРаз ничего не написано, может все-таки плацебо ?
там паралельность увеличили. а судя по всему это актуально.
Где, кстати, ссылка на это? Подтверждение не гуглится.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39262960
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39263009
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, не, где ссылка на то что улучшен query_cache ?
я, похоже, не так понял.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39263015
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindScareCrow, не, где ссылка на то что улучшен query_cache ?
я, похоже, не так понял.

ссылку на что и для чего вам надо? в перконе запилили возможность выключить кэш запросов нафик. всё.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39263071
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, сегодня опять ситуация имела повторение

В таком ключе:
была 2 пика нагрузки на процессор, с интервалом в полчаса

пики были очень кратковременные, успел их отфиксировать только по таким собщениям в консоли
авторMessage from syslogd@stage at Jun 27 16:05:01 ...
kernel:[1477905.036002] BUG: soft lockup - CPU#20 stuck for 23s! [mysqld:31115]

Message from syslogd@stage at Jun 27 16:05:01 ...
kernel:[1477905.084003] BUG: soft lockup - CPU#21 stuck for 22s! [php5-fpm:7551]

Message from syslogd@stage at Jun 27 16:05:01 ...
kernel:[1477905.136005] BUG: soft lockup - CPU#22 stuck for 22s! [php5-fpm:7553]

Message from syslogd@stage at Jun 27 16:05:04 ...
kernel:[1477908.044003] BUG: soft lockup - CPU#0 stuck for 23s! [php5-fpm:31044]

Message from syslogd@stage at Jun 27 16:05:04 ...
kernel:[1477908.076004] BUG: soft lockup - CPU#1 stuck for 23s! [mysqld:28738]

Message from syslogd@stage at Jun 27 16:05:04 ...
kernel:[1477908.388003] BUG: soft lockup - CPU#7 stuck for 22s! [php5-fpm:3396]

Message from syslogd@stage at Jun 27 16:05:05 ...
kernel:[1477908.436003] BUG: soft lockup - CPU#8 stuck for 22s! [php5-fpm:32187]

Message from syslogd@stage at Jun 27 16:05:05 ...
kernel:[1477908.480006] BUG: soft lockup - CPU#9 stuck for 22s! [php5-fpm:31175]

Message from syslogd@stage at Jun 27 16:05:05 ...
kernel:[1477908.536016] BUG: soft lockup - CPU#10 stuck for 22s! [php5-fpm:32186]

Дальше top уже никакой аномальной нагрузки не показывал и сайт работал нормально, так что скринов, увы, не будет
Лог гипервизора показал всплеск до 70% CPU usage
А через полчаса - еще один всплеск, такого же порядка

А вот теперь из мониторинга значения Threads_created

За полчаса до 1го всплеска нагрузки:
| Threads_created | 634 |
(такое же значение было в течение всего дня, еще со вчерашнего вечера)

Сразу же после 1го всплеска:
| Threads_created | 714 |

Сразу же после 2-го всплеска:
| Threads_created | 822 |

Напрашивается вывод, что потребление процессорного ресурса существенно увеличивается при создании относительно большого количества новых потоков.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39263218
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_vist|
Напрашивается вывод, что потребление процессорного ресурса существенно увеличивается при создании относительно большого количества новых потоков.
Должен напрашиваться вывод, что при замедлении работы одних тредов, создаются дополнительные и возникает "лавина".
Сколько сейчас обработчиков php-fpm максимально возможно ? Я уже предлагал уменьшить.

Довольно странно и сообщение о залипании mysqld на 23 секунды.
Что у вас там вместо сервера ? Зачем понадобился proxmox ? Какие еще машины и не могут ли они вносить смуту ?
Может быть какой-то админ proxmox ручки крутит и бекапы живые делает. Или диск помирает.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264370
LiveMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwindLiveManпропущено...


Интересно конечно когда человек сам задает вопрос и сам пишет что ему все ясно. Ну хорошо что ясно :)
Только мне не понятно зачем вопрос писать.

Суть поста в том, что мне ясно, что у вас методика измерений ненадежная и я это демонстрирую. А вы, возможно, не осознаете этого.
Вы у меня не спрашивали методику и поэтому я вам ее не говорил. Поэтому что-то демонстрировать несколько "ненадежно".

А меж тем методика измерений достаточно точная. Все тесты были повторены многократно, чтобы убрать ошибки от виртуальной среды.
Я гонял тестовый сервер сначала на 5.5 потом на перконе 5.5 и в один поток и в несколько потоков. При том гонял как sysbench так и готовую систему с переходами по интерфейсу.

Так что если что есть добавить или предложить по существу - предлагайте, можно даже в ЛС, чтобы в тему не мусорить. Если нет, тогда предлагаю закончить этот флейм.



А по теме хорошо бы в нерабочее время запустить нагрузочный тест и посмотреть что будет, когда ресурсы закончатся. Не обязательно, что мускл виновен. Может быть он нормально работает, но Proxmox не дает ресурсов или сам хост перегружен.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264713
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять наблюдали проблему
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264725
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикладываю скрины top и htop в момент проблемы(iotop, к сожалению, оказалась не установлена)

top
htop
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264882
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31%sy

или диск или мютексы или коннекты к чему то удалённому.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264914
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowили коннекты к чему то удалённому.

например, как это может происходить в реальности?
что к чему может коннектиться?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264965
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow31%sy

или диск или мютексы или коннекты к чему то удалённому.
или по моему первоначальном сценарию : безумное количество простых, но тупых запросов, которые вызывают массу накладных расходов на межпроцессные коммуникации.

В общем, ничего у вас не получится так. Ставьте плагины какие-нибудь для кеширования целых страниц html в wordpress, как и все беспомощные вебмастеры. Это не стыдно.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39264981
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и какие-то внешние проблемы вызванные виртуализацией могут быть : помирающий диск, автоматический бекап машины, конкуренция за ресурсы с другими виртуальными машинами.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265132
LiveMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доступ к proxmox-у есть ? Можно посмотреть что происходит в эти моменты ?
Проц на хосте и задержки дисков.
Ошибки в логе очень похожи на проблемы в виртуализации.

По мускл вам очень много насоветовали, и практически все совпадает с рекомендациями мусклтюнера. Как все примените так у вас чуть лучше и станет, но мне кажется что не полностью.

Ну и может настроить nginx на кеширование всего и подольше?
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265270
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчто к чему может коннектиться?
автор[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265278
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwindScareCrow31%sy

или диск или мютексы или коннекты к чему то удалённому.
или по моему первоначальном сценарию : безумное количество простых, но тупых запросов, которые вызывают массу накладных расходов на межпроцессные коммуникации.

В общем, ничего у вас не получится так. Ставьте плагины какие-нибудь для кеширования целых страниц html в wordpress, как и все беспомощные вебмастеры. Это не стыдно.


Похоже, netwind пока что ближе всех к правильному ответу.

Для начала - по proxmox.
Никаких бэкапов в рабочее время не запускается, на гипервизоре живут еще 3 виртуальных машины, которые чувствуют себя нормально, причем одна из них - еще более нагруженный, чем наш проблемный сайт, веб-сервис, который просто летает на 4-х ядрах и 4 ГБ ОЗУ(правда, на нем только nginx + apache + php, БД вынесена на отдельный физический сервер(там MSSQL))

Теперь по статистике
Я с позавчера начал выгружать все переменные состояния каждые 2 минуты и складывать в отдельный лог
Так вот, в то время, когда у нас полезла вверх нагрузка на ресурсы машины, у нас увеличилось число max_used_connections со 199 до 354
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265301
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжаю...

так же увеличилось число thread_created c
248 до 698(разница в снятии данных - 2 минуты)

Ну и последнее, по статистике переменной connections
Вообще, средняя разница этого параметра на каждом 2-минутном интервале перед случившейся "лавиной" интервале составила около 2000, кроме последнего. На последнем 2-минутном интервале, на котором по сути уже началось выжирание процессорного ресурса, разница в количестве connections составила 3948 - почти в 2 раза больше среднего.


По логу nginx вычислить какую-то аномалию довольно сложно было, т.к. там на каждый запрос есть куча связанных запросов(стилей, картинок и скриптов), поэтому простыми подсчетами кол-ва запросов на интервале времени выявить повышенную нагрузку не удавалось
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265322
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265328
s_vist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналогично, общий лог mysql тоже довольно сложен для быстрой обработки, нужно писать/искать обработчик, который бы показал разницу в количестве запросов/соединений в конкретные моменты или малые промежутки времени.

А еще вечером попробовали apache benchmark, в 2-х вариантах.
В первом варианте выполнялся простой скрипт, в котором открывалось и закрывалось соединение с mysql

ab -kc 150 -t 20 http://site.com/test_script.php (150 конкурентных соединений, каждую секунду, на интервале в 20 секунд)

mysql в таком сочетании поджирал до 200% CPU, потом нагрузка спадала почти мгновенно, как только отрабатывала команда ab

а вот в варианте ab -kc 150 -t 20 http://site.com/ потребление CPU подскакивало до 600-700%(это только mysql), top показывал 75%sy

очередь запросов завершилась где-то спустя 1,5-2 минуты после окончания теста.

В общем, решили увеличить еще thread_cahce_size, чтобы в него помещались 400 потоков хотя бы

После этого первый тест проходил вообще незамеченным, а вот второй все равно сопровождался потерями производительности, хоть и меньшими, чем при thread_cahce_size=128

Видимо, простыми изменениями конфигурации проблема не решается, так что наметили пути:
1. Переход на новый движок БД
не факт, что сильно поможет, но есть же исследование , где масштабируемость версий MySQL/Percona 5.6/5.7 существенно лучше, чем у 5.5, которая у нас на данный момент
2. Кэш, куда ж без него(к слову, мы уже один раз обожглись на плагине wp_supercache, поэтому это может быть самым последним пунктом)
3. Провести ревизию кода с упором на то, чтобы выкинуть лишние запросы, которые, в первом приближении таки существуют. К сожалению, процесс небыстрый, простым отключением плагинов не решается.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265435
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot s_vist]Продолжаю...

так же увеличилось число thread_created c
248 до 698(разница в снятии данных - 2 минуты)

Ну и последнее, по статистике переменной connections
Вообще, средняя разница этого параметра на каждом 2-минутном интервале перед случившейся "лавиной" интервале составила около 2000, кроме последнего. На последнем 2-минутном интервале, на котором по сути уже началось выжирание процессорного ресурса, разница в количестве connections составила 3948 - почти в 2 раза больше среднего.

s_vistПо логу nginx вычислить какую-то аномалию довольно сложно было, т.к. там на каждый запрос есть куча связанных запросов(стилей, картинок и скриптов), поэтому простыми подсчетами кол-ва запросов на интервале времени выявить повышенную нагрузку не удавалось
Ну так пора поставить мониторинг ? Для начала вам хватит munin, но нужно не забыть поставить дополнительные плагины для nginx,php-fpm и mysql (по-моему в дистрибутивах все старенькое, поэтому лучше скачать).
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39265454
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_vistАналогично, общий лог mysql тоже довольно сложен для быстрой обработки, нужно писать/искать обработчик, который бы показал разницу в количестве запросов/соединений в конкретные моменты или малые промежутки времени.

general-log сейчас pt-query-digest прекрасно обрабатывает, хотя создан он был для slow log.

В общем, решили увеличить еще thread_cahce_size, чтобы в него помещались 400 потоков хотя бы

Да что вы так к этим потокам прицепились ?
Из-за того что у вас недостаточно средств мониторинга, вы уперлись только в что можете посчитать и вообще по ложному следу пошли. Конечно, есть определенные накладные расходы на создание потоков, но они небольшие.

3. Провести ревизию кода с упором на то, чтобы выкинуть лишние запросы, которые, в первом приближении таки существуют. К сожалению, процесс небыстрый, простым отключением плагинов не решается.
успехов.
...
Рейтинг: 0 / 0
Mysql периодически жрет ресурс CPU
    #39324294
g_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, есть ли успехи, удалось ли решить проблему?
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql периодически жрет ресурс CPU
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]