Centos 7 , WHM 高 Mysql&MariaDB CPU 使用率 %600
Posted
技术标签:
【中文标题】Centos 7 , WHM 高 Mysql&MariaDB CPU 使用率 %600【英文标题】:Centos 7 , WHM High Mysql&MariaDB CPU Usage %600 【发布时间】:2019-04-30 18:54:00 【问题描述】:我有问题。 我的网站很慢 我认为是mysql。 最大用户连接即时 100 个用户。 大多数情况下为 30-40 人。
我的服务器:
英特尔至强 E3-1230v3
16 GB DDR3 内存
240 GB OCZ SSD 磁盘
Centos 7 WHM-cPanel MariaDB
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12496 mysql 20 0 14.1g 1.3g 12228 S 576.1 8.2 116:38.62
/usr/sbin/mysqld
/etc/my.cnf:
port = 1905
socket = /var/lib/mysql/mysql.sock
# The MySQL Safe server
[mysqld_safe]
open_files_limit = 58000
# The MySQL server
[mysqld]
max_connections = 300
local-infile = 0
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 1024M
table_open_cache = 4096
open_files_limit = 40960
max_allowed_packet=1073741824
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
sort_buffer_size = 4M
read_rnd_buffer_size = 128M
myisam_sort_buffer_size = 128M
thread_cache_size = 16
#query_cache_size= 32M
tmp_table_size = 64M
max_heap_table_size = 64M
#table_cache = 1024
#Slowly log
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1
# Uncomment the following if you are using InnoDB tables
innodb_file_per_table= 1
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:50M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 8096M
#innodb_additional_mem_pool_size = 64M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
# Connection Settings
wait_timeout = 60
skip-external-locking
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 256M
read_buffer = 8M
write_buffer = 8M
# Query Cache Settings
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M
skip-external-locking
[mysqlhotcopy]
interactive-timeout
我该如何解决这个问题?
谢谢。
【问题讨论】:
高 CPU 几乎总是来自慢查询。由于您已经开启了慢日志,请digest it and show us what you find。 那么我们应该能够快速帮助您。 (Wilson 请求的SHOWs
可能也很有用。)
8.3% 内存没有意义;请检查。
我放入了 pastebin,链接:pastebin.com/6ACte0ib
@WilsonHauck 谢谢,我已经准备好了他们的遗愿,他们在这里:pastebin.com/M6c8LetR 抱歉,我没有使用 Skype :(
@RickJames 你怎么看这一切?我已将所有请求上传到 pastebin..
【参考方案1】:
底线:添加一些索引会有很大帮助:
INDEX(islemkey)
INDEX(site, durum, islem_baslangic)
INDEX(durum, site, site_durum, id)
详情
UPDATE odemeler SET step='odeme_kontrol' WHERE islemkey = '78TNgyacgjwt'
您需要在odemeler
上使用INDEX(islemkey)
。
`expire` varchar(255) DEFAULT NULL,
AND islem_baslangic LIKE '2018-11-29%'
如果expire
是DATE
或DATETIME
,那么应该这样声明。如果它是一些非标准的日期格式,那么它需要转换。 islem_baslangic
和任何其他包含日期的列也是如此。
SELECT * FROM odemeler WHERE site = '71' AND durum = '1'
odemeler
需要这个复合 INDEX(site, durum)
;可选地,它们可以按相反的顺序列出。
SELECT id,tcno, miktar,durum,islem_baslangic,site,site_durum
FROM odemeler
WHERE site = '74' AND durum = '1' AND site_durum = '0'
ORDER BY id DESC LIMIT 20
需要
INDEX(site, durum, site_durum, -- in any order
id) -- last
原因
如果没有可用的索引,PROCESSLIST
中显示的大多数查询必须扫描整个表。这会占用大量 CPU。它会减慢每个查询。然后查询堆积起来。 (在PROCESSLIST
中一次有很多查询。)
有了可用的索引,每次查询都会更快地来来去去,并且使用更少的 CPU。这就是索引的目的!
【讨论】:
【参考方案2】:以root用户登录WHM,从Multi php manager,将网站切换到PHP 7.1 为该特定网站启用 php-fpm。
其次,下载 mysql Tuner 脚本,它将帮助您调整 /etc/my.cnf 设置以获得最佳 mysql 性能。
如果在所有这些更改之后仍然无法正常工作,那么您将不得不优化您的 mysql 数据库。
【讨论】:
【参考方案3】:Rate Per Second=RPS 建议为您的 my.cnf [mysqld] 部分考虑以提高性能,
read_rnd_buffer_size=256K # from 128M to reduce handler_read_rnd_next RPS from 6 million +
innodb_io_capacity=1900 # from 200 to enable more of your SSD io capacity
thread_cache_size=100 # from 16 to reduce threads_created count of 24,136 in 8 hrs
aria_pagecache_buffer_size=64M # from 128M to conserve RAM, only 2 blocks used in 8 hrs
key_buffer_size=128M # from 1G to conserve RAM, 15M used was the High Water Mark
Aras 和 Furkan,如果您仍然没有按照 Rick James 的建议创建索引,请发表评论,表明您在此请求方面需要帮助,以通过索引管理提高性能。
【讨论】:
@aras A) 上述建议是否已实施? B) 响应时间是好是坏?以上是关于Centos 7 , WHM 高 Mysql&MariaDB CPU 使用率 %600的主要内容,如果未能解决你的问题,请参考以下文章
在运行 centos/whm 的服务器中更新 python?