首页 > 解决方案 > MySQL 进程占用 150-400% CPU

问题描述

我的软件对我的服务器进行了很多 MySQL 查询,过去我从未遇到过任何问题,但最近没有加载任何内容,没有网页,没有运行 SQL,什么也没有。我设法为我的服务器打开 WHM 并终止该进程,结果却看到它飙升至 300%。我所做的一切都没有让它下降。我需要分享哪些信息才能获得帮助?我不是系统管理员,也没有一个或一个资源。我通常不会寻求帮助,只是优化我的所有查询,因为在过去的 3 个月里这不是问题,但突然变成了一个无处不在的问题,至少我没有注意到。此时我的程序说我的一个数据库表已经崩溃并且需要修复......我该怎么办?在此先感谢您的帮助...

我已经考虑过优化,但我希望有一个快速的解决方案来实施,因为我有客户在等待,然后我可以花几天时间优化我的 SQL,就像我说的那样,以前没有任何问题。我对此感到困惑。

此外,我不确定这是否有帮助,但跟踪 WHM 中的过程会重复打印此内容,仅此而已:

fcntl(16, F_GETFL)                      = 0x2 (flags O_RDWR)
fcntl(16, F_SETFL, O_RDWR|O_NONBLOCK)   = 0
accept(16, {sa_family=AF_LOCAL, NULL}, [2]) = 35
fcntl(16, F_SETFL, O_RDWR)              = 0
setsockopt(35, SOL_IP, IP_TOS, [8], 4)  = -1 EOPNOTSUPP (Operation not supported)
futex(0x13298a4, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x13298a0, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x1327240, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=14, events=POLLIN}, {fd=16, events=POLLIN}], 2, -1) = 1 ([{fd=16, revents=POLLIN}])

/etc/my.conf

innodb_file_per_table=1
default-storage-engine=MyISAM
performance-schema=0
max_allowed_packet=268435456
open_files_limit=10000

就文件而言,这就是我可以使用的所有内容my.conf。错误日志不存在,/var/log所以我在这方面没有什么可提供的......

SQL 版本: [Server] # mysql -V mysql Ver 14.14 Distrib 5.6.41, for Linux (x86_64) using EditLine wrapper

我对此还有一个额外的问题或补充。我不知道这是否有很大的不同,但是,假设我的代码在 mysql 进程上使用 30% 的 CPU 运行,我实际上可以关闭代码并且 mysql 进程的 CPU 使用率不会改变。这是什么意思?

编辑:(这些都将在 2018 年 12 月 9 日起一周内到期)

我列出的 my.cnf 文件内容就是所有内容。没有其他的。我会得到top命令,iostat -xm 5 3当我再次全速运行软件时,会看到结果。

标签: phpmysqlserverprocesscentos

解决方案


Rate Per Second=RPS 根据您的 Linux ulimit -a 报告考虑的建议。

ulimit -n 16384       to raise Open Files limit from 1024 to support your activities.

要使这种情况在 Linux 关机/重启后持续存在,请查看此 url。

https://glassonionblog.wordpress.com/2013/01/27/increase-ulimit-and-file-descriptors-limit/

由于 Linux 的版本,您的具体情况可能略有不同。

为您的 my.cnf [mysqld] 部分考虑的建议

innodb_lru_scan_depth=100  # from 1024 to reduce CPU busy every second.  93% savings for this one function.
thread_cache_size=32  # from 9 for thread breathing room and growth.
innodb_io_capacity=1800  # from 200 to take advantage of your HDD IOPS capacity
key_cache_age_threshold=7200  # from 300 seconds to reduce key_reads RPS of 16 
query_cache_size=0  # from 1M to conserve RAM - QC is OFF and not used
query_cache_limit=0  # from 1M to conserve RAM - QC is OFF and not used
key_buffer_size=128M  # from 8M which had NO free space at the end of your work day

有关其他建议,请参阅我的个人资料,网络个人资料以获取联系信息。


推荐阅读