У меня есть сервер CentOS, на котором работает cPanel (сервер общего хостинга), у меня раньше были проблемы с MySQL, и я потратил некоторое время на его настройку и настройку, пока, наконец, нагрузка не упала (со 170% !! до 10% или около того), пока 2 дня назад MySQL не начал вести себя как сумасшедший!
"Завис" сервер, в частности Apache и MySQL! Я зашел и проверил /tmp
каталог с df
и он использовал 100% доступного пространства (2 ГБ), я запустил du -h
и он сообщил, что только 129 МБ использованного пространства! Я понятия не имел, куда делось другое пространство, я пробовал lsof +L1
чтобы увидеть открытые файлы, и он перечислил целую кучу открытых удаленных файлов во временном каталоге (у большинства из них был нулевой размер), за исключением одного, принадлежащего MySQL, который имел 1,5 ГБ, я убил процесс, и пространство было освобождено.
Я не знал, что это за файл, так как не знаю, как получить к нему доступ, так что же послужило причиной этого файла? И что обычно должно выводить lsof + L? это нормально?
httpd 6450 nobody 559w REG 8,2 0 0 2492169 /usr/local/apache/logs/ssl_mutex (deleted)
httpd 6450 nobody 560u REG 8,4 0 0 151 /tmp/ZCUDj2EaZi (deleted)
httpd 6490 nobody 559w REG 8,2 0 0 2492169 /usr/local/apache/logs/ssl_mutex (deleted)
httpd 6490 nobody 560u REG 8,4 0 0 151 /tmp/ZCUDj2EaZi (deleted)
httpd 6528 nobody 559w REG 8,2 0 0 2492169 /usr/local/apache/logs/ssl_mutex (deleted)
httpd 6528 nobody 560u REG 8,4 0 0 151 /tmp/ZCUDj2EaZi (deleted)
mysqld 46096 mysql 4u REG 8,4 0 0 141 /tmp/ibvvhkQX (deleted)
mysqld 46096 mysql 5u REG 8,4 432 0 143 /tmp/ibrHhJ9J (deleted)
mysqld 46096 mysql 6u REG 8,4 0 0 144 /tmp/ibsWv8sw (deleted)
mysqld 46096 mysql 7u REG 8,4 0 0 145 /tmp/ibjEeVSi (deleted)
mysqld 46096 mysql 17u REG 8,4 0 0 146 /tmp/ibFo67JJ (deleted)
httpd 47389 root 559w REG 8,2 0 0 2492169 /usr/local/apache/logs/ssl_mutex (deleted)
httpd 47389 root 560u REG 8,4 0 0 151 /tmp/ZCUDj2EaZi (deleted)
Там около 100 файлов, но я не собираюсь их все публиковать.
Это не сильно загруженный сервер, и он даже ОЧЕНЬ мощный для обслуживаемых веб-сайтов, так что это, безусловно, неправильная конфигурация или проблема с ошибкой, вот информация о моем сервере:
Процессор: Intel (R) Xeon (R) CPU E31230 @ 3,20 ГГц / 8 МБ кэш-памяти ОЗУ: 16 ГБ ОС: CENTOS 6.4 MySQL: 5.1.68
Иногда загрузка ЦП MySQL превышает 100%, неуклонно увеличиваясь, пока mysqladmin show processlist
показывает только несколько процессов, и это мой файл my.cnf:
max_connections=500
innodb_file_per_table=1
local-infile=0
slow_query_log
key_buffer_size=2G
query_cache_limit=4M
query_cache_size=32M
join_buffer_size=2M
tmp_table_size=256M
max_heap_table_size=256M
thread_cache_size=4
table_cache=256
innodb_buffer_pool_size=512M
И еще одна важная вещь, о которой следует упомянуть, это то, что своп иногда используется, пока у меня еще много свободной физической памяти, и я думаю, что этого не должно происходить.
По какой-то причине я думаю, что на сервере иногда происходят некоторые DoS-атаки, я не знаю, связано ли это, но я знаю это, потому что иногда, когда я запускал netstat, я вижу несколько IP-адресов с 250 открытыми соединениями (и это не боты поисковых систем) , если я заблокирую эти IP-адреса, новые IP-адреса начнут подключаться, и снова 100-200 открытых подключений с одного IP-адреса.
Извините, если я сделал это дольше, чем нужно, но я хочу знать, как устранить эту проблему, в основном из-за большого временного файла MySQL и «неуклонно» возрастающей нагрузки.
Спасибо.
Я бы порекомендовал вам обновить MySQL до последней версии.
mysql_upgrade --force
заменить slow_query_log
с участием log-slow-queries=/var/lib/mysql/slow.log
в my.cnf
затем выполните команды
коснитесь /var/lib/mysql/slow.log
chmod 660 /var/lib/mysql/slow.log
chown mysql: mysql /var/lib/mysql/slow.log
удалять innodb_file_per_table=1
из my.cnf тоже.
Вы можете установить CSF Firewall, если сомневаетесь, что подвергаетесь DDoS-атаке:
http://configserver.com/free/csf/install.txt