2009-07-14 99 views
1

我想調試一個生產服務器上的錯誤。有時MySQL放棄,我的網絡應用程序無法連接到數據庫(我得到「太多連接」錯誤)。服務器一天的晚上我跑了幾個cron作業,有時會做一些繁重的MySQL工作幾千訪問者人數(至50個000行循環,插入和刪除重複等)調試MySQLs「太多連接」

  • 服務器運行Apache和MySQL的同一臺機器
  • MySQL有一個非常基礎的標準配置(最大連接數)
  • 的web應用程序是用PHP

上如何調試這個問題?我應該閱讀哪些日誌文件?我如何找到「邪惡」腳本?奇怪的是,如果我重新啓動MySQL服務器,它會重新開始工作。

編輯:

  • 不同的應用程序/腳本使用不同的連接到它的數據庫(主要是mysqli的,但也Zend_Db的)

回答

2

首先,使用innotop(谷歌它)來監控您的連接。它主要面向InnoDB統計數據,但它可以設置爲顯示所有連接,包括那些不在事務中的連接。

否則,以下內容將有所幫助:在Web應用程序中使用持久性連接/連接池。增加您的最大連接。

2

這不一定是長時間運行的SQL查詢。

如果您在頁面的開始處打開連接,它將不會在PHP腳本終止之前釋放 - 即使沒有查詢正在運行。

你應該添加一些統計數據到你的網頁中,找出最慢的和最受打擊的。如果可能,儘早關閉連接將有所幫助。

2

嘗試使用持久連接(mysql_pconnect),它將有助於減少由於不斷打開和關閉MySQL連接而導致的服務器負載。

0

起點可能是使用mysqladmin processlist來獲取mysql服務器上進程的列表。下一步取決於你的發現。