我有一台运行 cPanel(共享托管服务器)的 CentOS 服务器,之前我遇到过 MySQL 问题,花了一些时间对其进行配置和调整,直到最后负载下降(从 170% 下降到 10% 左右),直到 2 天前 MySQL 开始变得疯狂!
服务器“卡住了”,特别是 Apache 和 MySQL!我登录并检查了目录/tmp
,df
发现它使用了 100% 的可用空间(2 GB),我运行后du -h
发现只报告了 129 MB 的已用空间!我不知道其他空间都去哪儿了,我尝试lsof +L1
查看打开的文件,结果在临时目录中列出了一大堆打开的已删除文件(其中大多数文件大小为 0),但 MySQL 拥有的一个文件大小为 1.5 GB,我终止了该进程,释放了空间。
我不知道那个文件是什么,因为我不知道如何访问它,那么是什么导致了这个文件? `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 个文件,但我不会全部发布。
这不是一个负载很重的服务器,而且对于它所服务的网站来说,它甚至非常强大,所以这肯定是一个错误配置或一个错误问题,这是我的服务器的信息:
CPU:Intel(R) Xeon(R) CPU E31230 @ 3.20GHz/8MB 缓存 内存:16 GB 操作系统:CENTOS 6.4 MySQL:5.1.68
有时 MySQL 的 CPU 使用率会超过 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
需要提及的一件重要的事情是,当我仍有足够的可用物理 RAM 时,交换有时会被使用,我认为这不应该发生。
由于某种原因,我认为服务器有时会遭受一些 DoS 攻击,我不知道这是否相关,但我知道这是因为有时当我运行 netstat 时,我会看到一些 IP 有 250 个开放连接(这些不是搜索引擎机器人),如果我阻止这些 IP,新的 IP 将开始连接,并且再次从一个 IP 打开 100-200 个连接。
抱歉,如果我把这个写得太长了,但我想知道如何解决这个问题,主要是关于大型 MySQL 临时文件和“稳定”增加的负载。
谢谢。
答案1
我建议您将 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 中删除。
如果您怀疑自己受到了 DDoS 攻击,可以安装 CSF 防火墙:
http://configserver.com/free/csf/install.txt