Linux

CPU 負載穩步增加,MySQL 1.5 GB 在臨時目錄中打開已刪除文件

  • March 14, 2013

我有一個執行 cPanel(共享託管伺服器)的 CentOS 伺服器,我之前遇到過 MySQL 問題,我花了一些時間配置和調整它,直到最終負載下降(從 170% !! 到 10% 左右),直到 2 天前 MySQL 開始瘋狂行事!

伺服器“卡住”了,特別是 Apache 和 MySQL!我登錄並檢查了/tmp目錄,df它使用了 100% 的可用空間(2 GB),我執行du -h它報告只有 129 MB 的已用空間!我不知道其他空間去了哪裡,我試圖lsof +L1查看打開的文件,它在 temp 目錄中列出了一大堆打開的已刪除文件(其中大多數大小為 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 記憶體 RAM: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 時,我看到一些具有 250 個打開連接的 IP(這些不是搜尋引擎機器人) ,如果我阻止這些 IP,新的 IP 將開始連接,並從一個 IP 再次打開 100-200 個連接。

抱歉,如果我把它弄得比需要的長,但我想知道如何解決這個問題,主要是關於大型 MySQL 臨時文件和“穩定”增加的負載。

謝謝。

我建議您將 MySQL 升級到最新版本。

mysql_upgrade –force

替換slow_query_loglog-slow-queries=/var/lib/mysql/slow.logmy.cnf

然後執行命令

touch /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 Firewall:http:

//configserver.com/free/csf/install.txt

引用自:https://serverfault.com/questions/487450