У меня есть VPS под управлением Ubuntu 12.04 LTS со стеком LEMP, я следовал руководству из библиотеки Linode (поскольку я использую Linode) для настройки, и до сих пор все работало нормально.
Я не знаю, что не так, но мой процессор загружается только неделю назад. Сегодня все становится действительно плохо - у меня 74% загрузки ЦП, поэтому я пошел проверить и обнаружил, что mysqld слишком сильно загружает ЦП (где-то около 30% ~ 80%)
Итак, я выполнил поиск в Google, попытался отключить InnoDB, перезапустить mysql, сбросить ntp / системные часы (разве эта ошибка не должна произойти больше года назад ?!) и перезагрузил свой VPS, ничего не помогло. Даже с пустым списком процессов mysql я все равно получаю очень высокую загрузку процессора mysqld.
Я не знаю, что я пропустил, и совершенно не знаю, любой совет будет оценен.
Заранее спасибо.
Обновить:
Я получил их от запуска "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, и это не решило эту проблему. Любая идея?
Обновление2:
# 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 help
Из вашего результата strace
, ваш сервер mysql принимал соединения. В poll
звонки означают ожидание соединения, а accept
Звонки означают принятие входящего соединения. Значит, должно быть много связей и запросов.
Ты сказал SHOW PROCESSLIST
вернул только процесс, который вы запрашивали, список процессов. Фактически, эта команда может отображать соединения только в определенный момент, когда она вызывается. Популярные PHP-сайты часто не поддерживают постоянное соединение MySQL. И часто запрос занимает не много времени, а только процессор.
Я думаю, вам следует проверить все программы / сайты, которые подключаются к вашему серверу MySQL. Возможно, вы можете включить ведение журнала запросов MySQL для получения более подробной информации.
Можете ли вы ввести команду «ПОКАЗАТЬ ПРОЦЕССЛИЗ»? Сколько там подключений? Каждое соединение занимает поток, возможно, высокая загрузка процессора связана с простаивающими соединениями.