當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶網(wǎng)站建設(shè)公司
關(guān)于PHP出現(xiàn)錯誤提示的問題
以前有朋友問過我,為什么他的網(wǎng)站出現(xiàn)Too many connections 錯誤。因為我自己沒有遇到過這個問題,那時候工作也忙,沒有時間去考慮這個問題。幾個星期前,到現(xiàn)在的公司工作,有朋友告訴我,我現(xiàn)在的公司的網(wǎng)站上出現(xiàn)同樣的問題,到了非要搞清楚的地步了,于是在PHP手冊里面找關(guān)于mysql_connect和mysql_pconnect的資料,下面是在php手冊中對這兩個函數(shù)的描述:
-------- mysql_connect ----------- 函數(shù)原型: resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]]) 返回: 如果成功則返回一個 MySQL 連接標(biāo)識,失敗則返回 FALSE。 描述: mysql_connect() 建立一個到 MySQL 服務(wù)器的連接。當(dāng)沒有提供可選參數(shù)時使用以下默認(rèn)值:server = localhost:3306,username = 服務(wù)器進程所有者的用戶名,password = 空密碼。 如果用同樣的參數(shù)第二次調(diào)用 mysql_connect(),將不會建立新連接,而將返回已經(jīng)打開的連接標(biāo)識。參數(shù) new_link 改變此行為并使 mysql_connect() 總是打開新的連接,甚至當(dāng) mysql_connect() 曾在前面被用同樣的參數(shù)調(diào)用過。參數(shù) client_flags 可以是以下常量的組合 :MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或者 MYSQL_CLIENT_INTERACTIVE。 注: new_link 參數(shù)自 PHP 4.2.0 起可用。 client_flags 參數(shù)自 PHP 4.3.0 起可用。 一旦腳本結(jié)束,到服務(wù)器的連接就會被關(guān)閉。除非之前已經(jīng)調(diào)用了 mysql_close() 來關(guān)閉它。 ------- mysql_pconnect ------------- 函數(shù)原型: resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]]) 返回: 如果成功則返回一個正的 MySQL 持久連接標(biāo)識符,出錯則返回 FALSE。 描述: mysql_pconnect() 建立一個到 MySQL 服務(wù)器的連接。如果沒有提供可選參數(shù),則使用如下默認(rèn)值:server = localhost:3306, username = 服務(wù)器進程所有者的用戶名,password = 空密碼。client_flags 參數(shù)可以是以下常量的組合:MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE 或者 MYSQL_CLIENT_INTERACTIVE。 server 參數(shù)也可以包括端口號,例如 "hostname:port",或者是本機套接字的的路徑,例如 ":/path/to/socket"。 注: 對 ":port" 的支持是 3.0B4 版添加的。 對 ":/path/to/socket" 的支持是 3.0.10 版添加的。 -------- 兩者之間的區(qū)別 -------------- mysql_pconnect() 和 mysql_connect() 非常相似,但有兩個主要區(qū)別。 首先,當(dāng)連接的時候本函數(shù)將先嘗試尋找一個在同一個主機上用同樣的用戶名和密碼已經(jīng)打開的(持久)連接,如果找到,則返回此連接 標(biāo)識而不打開新連接。 其次,當(dāng)腳本執(zhí)行完畢后到 SQL 服務(wù)器的連接不會被關(guān)閉,此連接將保持打開以備以后使用(mysql_close() 不會關(guān)閉由 mysql_pconnect() 建立的連接)。 可選參數(shù) client_flags 自 PHP 4.3.0 版起可用。 此種連接稱為"持久的"。
看到這里,寫一條代碼來測試一下 /* * pconnect_test.php */ $link = mysql_pconnect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); print ("Connected successfully"); 通過刷新網(wǎng)頁的方式執(zhí)行這條代碼,發(fā)現(xiàn)每執(zhí)行一次,mysql的進程數(shù)就增加一個。在這里我不禁有了疑問。上面說mysql_pconnect這個函 數(shù)的使用的時候,不是說"當(dāng)連接的時候本函數(shù)將先嘗試尋找一個在同一個主機上用同樣的用戶名和密碼已經(jīng)打開的(持久)連接,如果找到 ,則返回此標(biāo)識而不打開新連接"么?為什么我每刷新一次頁面他就給我打開一個新的連接呢? 考慮到這有可能是PHP的bug,我到PHP的bug列表中找關(guān)于和too many connections 有關(guān)的條目。 相關(guān)的話題主要有三個,分別是 #11966 mysql_pconnect opens new connections with the same parameters #26117 Persistent connection not reused #13589 Persistent connections stay open and accumulate 描述比較長,我就不在這里貼,具體的內(nèi)容你自己去看。重點主要是"當(dāng)一個進程打開一個mysql的持續(xù)連接,只要該進程還存在,這個持續(xù) 的連接就不會斷開,而且每一個進程會打開一個mysql的持續(xù)連接,而不能使用其他進程打開的持續(xù)連接"。 到這里,我把相關(guān)的信息發(fā)給上海的朋友張宏,他提示我把apache的子進程數(shù)限制到不高于mysql的最大連接數(shù)。我問了我們的系統(tǒng)管理員 ,他說我們的服務(wù)器上apache的最大子進程數(shù)是256,而mysql的最大連接數(shù)限制為600。就是說mysql的最大連接數(shù)已經(jīng)遠遠超過httpd的進程數(shù) ,為什么還會出現(xiàn)Too many connections 這樣的錯誤呢?答案就在于PHP程序。打開以前同事寫的程序,發(fā)現(xiàn)同一個運行腳步中過多的調(diào)用 mysql_pconnect函數(shù)。如果在應(yīng)用服務(wù)器上,每一個httpd子進程使用一個php腳本,每一個php腳本打開不止一個mysql的連接。因為httpd所產(chǎn) 生的子進程的生存期是apache服務(wù)器指定的,一般服務(wù)器不重啟,這些進程就一直存在。就算服務(wù)器重啟,也可以指定保存這些進程。由于進 程的存在,那么這些連接都不會斷掉,并且每個進程打開幾個連接數(shù),那么統(tǒng)計起來,連接數(shù)就達到了mysql限制的最大連接數(shù)。這時就出現(xiàn) Too many connections 錯誤。 小結(jié)一下,要保證你的系統(tǒng)不會出現(xiàn)Too many connections 錯誤,需要注意兩點: 1.保證你的apache的最大進程數(shù)不超過mysql的最大連接數(shù); 2.不要在程序里面用過多mysql_pconnect連接到同一個數(shù)據(jù)庫服務(wù)器(一個就夠了).這需要好的編碼習(xí)慣和規(guī)范.特別是不斷的給系統(tǒng)增加 新的功能,如果不注重系統(tǒng)架構(gòu)和編碼規(guī)范,當(dāng)系統(tǒng)的復(fù)雜度到了一定的程度,整個系統(tǒng)就變得無法維護了.出現(xiàn)問題的時候解決起來就很麻煩了.
- 1如何讓你網(wǎng)站的alexa快速提高
- 2關(guān)于解決網(wǎng)站文章為什么不收錄問題
- 3OA系統(tǒng)軟件行業(yè)網(wǎng)站友情鏈接20個,來拉住權(quán)重
- 4外貿(mào)網(wǎng)站建設(shè)須需注意的問題
- 5百度算法加強升級草根站長路在何方
- 6APP營銷不能等著搭末班車
- 7大型網(wǎng)站如何做需求分析?
- 8網(wǎng)站建設(shè)的重點
- 9什么是POP3?
- 10買虛擬主機10個注意事項
- 112014年卓求春節(jié)放假通知
- 12企業(yè)網(wǎng)站建設(shè)如何做內(nèi)容規(guī)劃 經(jīng)驗分享
- 13域名爭奪戰(zhàn)硝煙彌漫
- 14為什么建立虛擬主機
- 152015網(wǎng)站設(shè)計新趨勢
- 16網(wǎng)站建設(shè)改進性能asp技巧
- 17域名的含義及構(gòu)成
- 18網(wǎng)站建設(shè)過程中容易出現(xiàn)的問題
- 19網(wǎng)站建設(shè)的前期準(zhǔn)備工作有哪些?
- 20我們真意識到網(wǎng)站的重要嗎
- 21多重注冊域名的優(yōu)勢
- 22企業(yè)門戶網(wǎng)站的建設(shè)與推廣方式
- 233G熱潮讓cn短域名身價倍增
- 24獨立IP虛擬主機的技術(shù)優(yōu)勢
- 25網(wǎng)站建設(shè)需要關(guān)注哪些重點?
- 26Web 字體的未來仍然需要依賴用戶環(huán)境?
- 27什么是域名轉(zhuǎn)發(fā)
- 28租用服務(wù)器有哪些優(yōu)勢
- 29什么叫網(wǎng)站建設(shè),網(wǎng)站建設(shè)如何操作?
- 30域名解析的常見問題
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓