【问题标题】:MySQL process taking 150-400% CPUMySQL 进程占用 150-400% CPU
【发布时间】:2018-12-06 03:48:27
【问题描述】:

我的软件对我的服务器进行了大量的 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 年 9 月 12 日起一周内到期)

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

【问题讨论】:

  • 最好的办法是在单独的服务器上恢复您的数据库备份并使用它,直到您可以确定服务器上的问题为止。额外的 CPU 使用很可能是由于 MySQL 试图从二进制日志中恢复数据或读/写尝试失败。但在不了解更多信息的情况下,这听起来像是与硬件相关的问题,例如硬盘扇区损坏、SSD 或 RAM 故障导致表数据损坏。您需要共享 mysql 错误日志中的信息、my.cnf 设置(删除用户名/密码等敏感信息)。
  • 检查 MySQL 日志,也许正如您的程序所说,有一个崩溃的表
  • 好的。我的服务器托管是通过 godaddy 进行的,我没有什么可以快速更改的。你有什么建议?整个数据库大约 14GB,有几个表,其中包含我生成的数百万条记录。我想我可以给他们打个电话,希望知道他们在做什么的人接听电话。让我获取错误日志和 my.cnf 设置。我上次看它时,虽然它只有 4 或 5 个设置。我的表崩溃了,但我通过 PhpMyAdmin 修复了它
  • 启用慢查询日志,表是 MyISAM 还是 Innodb?什么 MySQL 版本 (SELECT VERSION())?
  • OK 我将启用慢查询日志,表是 MyISAM,如 my.conf 所示,并且现在也列出了版本。 5.6.41

标签: php mysql server process centos


【解决方案1】:

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

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

【讨论】:

  • @Pixelknight1398 您有时间应用 2018 年 12 月 11 日发布的 7 条建议吗?你现在的情况是什么?节日快乐。
猜你喜欢
  • 2017-09-12
  • 2016-02-20
  • 2012-03-10
  • 1970-01-01
  • 2013-03-20
  • 2011-10-02
  • 2011-11-17
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多