Прежде всего, у меня не очень продвинутый опыт работы с Linux, только для того, что мне нужно сейчас, я действительно раздражен и не знаю, что делать, я читал об этом в других нескольких темах, но он вообще не помог
mysqld занимает 800% ЦП, так как трафик на моем сайте увеличился, как исправить
Итак, проблема в следующем:
Как вы можете видеть, мой процесс mysql через некоторое время занимает 800% ЦП, и я не знаю, новый ли это метод атаки или что-то в этом роде, но я использую cpanel с cpnginx, и у меня нормальный сайт работал несколько месяцев, он начался случиться через неделю, в моем журнале ошибок я не увидел ничего, что могло бы предотвратить это ...
Единственное, что я могу сделать, чтобы заставить mysql не съесть мой 800% -ный процессор, - это перезапустить выделенный сервер, когда я убиваю процесс и снова возвращаюсь, его все еще 800% -ный процессор, иногда 600%, скачок с 500% до 850% ЦП, поэтому все мои базы данных не работают, а два моих домена недоступны, потому что им для работы нужен SQL.
Это мой файл конфигурации из /etc/my.cnf
[mysqld]
long_query_time=0.1
performance_schema=on
# ERROR LOGI
log-error=/var/lib/mysql/h2k.how2kill.pl.err
# GENERAL
wait_timeout=1000
max_connections=200
interactive_timeout=30
tmp_disk_table_size=1G
max_heap_table_size = 32M
tmp_table_size=200M
join_buffer_size=200M
# INNODB
innodb_buffer_pool_size=3GB
innodb_log_file_size=384M
innodb_buffer_pool_instances=3
innodb_lru_scan_depth=100
innodb_log_buffer_size=1G
innodb_log_file_size=4G
innodb_io_capacity=1000
innodb_change_buffer_max_size=10
innodb_file_per_table=1
# CACHE
table_open_cache=128
query_cache_type=0
query_cache_limit=128M
query_cache_min_res_unit = 2K
query_cache_size=0
thread_cache_size=100
key_buffer_size=256M
sort_buffer_size=2M
Обычно мой сайт должен работать так:
Это всегда работало так, но через несколько часов оно подскакивает до 800%, и я ничего не могу сделать ...
Я запустил mysqltuner и сделал некоторые улучшения в mysql, но все равно не получил помощи ..
Пожалуйста, помогите мне, я ценю любую помощь, потому что я пытаюсь решить эту проблему примерно за 40 часов.
Хорошо, ребята, после того, как я удалил приложение, которое использует запрос (WHERE member_group_id! = Member_group_id ...)
Мои веб-сайты не закрывались примерно на 1 день и 8 часов, так что есть улучшения.
Я хочу поблагодарить Рика и Бьостера за помощь, я очень ценю это, и вы действительно сэкономили мне много времени.
Теперь, поскольку я изменяю свой файл конфигурации много-много раз, я хочу, чтобы кто-то, имеющий большой опыт работы с mysql, изменил конфигурацию my.cnf, которая идеально подошла бы для моего выделенного сервера.
ALTER TABLE `core_sys_lang_words` ADD INDEX(lang_id, word_key);
ALTER TABLE `bimchatbox_chat` ADD INDEX(user, `time`);
Это будет неправильно проанализировано:
WHERE 'member_group_id' != `member_group_id` NOT IN(94,96)
Что вы хотите, чтобы это значило?
Как сказал Рик, это, очевидно, проблема с запрос и / или код, создающий этот запрос, не с самим сервером.
Куба Витек, 800% занят на короткое время может быть терпимо. Разделите загруженный процессор (по данным TOP) на количество ядер, чтобы получить эффективную загрузку системы. Чтобы определить количество ядер, введите в командной строке LX команду iostat -xm 5 3 и нажмите клавишу ВВОД, чтобы узнать количество ядер. Например, 800/12 означает, что ваш процессор был занят 66% наблюдаемого времени. Если он остается на уровне 800% в течение часа, вам нужно выяснить, почему. 15 секунд общего журнала, вероятно, дадут вам некоторые ценные подсказки.
Предложения для вашего раздела my.cnf [mysqld]
tmp_table_size=128M # from 200M to stay under 1% RAM
max_heap_table_size=128M # from 32M normally matched to tmp_table_size
join_buffer_size=1M # from 200M per connection RAM requested for function
innodb_log_file_size=384M # to be REMOVED, there is another later for 4G
innodb_log_buffer_size=512M # from 1G - you have only 16G of RAM
query_cache_limit=0 # from 128M because QC is OFF to conserve RAM
query_cache_min_res_unit=512 # from 2K to conserve RAM if you ever turn on QC
tmp_disk_table_size=1G # research in depth, not a variable in 5.7 or 8.0 I can find.
Какую версию MySQL вы используете?
вы когда-нибудь пользовались mytop? Это тоже было бы полезно.
Так же как вопрос, что говорит верх, когда у вас 800% использования? А как насчет IOWAit, использование свопа?
бесплатно -m
на mysql, возможно, выполните:
mysql> показать статус innodb движка \ G;
У вас есть блокировки БД? Одновременный доступ к одним и тем же строкам данных? Возможно, также взгляните на процессы myql, которые они запускают:
mysql> показать полный список процессов;
или лучший способ:
mysql> select NAME, PROCESSLIST_STATE, PROCESSLIST_INFO,PROCESSLIST_TIME from performance_schema.threads where TYPE = 'FOREGROUND' and PROCESSLIST_STATE NOT like 'sleep' ;
Начнем с этого.
Когда вы обнаружите несколько длительно выполняющихся процессов: вы можете проанализировать использование индекса и то, что именно делает запрос (это стоимость), объяснив;
explain select * from mysql.user;
+------+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 7 | |
+------+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.000 sec)