我有一个运行Ubuntu 12.04 LTS与LEMP堆栈的VPS,遵循Linode Library的指南(因为我使用的是Linode)来设置,一切正常,直到现在。
我不知道出了什么问题,但一个星期前我的CPU使用率正在上升。 今天事情变得非常糟糕 – 我有74%的CPU使用率,所以我去检查,发现mysqld占用太多的CPU使用率(大约30%〜80%)
所以我做了一些谷歌search,试图禁用InnoDB,重新启动MySQL,重置ntp /系统时钟(不是这个错误应该发生在一年多前?!),并重新启动我的VPS,没有什么帮助。 即使mysql的processlist为空,我仍然得到mysqld的CPU使用率非常高。
我不知道我错过了什么,完全不知道,任何意见,将不胜感激。
提前致谢。
更新:
我从运行“strace mysqld”
write(2, "InnoDB: Unable to lock ./ibdata1"..., 44) = 44 write(2, "InnoDB: Check that you do not al"..., 115) = 115 select(0, NULL, NULL, NULL, {1, 0}^[[A^[[A) = 0 (Timeout) fcntl64(3, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}, 0xbfa496f8) = -1 EAGAIN (Resource temporarily unavailable)
嗡嗡声…我曾尝试禁用InnoDB,并没有解决这个问题。 任何想法?
UPDATE2:
# ps -e | grep mysqld 13099 ? 00:00:20 mysqld
然后使用“strace -p 13099”,重复出现以下几行:
fcntl64(12, F_GETFL) = 0x2 (flags O_RDWR) fcntl64(12, F_SETFL, O_RDWR|O_NONBLOCK) = 0 accept(12, {sa_family=AF_FILE, NULL}, [2]) = 14 fcntl64(12, F_SETFL, O_RDWR) = 0 getsockname(14, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, [30]) = 0 fcntl64(14, F_SETFL, O_RDONLY) = 0 fcntl64(14, F_GETFL) = 0x2 (flags O_RDWR) setsockopt(14, SOL_SOCKET, SO_RCVTIMEO, "\36\0\0\0\0\0\0\0", 8) = 0 setsockopt(14, SOL_SOCKET, SO_SNDTIMEO, "<\0\0\0\0\0\0\0", 8) = 0 fcntl64(14, F_SETFL, O_RDWR|O_NONBLOCK) = 0 setsockopt(14, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported) futex(0xb786a584, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0xb786a580, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1 futex(0xb7869998, FUTEX_WAKE_PRIVATE, 1) = 1 poll([{fd=10, events=POLLIN}, {fd=12, events=POLLIN}], 2, -1) = 1 ([{fd=12, revents=POLLIN}])
呃…现在我完全没有得到它x_x的帮助
从strace的结果来看,你的mysql服务器正在接受连接。 poll调用意味着等待连接, accept调用意味着接受传入连接。 所以必须有很多连接和查询。
你说SHOW PROCESSLIST只返回你正在查询进程列表的进程。 实际上,这个命令只能在被调用的特定时刻显示连接。 stream行的PHP网站通常不支持预设的MySQL连接。 通常查询不需要太多的时间,但只有CPU。
我想你应该检查连接到你的MySQL服务器的所有程序/网站。 也许你可以打开MySQL查询logging更多细节。
你能发出一个'SHOW PROCESSLIST'命令吗? 有多less个连接? 每个连接都需要一个线程,也许高CPU负载是因为空闲的连接。