2015-12-01 71 views
0

我有一個網站,我有大約700-1000用戶在任何時候在線。最近我經歷過我的網站變得非常緩慢。似乎有某種瓶頸。PHP - 持久的連接,太多的連接

我目前的設置是我有一個index.php頁面,它處理我所有的子頁面。設計是這樣的:

include_once($settings['incpath'].'_ify_database.php'); 

    //Define the extra page levels. 
    $i = (isset($_GET['i']) ? inputFilter($_GET['i']) : 'h'); 
    $xp = (isset($_GET['p']) ? inputFilter($_GET['p']) : null); 
    $xpp = (isset($_GET['n']) ? inputFilter($_GET['n']) : null);  

    switch($i){ 
     case 'h': // Home 
      include($settings['themespath'].$config['active_theme'].'/indexheader.php'); 
      include($settings['pagepath'].'home.php'); 
      include($settings['themespath'].$config['active_theme'].'/indexfooter.php'); 
     break; 
    } 

這是我如何連接到數據庫(_ify_database.php):

try { 
    $dsn = "mysql:host=" . $database['host'] . ";dbname=" . $database['db']; 
    $dbh = new PDO($dsn, $database['user'], $database['pass'], array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); // <== add this line 
    } 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

正如你所看到的,我已經設置了永久連接到false

PDO::ATTR_PERSISTENT => false 

如果我啓用它到TRUE我發現加載時間有很大增加,但是經過一段時間後,我得到了Too Many Connections錯誤。

我在做什麼錯?如果網站上有500人,這很快。如果有900-1000則加倍加載時間。

+0

應該監控MySQL和真的,如果這些連接實際上正在使用,或只是閒置。在第一種情況下,可能會增加限制。 –

+0

@ÁlvaroGonzález其中許多訪問者剛剛被重定向到我的網站,並且可能需要0 - 2分鐘。我怎樣才能防止這些連接閒置? – oliverbj

+0

不確定你的意思是「重定向」...我沒有再次嘗試使用最近的PHP版本,但是我在過去遇到過不好的經歷,因爲MySQL驅動程序無法重複使用連接和不必要地打開新連接 - 一個'show processlist'查詢將顯示大多數連接爲「睡眠」。 –

回答