首先,我对 Linux 并没有很深入的了解,只是暂时需要了解一下,我真的很烦恼,不知道该怎么办,我在其他几个主题中读到了这方面的内容,但一点帮助都没有
由于网站流量增加,mysqld 占用了 800% 的 CPU,如何修复
问题是这样的:
正如您所看到的,我的 mysql 进程在一段时间后占用了 800% 的 CPU,我不知道这是否是一种新的攻击方法,但是我正在使用带有 cpnginx 的 cpanel,并且我的网站正常运行了几个月,它从一周开始发生,我没有从我的错误日志中看到任何可以阻止这种情况发生的内容......
我能做的唯一一件事就是重新启动专用服务器,以防止 mysql 占用 800% 的 CPU,当我终止该进程并再次返回时,它的 CPU 仍然为 800%,有时为 600%,CPU 从 500% 跳到 850%,所以我的所有数据库都关闭了,并且我的 2 个域无法访问,因为它们需要运行 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 个小时。
答案1
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)
你想让它表达什么含义?
答案2
好的,大家好,我删除了使用查询的应用程序(WHERE member_group_id != member_group_id ...)
我的网站大约有 1 天 8 小时没有关闭,因此有所改进。
我非常感谢 Rick 和 bjoster 的帮助,我真的很感激,你们确实为我节省了很多时间。
现在,因为我多次修改了我的配置文件,所以我想找一个对 mysql 很有经验的人来修改 my.cnf 配置,以便适合我的专用服务器。
答案3
正如 Rick 所说,这显然是询问和/或生成查询的代码,不是与服务器本身。
答案4
对 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?