CPU 负载稳步增加,MySQL 1.5 GB 在临时目录中打开已删除的文件

CPU 负载稳步增加,MySQL 1.5 GB 在临时目录中打开已删除的文件

我有一台运行 cPanel(共享托管服务器)的 CentOS 服务器,之前我遇到过 MySQL 问题,花了一些时间对其进行配置和调整,直到最后负载下降(从 170% 下降到 10% 左右),直到 2 天前 MySQL 开始变得疯狂!

服务器“卡住了”,特别是 Apache 和 MySQL!我登录并检查了目录/tmpdf发现它使用了 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_loglog-slow-queries=/var/lib/mysql/slow.logmy.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

相关内容