線上 Linux AS4 + PHP5 + MySQL5 + Apache 2 伺服器,top 持續顯示 CPU 100%。排除 DDoS、系統層面後,發現 PHP 代碼大量使用 mysql_pconnect (持久連線) 卻從未呼叫 mysql_close()。補上關閉連線後,CPU 瞬間降至 1%~10% 正常區間。
mysql_pconnect 重用連線池,但若腳本結束不釋放,連線累積耗盡 max_connections。mysql_close($link)。mysql_connect,PHP 請求結束自動回收。php.ini:mysql.allow_persistent = Off 禁用持久連線。wait_timeout=7200、interactive_timeout=7200 加速清理空閒連線。SHOW PROCESSLIST 定期巡檢 Sleep 狀態連線數。| 函數 | 用途 |
|---|---|
mysql_connect | 建立短連線 |
mysql_pconnect | 建立持久連線 (慎用) |
mysql_close | 關閉連線 (必呼叫) |
mysql_query | 發送 SQL |
mysql_fetch_array/assoc/row/object | 取得結果集行 |
mysql_free_result | 釋放結果集記憶體 |
mysql_select_db | 選擇資料庫 |
mysql_error/errno | 取得錯誤資訊 |
mysql_real_escape_string | 防注入轉義 |
mysql_insert_id | 取得自增 ID |
mysql_affected_rows | 影響行數 |
mysql_ping | 檢測連線存活並重連 |
mysql_unbuffered_query | 不緩衝結果集 (大結果集) |