Discussion:
關於IIS(w3p.exe)的瓶頸..!!!!...無法超過1.3G的記憶體用量,一超過就當掉..!!!...
(时间太久无法回复)
小新
2006-01-04 09:15:03 UTC
Permalink
也許應該這樣問.!!!
我是寫一個大型的Web-based系統,採用ASP.NET,為了節省大量的Database Loading...
我將很多資料放在Application 以及 Session中..!!!!!...

在少量會員Login的時候.!!!...例如 同時有100人登入進系統的時候..!!!!..
一切都會運作正常..!!!!...
隨著登入的人數越來越多,因為每一個會員登入,都會順便將這個會員的很多相關設定..
從Database載入DataTable放入Session當中.....避免每次需要用到這些資料的時候必須去資料庫查詢..!!!.....降低Databased Loading...!!!!!...
所以,每登入一個會員就會耗用掉很多記憶體..!!!!..
登線上同時有260 ~ 300名會員登入的時候...!!!!..
w3p.exe這支程式就會吃掉超過1.3G的記憶體空間..!!!!..
And then 沒多久....這個Web Site就當掉了..!!!!!...
每次當掉的時候...檢查w3p.exe 都會發現記憶體差不多都是吃掉1.3G的時候才當掉..!!...
我還滿震驚的..!!!..因為記憶體空間還很多...根本沒有用滿..!!!!!...
原本以為,雖然記憶體用量太多,但是只要一直加記憶體就行了..!!!!!...
為什麼....IIS會自己當在1.3G的時候..!!!!!.....
Any Body can telll me this..??...
有人試過....一直在Session塞資料..!!!...然後將w3p.exe那支程式...ㄍㄧㄥ到超過1.3G嗎 ..??...
如果有的話,告訴我怎麼設定才能超過這個瓶頸..!!!!...

其實微軟的瓶頸還滿多的..!!!...像SQL Server 2000...
他的Table欄位沒辦法超過2000個..!!!!!.....
通常為了加速系統以及資料庫的執行速度....避免Join太多Table..!!!..
會把大量的欄位加到主要Table中,可以加速查詢的速度.!!!...
原本也是以為可以無限制的把欄位一直加進去..!!!!!..
沒想到超過1300 ~ 1400多個欄位的時候...就遇到SQL Server的瓶頸了..!!!!...

唉!沒想到這麼容易就遇到微軟的瓶頸....!!!!!...
害我傻眼,只好將其他欄位拆到另外一個新的Table..!!!...
以及這Web端...自己寫Loading Balance功能...
將會員平均分散在不同的w3p.exe上面..!!!!...
同時還得降低Session的用量,改塞到Cookie裡面..!!!!!...

Any Body Can Tell Me..??...
難到微軟系統上的瓶頸真的無法超越嗎..??...
OR....在64位元的版本才能獲得解決..???.....

thanks..!!!>.
Lucian
2006-01-05 04:22:02 UTC
Permalink
--
Sincerely yours,
Post by 小新
也許應該這樣問.!!!
我是寫一個大型的Web-based系統,採用ASP.NET,為了節省大量的Database Loading...
我將很多資料放在Application 以及 Session中..!!!!!...
在少量會員Login的時候.!!!...例如 同時有100人登入進系統的時候..!!!!..
一切都會運作正常..!!!!...
隨著登入的人數越來越多,因為每一個會員登入,都會順便將這個會員的很多相關設定..
從Database載入DataTable放入Session當中.....避免每次需要用到這些資料的時候必須去資料庫查詢..!!!.....降低Databased Loading...!!!!!...
所以,每登入一個會員就會耗用掉很多記憶體..!!!!..
登線上同時有260 ~ 300名會員登入的時候...!!!!..
w3p.exe這支程式就會吃掉超過1.3G的記憶體空間..!!!!..
And then 沒多久....這個Web Site就當掉了..!!!!!...
每次當掉的時候...檢查w3p.exe 都會發現記憶體差不多都是吃掉1.3G的時候才當掉..!!...
我還滿震驚的..!!!..因為記憶體空間還很多...根本沒有用滿..!!!!!...
原本以為,雖然記憶體用量太多,但是只要一直加記憶體就行了..!!!!!...
為什麼....IIS會自己當在1.3G的時候..!!!!!.....
Any Body can telll me this..??...
有人試過....一直在Session塞資料..!!!...然後將w3p.exe那支程式...ㄍㄧㄥ到超過1.3G嗎 ..??...
如果有的話,告訴我怎麼設定才能超過這個瓶頸..!!!!...
其實微軟的瓶頸還滿多的..!!!...像SQL Server 2000...
他的Table欄位沒辦法超過2000個..!!!!!.....
通常為了加速系統以及資料庫的執行速度....避免Join太多Table..!!!..
會把大量的欄位加到主要Table中,可以加速查詢的速度.!!!...
原本也是以為可以無限制的把欄位一直加進去..!!!!!..
沒想到超過1300 ~ 1400多個欄位的時候...就遇到SQL Server的瓶頸了..!!!!...
唉!沒想到這麼容易就遇到微軟的瓶頸....!!!!!...
害我傻眼,只好將其他欄位拆到另外一個新的Table..!!!...
以及這Web端...自己寫Loading Balance功能...
將會員平均分散在不同的w3p.exe上面..!!!!...
同時還得降低Session的用量,改塞到Cookie裡面..!!!!!...
Any Body Can Tell Me..??...
難到微軟系統上的瓶頸真的無法超越嗎..??...
OR....在64位元的版本才能獲得解決..???.....
thanks..!!!>.
Lucian
2006-01-05 04:23:01 UTC
Permalink
微軟產品本來就很狗屎。試試看用ORACLE。
--
Sincerely yours,
Post by 小新
也許應該這樣問.!!!
我是寫一個大型的Web-based系統,採用ASP.NET,為了節省大量的Database Loading...
我將很多資料放在Application 以及 Session中..!!!!!...
在少量會員Login的時候.!!!...例如 同時有100人登入進系統的時候..!!!!..
一切都會運作正常..!!!!...
隨著登入的人數越來越多,因為每一個會員登入,都會順便將這個會員的很多相關設定..
從Database載入DataTable放入Session當中.....避免每次需要用到這些資料的時候必須去資料庫查詢..!!!.....降低Databased Loading...!!!!!...
所以,每登入一個會員就會耗用掉很多記憶體..!!!!..
登線上同時有260 ~ 300名會員登入的時候...!!!!..
w3p.exe這支程式就會吃掉超過1.3G的記憶體空間..!!!!..
And then 沒多久....這個Web Site就當掉了..!!!!!...
每次當掉的時候...檢查w3p.exe 都會發現記憶體差不多都是吃掉1.3G的時候才當掉..!!...
我還滿震驚的..!!!..因為記憶體空間還很多...根本沒有用滿..!!!!!...
原本以為,雖然記憶體用量太多,但是只要一直加記憶體就行了..!!!!!...
為什麼....IIS會自己當在1.3G的時候..!!!!!.....
Any Body can telll me this..??...
有人試過....一直在Session塞資料..!!!...然後將w3p.exe那支程式...ㄍㄧㄥ到超過1.3G嗎 ..??...
如果有的話,告訴我怎麼設定才能超過這個瓶頸..!!!!...
其實微軟的瓶頸還滿多的..!!!...像SQL Server 2000...
他的Table欄位沒辦法超過2000個..!!!!!.....
通常為了加速系統以及資料庫的執行速度....避免Join太多Table..!!!..
會把大量的欄位加到主要Table中,可以加速查詢的速度.!!!...
原本也是以為可以無限制的把欄位一直加進去..!!!!!..
沒想到超過1300 ~ 1400多個欄位的時候...就遇到SQL Server的瓶頸了..!!!!...
唉!沒想到這麼容易就遇到微軟的瓶頸....!!!!!...
害我傻眼,只好將其他欄位拆到另外一個新的Table..!!!...
以及這Web端...自己寫Loading Balance功能...
將會員平均分散在不同的w3p.exe上面..!!!!...
同時還得降低Session的用量,改塞到Cookie裡面..!!!!!...
Any Body Can Tell Me..??...
難到微軟系統上的瓶頸真的無法超越嗎..??...
OR....在64位元的版本才能獲得解決..???.....
thanks..!!!>.
Justin Huang
2006-01-27 03:14:03 UTC
Permalink
基本上來說,用session來儲存DataSet,本來就不是微軟建議的solution。發生OOM的問題絕對是可預期的。

至於說您是用2G的系統記憶體,但是ASPNET_WP.EXE到1.3G就終止的原因是因為ASP.NET預設使用系統的60%記憶體就會做自動回收的動作,這是為了保護系統正常運作的功能。

你可以到Machine.config中的 以下欄位:
<processModel enable="true" timeout="Infinite" idleTimeout="Infinite"
shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000"
restartQueueLimit="10" memoryLimit="60" webGarden="false"
cpuMask="0xffffffff" userName="machine" password="AutoGenerate"
logLevel="Errors" clientConnectedCheck="0:00:05"
comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate"
responseDeadlockInterval="00:03:00" maxWorkerThreads="20" maxIoThreads="20"/>

把 memoryLimit = "60" 這個值調高(單位是百分比),這樣就會避免1.3G的限制。

不管你用PHP還是ASP,只要Session這樣用,都會遇到這樣狀況的><"

但是如果是SQL的部分,這個我就不清楚了.
--
=========================

Justin Huang 黃振宇
***@yahoo.com.tw

To Buy(敗) or not to Buy(敗), that ''s the problem!
=========================


"小新" 來函:
Post by 小新
也許應該這樣問.!!!
我是寫一個大型的Web-based系統,採用ASP.NET,為了節省大量的Database Loading...
我將很多資料放在Application 以及 Session中..!!!!!...
在少量會員Login的時候.!!!...例如 同時有100人登入進系統的時候..!!!!..
一切都會運作正常..!!!!...
隨著登入的人數越來越多,因為每一個會員登入,都會順便將這個會員的很多相關設定..
從Database載入DataTable放入Session當中.....避免每次需要用到這些資料的時候必須去資料庫查詢..!!!.....降低Databased Loading...!!!!!...
所以,每登入一個會員就會耗用掉很多記憶體..!!!!..
登線上同時有260 ~ 300名會員登入的時候...!!!!..
w3p.exe這支程式就會吃掉超過1.3G的記憶體空間..!!!!..
And then 沒多久....這個Web Site就當掉了..!!!!!...
每次當掉的時候...檢查w3p.exe 都會發現記憶體差不多都是吃掉1.3G的時候才當掉..!!...
我還滿震驚的..!!!..因為記憶體空間還很多...根本沒有用滿..!!!!!...
原本以為,雖然記憶體用量太多,但是只要一直加記憶體就行了..!!!!!...
為什麼....IIS會自己當在1.3G的時候..!!!!!.....
Any Body can telll me this..??...
有人試過....一直在Session塞資料..!!!...然後將w3p.exe那支程式...ㄍㄧㄥ到超過1.3G嗎 ..??...
如果有的話,告訴我怎麼設定才能超過這個瓶頸..!!!!...
其實微軟的瓶頸還滿多的..!!!...像SQL Server 2000...
他的Table欄位沒辦法超過2000個..!!!!!.....
通常為了加速系統以及資料庫的執行速度....避免Join太多Table..!!!..
會把大量的欄位加到主要Table中,可以加速查詢的速度.!!!...
原本也是以為可以無限制的把欄位一直加進去..!!!!!..
沒想到超過1300 ~ 1400多個欄位的時候...就遇到SQL Server的瓶頸了..!!!!...
唉!沒想到這麼容易就遇到微軟的瓶頸....!!!!!...
害我傻眼,只好將其他欄位拆到另外一個新的Table..!!!...
以及這Web端...自己寫Loading Balance功能...
將會員平均分散在不同的w3p.exe上面..!!!!...
同時還得降低Session的用量,改塞到Cookie裡面..!!!!!...
Any Body Can Tell Me..??...
難到微軟系統上的瓶頸真的無法超越嗎..??...
OR....在64位元的版本才能獲得解決..???.....
thanks..!!!>.
Bernard Cheah [MVP]
2006-03-28 03:32:08 UTC
Permalink
No idea. but this is more related to asp.net rather than IIS.
--
Regards,
Bernard Cheah
http://www.iis-resources.com/
http://www.iiswebcastseries.com/
http://msmvps.com/blogs/bernard/
œÐ±Ð¡A§ÚªºŸ÷Ÿ¹Š]¬°Š³žËsql2003ŽúžÕª©¡AŠbŠwžË®É³nÅéŠÛ°ÊŠwžË€F2.0frameworkªºª©¥»¡Ašt²Î€€€]ŠwžË€Fframework
1.1ª©¥»¡A²{ŠæªºIIS¶]ªº¬O1.1ª©¡C
®ÚŸÚ§Aªº»¡©ú§ÚŠb¹qž£€€§äšì€F€UŠC¥|­ÓÀÉ®×
1.1ª©¥»ªº
machine.config
2.0 ª©¥»ªº
machine.config
machine.config.comments
machine.config.default
Šb1.1ª©€€machine.config§Ú¥i¥H§äšìmemoryLimitªº°ÑŒÆ¡AšÃ­×§ï€§¡AŠýŠb2.0ª©¥»machine.config§ä€£šìmemoryLimitªº°ÑŒÆ¡A€ÏŠÓŠbmachine.config.comments§äšì¡A­Yºô¯žªºframework­n§ï°õŠæŠš2.0ª©¡AœÐ±Ð­ìšÓªºmachine.config­n€£­n°Ê¡AÁÙ¬O­n§ïmachine.config.comments ?
·P¿EŠ^À³
"Justin Huang" šÓšç¡G
°ò¥»€WšÓ»¡¡A¥ÎsessionšÓÀxŠsDataSet¡A¥»šÓŽN€£¬O·L³n«Øijªºsolution¡Cµo¥ÍOOMªº°ÝÃDµŽ¹ï¬O¥i¹wŽÁªº¡C
§A¥i¥HšìMachine.config€€ªº ¥H€UÄæŠì¡G
<processModel enable="true" timeout="Infinite" idleTimeout="Infinite"
shutdownTimeout="0:00:05" requestLimit="Infinite"
requestQueueLimit="5000"
restartQueueLimit="10" memoryLimit="60" webGarden="false"
cpuMask="0xffffffff" userName="machine" password="AutoGenerate"
logLevel="Errors" clientConnectedCheck="0:00:05"
comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate"
responseDeadlockInterval="00:03:00" maxWorkerThreads="20"
maxIoThreads="20"/>
§â memoryLimit = "60" ³o­Ó­ÈœÕ°ª(³æŠì¬OŠÊ€À€ñ)¡A³oŒËŽN·|ÁקK1.3Gªº­­šî¡C
€£ºÞ§A¥ÎPHPÁÙ¬OASP¡A¥u­nSession³oŒË¥Î¡A³£·|¹Jšì³oŒËª¬ªpªº><"
Šý¬OŠpªG¬OSQLªº³¡€À¡A³o­Ó§ÚŽN€£²M·¡€F.
--
=========================
Justin Huang ¶À®¶Št
To Buy(±Ñ) or not to Buy(±Ñ), that ''s the problem!
=========================
"€p·s" šÓšç¡G
€]³\À³žÓ³oŒË°Ý.!!!
Loading...
§Ú±N«ÜŠhžê®Æ©ñŠbApplication ¥H€Î Session€€..!!!!!...
Šb€Ö¶q·|­ûLoginªº®É­Ô.!!!...šÒŠp ŠP®ÉŠ³100€Hµn€J¶išt²Îªº®É­Ô..!!!!..
±qDatabasežü€JDataTable©ñ€JSession·í€€.....ÁקKšCŠž»Ý­n¥Îšì³ošÇžê®Æªº®É­Ô¥²¶·¥hžê®Æ®w¬džß..!!!.....­°§CDatabased Loading...!!!!!...
µnœu€WŠP®ÉŠ³260 ~ 300ŠW·|­ûµn€Jªº®É­Ô...!!!!..
w3p.exe³o€äµ{Š¡ŽN·|ŠY±Œ¶W¹L1.3Gªº°OŸÐÅéªÅ¶¡..!!!!..
And then šSŠh€[....³o­ÓWeb SiteŽN·í±Œ€F..!!!!!...
šCŠž·í±Œªº®É­Ô...Àˬdw3p.exe ³£·|µo²{°OŸÐÅé®t€£Šh³£¬OŠY±Œ1.3Gªº®É­Ô€~·í±Œ..!!...
§ÚÁÙº¡Ÿ_Å媺..!!!..Š]¬°°OŸÐÅéªÅ¶¡ÁÙ«ÜŠh...®Ú¥»šSŠ³¥Îº¡..!!!!!...
¬°€°»ò....IIS·|ŠÛ€v·íŠb1.3Gªº®É­Ô..!!!!!.....
Any Body can telll me this..??...
ŠpªGŠ³ªºžÜ¡A§i¶D§Ú«ç»ò³]©w€~¯à¶W¹L³o­Ó²~ÀV..!!!!...
šä¹ê·L³nªº²~ÀVÁÙº¡Šhªº..!!!...¹³SQL Server 2000...
¥LªºTableÄæŠìšS¿ìªk¶W¹L2000­Ó..!!!!!.....
³q±`¬°€F¥[³tšt²Î¥H€Îžê®Æ®wªº°õŠæ³t«×....ÁקKJoin€ÓŠhTable..!!!..
·|§â€j¶qªºÄæŠì¥[šì¥D­nTable€€¡A¥i¥H¥[³t¬džßªº³t«×.!!!...
šS·Qšì¶W¹L1300 ~ 1400Šh­ÓÄæŠìªº®É­Ô...ŽN¹JšìSQL Serverªº²~ÀV€F..!!!!...
­ü¡IšS·Qšì³o»ò®e©öŽN¹Jšì·L³nªº²~ÀV....!!!!!...
¥H€Î³oWebºÝ...ŠÛ€vŒgLoading Balance¥\¯à...
±N·|­û¥­§¡€ÀŽ²Šb€£ŠPªºw3p.exe€W­±..!!!!...
ŠP®ÉÁÙ±o­°§CSessionªº¥Î¶q¡A§ï¶ëšìCookiežÌ­±..!!!!!...
Any Body Can Tell Me..??...
Ãøšì·L³nšt²Î€Wªº²~ÀV¯uªºµLªk¶W¶V¶Ü..??...
OR....Šb64Šì€žªºª©¥»€~¯àÀò±ožÑšM..???.....
thanks..!!!>.
don
2006-03-28 03:25:03 UTC
Permalink
請教,我的機器因為有裝sql2003測試版,在安裝時軟體自動安裝了2.0framework的版本,系統中也安裝了framework
1.1版本,現行的IIS跑的是1.1版。
根據你的說明我在電腦中找到了下列四個檔案
1.1版本的
machine.config
2.0 版本的
machine.config
machine.config.comments
machine.config.default

在1.1版中machine.config我可以找到memoryLimit的參數,並修改之,但在2.0版本machine.config找不到memoryLimit的參數,反而在machine.config.comments找到,若網站的framework要改執行成2.0版,請教原來的machine.config要不要動,還是要改machine.config.comments ?

感激回應


"Justin Huang" 來函:
Post by Justin Huang
基本上來說,用session來儲存DataSet,本來就不是微軟建議的solution。發生OOM的問題絕對是可預期的。
至於說您是用2G的系統記憶體,但是ASPNET_WP.EXE到1.3G就終止的原因是因為ASP.NET預設使用系統的60%記憶體就會做自動回收的動作,這是為了保護系統正常運作的功能。
你可以到Machine.config中的 以下欄位:
<processModel enable="true" timeout="Infinite" idleTimeout="Infinite"
shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000"
restartQueueLimit="10" memoryLimit="60" webGarden="false"
cpuMask="0xffffffff" userName="machine" password="AutoGenerate"
logLevel="Errors" clientConnectedCheck="0:00:05"
comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate"
responseDeadlockInterval="00:03:00" maxWorkerThreads="20" maxIoThreads="20"/>
把 memoryLimit = "60" 這個值調高(單位是百分比),這樣就會避免1.3G的限制。
不管你用PHP還是ASP,只要Session這樣用,都會遇到這樣狀況的><"
但是如果是SQL的部分,這個我就不清楚了.
--
=========================
Justin Huang 黃振宇
To Buy(敗) or not to Buy(敗), that ''s the problem!
=========================
"小新" 來函:
Post by 小新
也許應該這樣問.!!!
我是寫一個大型的Web-based系統,採用ASP.NET,為了節省大量的Database Loading...
我將很多資料放在Application 以及 Session中..!!!!!...
在少量會員Login的時候.!!!...例如 同時有100人登入進系統的時候..!!!!..
一切都會運作正常..!!!!...
隨著登入的人數越來越多,因為每一個會員登入,都會順便將這個會員的很多相關設定..
從Database載入DataTable放入Session當中.....避免每次需要用到這些資料的時候必須去資料庫查詢..!!!.....降低Databased Loading...!!!!!...
所以,每登入一個會員就會耗用掉很多記憶體..!!!!..
登線上同時有260 ~ 300名會員登入的時候...!!!!..
w3p.exe這支程式就會吃掉超過1.3G的記憶體空間..!!!!..
And then 沒多久....這個Web Site就當掉了..!!!!!...
每次當掉的時候...檢查w3p.exe 都會發現記憶體差不多都是吃掉1.3G的時候才當掉..!!...
我還滿震驚的..!!!..因為記憶體空間還很多...根本沒有用滿..!!!!!...
原本以為,雖然記憶體用量太多,但是只要一直加記憶體就行了..!!!!!...
為什麼....IIS會自己當在1.3G的時候..!!!!!.....
Any Body can telll me this..??...
有人試過....一直在Session塞資料..!!!...然後將w3p.exe那支程式...ㄍㄧㄥ到超過1.3G嗎 ..??...
如果有的話,告訴我怎麼設定才能超過這個瓶頸..!!!!...
其實微軟的瓶頸還滿多的..!!!...像SQL Server 2000...
他的Table欄位沒辦法超過2000個..!!!!!.....
通常為了加速系統以及資料庫的執行速度....避免Join太多Table..!!!..
會把大量的欄位加到主要Table中,可以加速查詢的速度.!!!...
原本也是以為可以無限制的把欄位一直加進去..!!!!!..
沒想到超過1300 ~ 1400多個欄位的時候...就遇到SQL Server的瓶頸了..!!!!...
唉!沒想到這麼容易就遇到微軟的瓶頸....!!!!!...
害我傻眼,只好將其他欄位拆到另外一個新的Table..!!!...
以及這Web端...自己寫Loading Balance功能...
將會員平均分散在不同的w3p.exe上面..!!!!...
同時還得降低Session的用量,改塞到Cookie裡面..!!!!!...
Any Body Can Tell Me..??...
難到微軟系統上的瓶頸真的無法超越嗎..??...
OR....在64位元的版本才能獲得解決..???.....
thanks..!!!>.
继续阅读narkive:
Loading...