1. 程式人生 > >讓伺服器能支援10萬併發數祕訣,親身經歷,站在巨人的肩膀上創造

讓伺服器能支援10萬併發數祕訣,親身經歷,站在巨人的肩膀上創造

 由於一個專案的訪問量越來越大,從原來的幾百個,增加到現在50多萬個每天,所以阿里的伺服器也扛不住了,於是就想辦法,查了N多資料,總結了以下方法,才解決這問題,每天一共訪問量50多萬,並不是同時訪問,所以,提高併發數才是關鍵。


由於網站一再打不開,按照排除原因來看,資料庫連線、程序池滿了、iis併發數太高,我能想到的就只有這三種情況,於是就一個一個排除,當專案網站打不開時,同伺服器其他網站都正常,記憶體不到30%,CUP不到20%,怎麼可能打不開呢,於是我先重啟資料庫,發現仍然打不開,然後重啟程序池,還是打不開,最後我重啟iis,這次好了,秒開。看來是iis併發數搞得鬼,於是就查微軟資料,發現,win2008預設的併發數是5000,我想這哪夠啊,就想到如下方法,按步驟來:


步驟一:
首先設定程序池

要點:把佇列長度調整到65535,禁止重疊回收,最大故障數改成65530,這三點必須要改,不然實現不了10萬併發效果
步驟二:
調整IIS 的appConcurrentRequestLimit設定
在開始--》執行--》輸入:c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000--》回車
即可,然後可通過在執行中輸入%systemroot%\System32\inetsrv\config\applicationHost.config回車查詢設定結果,設定後就會出現下面程式碼:

<serverRuntime appConcurrentRequestLimit="100000" />
步驟三:
調整machine.config中的processModel>requestQueueLimit的設定
在開始-->執行--》輸入:%systemroot%\Microsoft.Net\Framework64\v2.0.50727\CONFIG\machine.config
開啟後搜尋找到:<processModel autoConfig="true" />,將此替換成<processModel enable="true" requestQueueLimit="100000" />

步驟四:
在開始--》執行--》輸入下面三句程式碼,然後回車,分別輸入
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768
第一句將tcp併發數提高到10萬,第二和第三句防止出現解決Bad Request - Request Too Long問題,三句分別輸入,分別回車
步驟五:
啟動cmd,然後先輸入net stop http,等待完成,再輸入net start http,等待完成,再輸入iisreset
完成以上5步後,再重啟伺服器,即可達到併發數10萬,無壓力

如果訪問量再大的話,就需要使用負載均衡、圖片和網站分離、CDN等方法。