定位結(jié)果如下:
客戶環(huán)境:
windows server 2003 r2 standard edition sp2
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
apache 2.2
瑞星
webshield客戶端1.08
問(wèn)題已復(fù)現(xiàn)。可以優(yōu)化,無(wú)法確定是webshield導(dǎo)致的。
搭建環(huán)境:
windows server 2003 r2 standard edition sp2
mysql 5.0.18 for win32
apache-2.2.21-win32-x86-no_ssl
php-5.2.17-win32-vc6-x86
瑞星23.00.50.25
搭建環(huán)境過(guò)程中遇到的幾個(gè)問(wèn)題:
在下載apache與php時(shí),請(qǐng)注意apache與php匹配問(wèn)題。
a)PHP5.3有VC6與VC9版本,應(yīng)選擇VC6版本。原因如下:
i. VC6版本是使用Visual Studio 6編譯器編譯的,如果你的PHP是用Apache來(lái)架設(shè)的,那你就選擇VC6版本。
ii. VC9版本是使用Visual Studio 2008編譯器編譯的,如果你的PHP是用IIS來(lái)架設(shè)的,那你就選擇VC9版本。
b)PHP5.3的Thread Safe和Non Thread Safe版本。Apache no_ssl版應(yīng)與php Thread Safe版搭配。若與Non Thread Safe搭配,apache啟動(dòng)出錯(cuò):“Apache is running a threaded MPM,but your PHP Modle is not compiled to be threadsafe. You need to recompile PHP.”
i. Thread Safe是線程安全,執(zhí)行時(shí)會(huì)進(jìn)行線程(Thread)安全檢查,以防止有新要求就啟動(dòng)新線程的CGI執(zhí)行方式而耗盡系統(tǒng)資源。ISAPI執(zhí)行方式是以DLL動(dòng)態(tài)庫(kù)的形式使用,可以在被用戶請(qǐng)求后執(zhí)行,在處理完一個(gè)用戶請(qǐng)求后不會(huì)馬上消失,所以需要進(jìn)行線程安全檢查,這樣來(lái)提高程序的執(zhí)行效率,所以如果是以ISAPI來(lái)執(zhí)行PHP,建議選擇Thread Safe版本;
ii. Non Thread Safe是非線程安全,在執(zhí)行時(shí)不進(jìn)行線程(Thread)安全檢查。FastCGI執(zhí)行方式是以單一線程來(lái)執(zhí)行操作,所以不需要進(jìn)行線程的安全檢查,除去線程安全檢查的防護(hù)反而可以提高執(zhí)行效率,所以,如果是以FastCGI來(lái)執(zhí)行PHP,建議選擇Non Thread Safe版本。
注意apache對(duì)網(wǎng)站及PHP的正確配置。特別注意配置文件中LoadModule, PHPIniDir,DocumentRoot,ServerRoot,Directory,DirectoryIndex,AddType application/x-httpd-php等項(xiàng)的配置
安裝后 mysql 后(管理員賬號(hào)密碼:admin/admin),在PHP代碼中使用admin連接數(shù)據(jù)庫(kù)失敗,cmd執(zhí)行mysql –u root -p啟用root用root可正常連接數(shù)據(jù)庫(kù)。
問(wèn)題復(fù)現(xiàn):
PHP最長(zhǎng)執(zhí)行時(shí)間限制。
a)php最長(zhǎng)執(zhí)行時(shí)間默認(rèn)為30秒,超過(guò)30秒后被中止執(zhí)行,與mysql的連接也被斷開(kāi)。
b)嘗試增大此值,修改php目錄下的php.ini配置文件,將max_execution_time = 30 改為max_execution_time = 300。如果設(shè)為0,表示不限制PHP最大執(zhí)行時(shí)間。
c)避免了因最長(zhǎng)執(zhí)行時(shí)間限制而導(dǎo)致mysql連接失敗。
網(wǎng)站流量大導(dǎo)致mysql無(wú)法連接。
a)編寫(xiě)php腳本對(duì)mysql進(jìn)行測(cè)試,發(fā)現(xiàn)當(dāng)對(duì)mysql進(jìn)行頻繁的連接/斷開(kāi)操作時(shí),mysql很快出現(xiàn)無(wú)法連接問(wèn)題(錯(cuò)誤代碼:10048)。當(dāng)中止所有連接,2分鐘后mysql又恢復(fù)正常。若不停止連接,mysql一直無(wú)法連接。
b)嘗試從兩方面優(yōu)化:
i. 修改windows注冊(cè)表項(xiàng)TcpTimedWaitDelay值為30(默認(rèn)為240秒),減少此條目的值允許 TCP/IP 更快地釋放已關(guān)閉的連接, 為新連接提供更多資源。
ii. 修改windows注冊(cè)表項(xiàng)MaxUserPort為53768 (該值表示從系統(tǒng)請(qǐng)求任何可用用戶端口時(shí)所用最大端口數(shù),TCP/IP 可指定的最高端口號(hào),默認(rèn)值為5000)以處理更多的請(qǐng)求。
c)修改完注冊(cè)表項(xiàng)后測(cè)試,mysql情況大有改善:mysql連接錯(cuò)誤出現(xiàn)的情況大有減少,出錯(cuò)后自我恢復(fù)的能力大有提高。
針對(duì)以上兩種情況,分別對(duì)安裝了webshield 1.08與未安裝webshield 1.08進(jìn)行了測(cè)試,兩者測(cè)試結(jié)果一樣。
優(yōu)化:
max_execution_time的修改:
打開(kāi)php目錄下的php.ini文件,找到max_execution_time = 30 這行,將30修改為想要的數(shù)字。
TcpTimedWaitDelay與MaxUserPort的修改:
代碼如下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:00008000
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com