Asp .Net 2.0 安全機制 Ii

44
ASP.NET 2.0 ASP.NET 2.0 安安安安安安安 安安安安安安安 ( ( 安安 安安 ) ) 安安安 安安安 安安安安安安安安 安安安安安安安安 [email protected] [email protected] http://teacher.allok.com.tw http://teacher.allok.com.tw MCP, MCP+I, MCSA, MCSE, MCDBA, MCAD, MCP, MCP+I, MCSA, MCSE, MCDBA, MCAD, MCSD, MCT, MVP MCSD, MCT, MVP

Transcript of Asp .Net 2.0 安全機制 Ii

Page 1: Asp .Net 2.0 安全機制 Ii

ASP.NET 2.0 ASP.NET 2.0 安全機制與偵錯安全機制與偵錯(( 下集下集 ))

曹祖聖曹祖聖台灣微軟資深講師台灣微軟資深講師 [email protected]@syset.com http://teacher.allok.com.twhttp://teacher.allok.com.tw MCP, MCP+I, MCSA, MCSE, MCDBA, MCAD, MCSD, MCT, MVPMCP, MCP+I, MCSA, MCSE, MCDBA, MCAD, MCSD, MCT, MVP

Page 2: Asp .Net 2.0 安全機制 Ii

4/464/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 3: Asp .Net 2.0 安全機制 Ii

5/465/46

執行時期監控執行時期監控優點 優點 ??執行時期監控執行時期監控優點 優點 ??

監控應用程式狀態變化監控應用程式狀態變化監控不正常應用程式、進行進一步分析監控不正常應用程式、進行進一步分析

診斷、分析出問題根源診斷、分析出問題根源應用程式修正後應用程式修正後

確保問題已經解決確保問題已經解決效能調校效能調校容量分析容量分析

監控應用程式狀態變化監控應用程式狀態變化監控不正常應用程式、進行進一步分析監控不正常應用程式、進行進一步分析

診斷、分析出問題根源診斷、分析出問題根源應用程式修正後應用程式修正後

確保問題已經解決確保問題已經解決效能調校效能調校容量分析容量分析

Page 4: Asp .Net 2.0 安全機制 Ii

6/466/46

效能計數器效能計數器效能計數器效能計數器不需做啟動,直接可以收集相關數據不需做啟動,直接可以收集相關數據第一線的監控數據第一線的監控數據做為觸發進一步分析的條件做為觸發進一步分析的條件ASP.NET 2.0 ASP.NET 2.0 支援非常完整的計數器支援非常完整的計數器計數器物件,例如計數器物件,例如 ::

ASP.NETASP.NET

ASP.NET ApplicationsASP.NET Applications

.NET CLR Memory.NET CLR Memory

.NET CLR Exceptions.NET CLR Exceptions

不需做啟動,直接可以收集相關數據不需做啟動,直接可以收集相關數據第一線的監控數據第一線的監控數據做為觸發進一步分析的條件做為觸發進一步分析的條件ASP.NET 2.0 ASP.NET 2.0 支援非常完整的計數器支援非常完整的計數器計數器物件,例如計數器物件,例如 ::

ASP.NETASP.NET

ASP.NET ApplicationsASP.NET Applications

.NET CLR Memory.NET CLR Memory

.NET CLR Exceptions.NET CLR Exceptions

Page 5: Asp .Net 2.0 安全機制 Ii

使用 使用 ASP.NET 2.0 ASP.NET 2.0 效能計數器效能計數器

Page 6: Asp .Net 2.0 安全機制 Ii

8/468/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 7: Asp .Net 2.0 安全機制 Ii

9/469/46

Windows Windows 事件追蹤事件追蹤Windows Windows 事件追蹤事件追蹤Windows Windows 平台上全功能的追蹤功能平台上全功能的追蹤功能

Windows 2000 Windows 2000 之後的作業系統之後的作業系統包含非常多與作業系統相關的元件包含非常多與作業系統相關的元件用途用途 : : 偵錯、診斷、容量規劃偵錯、診斷、容量規劃

追蹤效能高、低負載、高擴展性追蹤效能高、低負載、高擴展性持續事件追蹤 持續事件追蹤 ( 20K/sec)( 20K/sec)<= 5% CPU <= 5% CPU 負載負載 (PIII 500)(PIII 500)核心模式暫存區與記錄核心模式暫存區與記錄

動態組態設定動態組態設定不需要重新開機不需要重新開機

支援 支援 ASP.NETASP.NET在在 V1.1 V1.1 版只支援少數事件 版只支援少數事件 (( 要求開始要求開始 // 結束結束 ))在 在 V2.0 V2.0 版中支援完整的版中支援完整的 HTTP HTTP 與與 Page Page 事件事件

Windows Windows 平台上全功能的追蹤功能平台上全功能的追蹤功能Windows 2000 Windows 2000 之後的作業系統之後的作業系統包含非常多與作業系統相關的元件包含非常多與作業系統相關的元件用途用途 : : 偵錯、診斷、容量規劃偵錯、診斷、容量規劃

追蹤效能高、低負載、高擴展性追蹤效能高、低負載、高擴展性持續事件追蹤 持續事件追蹤 ( 20K/sec)( 20K/sec)<= 5% CPU <= 5% CPU 負載負載 (PIII 500)(PIII 500)核心模式暫存區與記錄核心模式暫存區與記錄

動態組態設定動態組態設定不需要重新開機不需要重新開機

支援 支援 ASP.NETASP.NET在在 V1.1 V1.1 版只支援少數事件 版只支援少數事件 (( 要求開始要求開始 // 結束結束 ))在 在 V2.0 V2.0 版中支援完整的版中支援完整的 HTTP HTTP 與與 Page Page 事件事件

Page 8: Asp .Net 2.0 安全機制 Ii

10/4610/46

Windows Windows 事件追蹤事件追蹤追蹤元件追蹤元件Windows Windows 事件追蹤事件追蹤追蹤元件追蹤元件

事件提供者事件提供者 CC

事件提供者事件提供者 BB

事件提供者 事件提供者 AA

事件記錄檔事件記錄檔

事件控制事件控制

……

ConsumerConsumer

即時事件即時事件

已記錄事件已記錄事件

Session 1Session 1

暫存區暫存區

Session 2Session 2 Session 64Session 64

追蹤的 追蹤的 SessionSession

事件事件

事件事件啟動 啟動 / / 停用停用Session Session 控制控制

事件處理事件處理

Page 9: Asp .Net 2.0 安全機制 Ii

11/4611/46

事件看起來像 事件看起來像 ??事件看起來像 事件看起來像 ??

所有事件除了標準 所有事件除了標準 Windows Windows 事件有的標頭資訊之事件有的標頭資訊之外,還外加了其它的事件詳細訊息外,還外加了其它的事件詳細訊息IIS IIS 與 與 ASP.NET ASP.NET 負責附加這些資訊負責附加這些資訊

所有事件除了標準 所有事件除了標準 Windows Windows 事件有的標頭資訊之事件有的標頭資訊之外,還外加了其它的事件詳細訊息外,還外加了其它的事件詳細訊息IIS IIS 與 與 ASP.NET ASP.NET 負責附加這些資訊負責附加這些資訊

SizeSize Event record size Event record size ULONGULONG 4 Bytes4 Bytes

GUIDGUID Globally unique identifierGlobally unique identifier GUIDGUID 16 Bytes16 Bytes

VersionVersion Version of recordVersion of record USHORTUSHORT 2 Bytes2 Bytes

TypeType Event TypeEvent Type UCHARUCHAR 1 Byte1 Byte

LevelLevel Event LevelEvent Level UCHARUCHAR 1 Byte1 Byte

TimeStampTimeStamp Wall Clock Type (100 ns)Wall Clock Type (100 ns) Quad IntegerQuad Integer 8 Bytes8 Bytes

ProcessIdProcessId Process responsible for eventProcess responsible for event HandleHandle 4 Bytes4 Bytes

ThreadIdThreadId Thread responsible for eventThread responsible for event HandleHandle 4 Bytes4 Bytes

UserTimeUserTime User mode CPU Time (Ticks)User mode CPU Time (Ticks) ULONGULONG 4 Bytes4 Bytes

KernelTimeKernelTime Kernel mode CPU Time (Ticks)Kernel mode CPU Time (Ticks) ULONG ULONG 4 Bytes4 Bytes

Page 10: Asp .Net 2.0 安全機制 Ii

12/4612/46

Windows Windows 事件追蹤事件追蹤使用追蹤使用追蹤Windows Windows 事件追蹤事件追蹤使用追蹤使用追蹤

控制追蹤控制追蹤Logman.exe: Logman.exe: 命令列工具命令列工具效能記錄及警示效能記錄及警示直接呼叫 直接呼叫 Windows APIsWindows APIs

檢示追蹤檢示追蹤Tracerpt.exe: *.etl Tracerpt.exe: *.etl 檔處理工具檔處理工具將追蹤資訊儲存成 將追蹤資訊儲存成 CSV CSV 格式格式產生 產生 ASP.NET ASP.NET 負載報表負載報表ExcelExcel

控制追蹤控制追蹤Logman.exe: Logman.exe: 命令列工具命令列工具效能記錄及警示效能記錄及警示直接呼叫 直接呼叫 Windows APIsWindows APIs

檢示追蹤檢示追蹤Tracerpt.exe: *.etl Tracerpt.exe: *.etl 檔處理工具檔處理工具將追蹤資訊儲存成 將追蹤資訊儲存成 CSV CSV 格式格式產生 產生 ASP.NET ASP.NET 負載報表負載報表ExcelExcel

Page 11: Asp .Net 2.0 安全機制 Ii

13/4613/46

ASP.NET ASP.NET 追蹤事件追蹤事件ASP.NET ASP.NET 追蹤事件追蹤事件用戶端要求事件用戶端要求事件

要求開始要求開始加入佇列與從佇列移除加入佇列與從佇列移除進入進入 // 離開應用程式離開應用程式進入進入 // 離開模組離開模組進入進入 // 離開離開 HandlersHandlers

Page Lifecycle Page Lifecycle 事件事件Viewstate Viewstate 維護、網頁維護、網頁 rendering, …rendering, …

應用程式服務事件應用程式服務事件Session state, Role Manager, PersonalizationSession state, Role Manager, Personalization

要求結束要求結束與與 IIS 6 IIS 6 和 和 HTTP.SYS HTTP.SYS 相關的事件相關的事件

用戶端要求事件用戶端要求事件要求開始要求開始加入佇列與從佇列移除加入佇列與從佇列移除進入進入 // 離開應用程式離開應用程式進入進入 // 離開模組離開模組進入進入 // 離開離開 HandlersHandlers

Page Lifecycle Page Lifecycle 事件事件Viewstate Viewstate 維護、網頁維護、網頁 rendering, …rendering, …

應用程式服務事件應用程式服務事件Session state, Role Manager, PersonalizationSession state, Role Manager, Personalization

要求結束要求結束與與 IIS 6 IIS 6 和 和 HTTP.SYS HTTP.SYS 相關的事件相關的事件

Page 12: Asp .Net 2.0 安全機制 Ii

14/4614/46

記錄追蹤狀態記錄追蹤狀態記錄追蹤狀態記錄追蹤狀態使用 使用 logman.exe logman.exe 或或 perfmon.exeperfmon.exe

logman create trace ASPNET –o "mylog"logman create trace ASPNET –o "mylog"

logman update trace ASPNET –pf events.txtlogman update trace ASPNET –pf events.txt

events.txt: events.txt: 記錄提供者名稱的文字檔,例如記錄提供者名稱的文字檔,例如 ::"ASP.NET Events""ASP.NET Events"

"IIS: WWW Server""IIS: WWW Server"

"HTTP Service Trace""HTTP Service Trace"

"IIS: WWW Isapi Extension""IIS: WWW Isapi Extension"

logman start ASPNETlogman start ASPNET

可以使用可以使用 perfmon.exe perfmon.exe 進行排程進行排程

使用 使用 logman.exe logman.exe 或或 perfmon.exeperfmon.exelogman create trace ASPNET –o "mylog"logman create trace ASPNET –o "mylog"

logman update trace ASPNET –pf events.txtlogman update trace ASPNET –pf events.txt

events.txt: events.txt: 記錄提供者名稱的文字檔,例如記錄提供者名稱的文字檔,例如 ::"ASP.NET Events""ASP.NET Events"

"IIS: WWW Server""IIS: WWW Server"

"HTTP Service Trace""HTTP Service Trace"

"IIS: WWW Isapi Extension""IIS: WWW Isapi Extension"

logman start ASPNETlogman start ASPNET

可以使用可以使用 perfmon.exe perfmon.exe 進行排程進行排程

Page 13: Asp .Net 2.0 安全機制 Ii

15/4615/46

檢視追蹤資料檢視追蹤資料檢視追蹤資料檢視追蹤資料logman stop trace ASPNETlogman stop trace ASPNET

tracerpt mylog_000001.etltracerpt mylog_000001.etl

事件總結資訊在事件總結資訊在 summary.txtsummary.txt

每一個事件的內容與時間在 每一個事件的內容與時間在 dumpfile.csvdumpfile.csv

logman stop trace ASPNETlogman stop trace ASPNET

tracerpt mylog_000001.etltracerpt mylog_000001.etl

事件總結資訊在事件總結資訊在 summary.txtsummary.txt

每一個事件的內容與時間在 每一個事件的內容與時間在 dumpfile.csvdumpfile.csv

Page 14: Asp .Net 2.0 安全機制 Ii

Windows Windows 事件追蹤事件追蹤

Page 15: Asp .Net 2.0 安全機制 Ii

17/4617/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 16: Asp .Net 2.0 安全機制 Ii

18/4618/46

執行時期輸出偵錯資訊執行時期輸出偵錯資訊執行時期輸出偵錯資訊執行時期輸出偵錯資訊在執行時期在執行時期 ::

輸出變數的值輸出變數的值檢查某些條件是否成立檢查某些條件是否成立追蹤應用程式執行路徑追蹤應用程式執行路徑

可以使用的物件可以使用的物件 ::TraceTrace

DebugDebug

在執行時期在執行時期 ::輸出變數的值輸出變數的值檢查某些條件是否成立檢查某些條件是否成立追蹤應用程式執行路徑追蹤應用程式執行路徑

可以使用的物件可以使用的物件 ::TraceTrace

DebugDebug

Page 17: Asp .Net 2.0 安全機制 Ii

19/4619/46

啟動 啟動 ASP.NET ASP.NET 追蹤追蹤啟動 啟動 ASP.NET ASP.NET 追蹤追蹤

針對某一頁 針對某一頁 ASP.NET ASP.NET 進行追蹤進行追蹤

在 在 Web.config Web.config 中設定針對所有應用中設定針對所有應用程式進行追蹤程式進行追蹤

針對某一頁 針對某一頁 ASP.NET ASP.NET 進行追蹤進行追蹤

在 在 Web.config Web.config 中設定針對所有應用中設定針對所有應用程式進行追蹤程式進行追蹤

<trace enabled="true" pageOutput="true“ localOnly="true"/><trace enabled="true" pageOutput="true“ localOnly="true"/><trace enabled="true" pageOutput="true“ localOnly="true"/><trace enabled="true" pageOutput="true“ localOnly="true"/>

<%@ Page Language="vb" Trace="true" %><%@ Page Language="vb" Trace="true" %> <%@ Page Language="vb" Trace="true" %><%@ Page Language="vb" Trace="true" %>

<%@ Page Language="c#" Trace="true" %><%@ Page Language="c#" Trace="true" %> <%@ Page Language="c#" Trace="true" %><%@ Page Language="c#" Trace="true" %>

Page 18: Asp .Net 2.0 安全機制 Ii

20/4620/46

輸出追蹤訊息輸出追蹤訊息

檢查追蹤是否已啟動檢查追蹤是否已啟動 : Trace.IsEnabled: Trace.IsEnabled

動態啟動動態啟動 // 停用追蹤停用追蹤

使用使用 Trace Trace 物件物件使用使用 Trace Trace 物件物件

Trace.Write ("Trace.Write ("categorycategory", "", "messagemessage")")Trace.Warn ("Trace.Warn ("categorycategory", "", "messagemessage")")Trace.Write ("Trace.Write ("categorycategory", "", "messagemessage")")Trace.Warn ("Trace.Warn ("categorycategory", "", "messagemessage")")

If Trace.IsEnabled ThenIf Trace.IsEnabled ThenstrMsg = "Tracing is enabled!"strMsg = "Tracing is enabled!"

Trace.Write("myTrace", strMsg)Trace.Write("myTrace", strMsg)End IfEnd If

If Trace.IsEnabled ThenIf Trace.IsEnabled ThenstrMsg = "Tracing is enabled!"strMsg = "Tracing is enabled!"

Trace.Write("myTrace", strMsg)Trace.Write("myTrace", strMsg)End IfEnd If

Trace.IsEnabled = FalseTrace.IsEnabled = FalseTrace.IsEnabled = FalseTrace.IsEnabled = False

Page 19: Asp .Net 2.0 安全機制 Ii

21/4621/46

直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果

Page 20: Asp .Net 2.0 安全機制 Ii

22/4622/46

使用應用程式層級追蹤使用應用程式層級追蹤使用應用程式層級追蹤使用應用程式層級追蹤

設定設定 pageOutput pageOutput 屬性來決定是不屬性來決定是不是要將追蹤結果直接顯示在頁面上是要將追蹤結果直接顯示在頁面上設定設定 pageOutput pageOutput 屬性來決定是不屬性來決定是不是要將追蹤結果直接顯示在頁面上是要將追蹤結果直接顯示在頁面上

http://server/project/trace.axdhttp://server/project/trace.axdhttp://server/project/trace.axdhttp://server/project/trace.axd

頁面頁面頁面頁面

Trace=TrueTrace=TrueTrace=TrueTrace=True

Trace=FalseTrace=FalseTrace=FalseTrace=False

----

應用程式應用程式應用程式應用程式

----

----

Trace=TrueTrace=TrueTrace=TrueTrace=True

結果結果結果結果 顯示追蹤結果顯示追蹤結果 顯示追蹤結果顯示追蹤結果

不顯示追蹤結果不顯示追蹤結果 不顯示追蹤結果不顯示追蹤結果

顯示追蹤結果顯示追蹤結果 顯示追蹤結果顯示追蹤結果

Page 21: Asp .Net 2.0 安全機制 Ii

使用 使用 ASP.NET Trace ASP.NET Trace 功功能能

Page 22: Asp .Net 2.0 安全機制 Ii

24/4624/46

元件追蹤元件追蹤元件追蹤元件追蹤引用 引用 System.Web.dll System.Web.dll 與 與 System.Web System.Web 空空間間

啟動追蹤啟動追蹤

呼叫呼叫 Trace Trace 物件的方法物件的方法

引用 引用 System.Web.dll System.Web.dll 與 與 System.Web System.Web 空空間間

啟動追蹤啟動追蹤

呼叫呼叫 Trace Trace 物件的方法物件的方法

HttpContext.Current.Trace.IsEnabled = TrueHttpContext.Current.Trace.IsEnabled = TrueHttpContext.Current.Trace.IsEnabled = TrueHttpContext.Current.Trace.IsEnabled = True

Imports System.WebImports System.WebImports System.WebImports System.Web

HttpContext.Current.Trace.Write _HttpContext.Current.Trace.Write _ (“(“ 類別名稱類別名稱”” , “, “ 訊訊

息息 ")")

HttpContext.Current.Trace.Write _HttpContext.Current.Trace.Write _ (“(“ 類別名稱類別名稱”” , “, “ 訊訊

息息 ")")

Page 23: Asp .Net 2.0 安全機制 Ii

元件追蹤元件追蹤

Page 24: Asp .Net 2.0 安全機制 Ii

26/4626/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 25: Asp .Net 2.0 安全機制 Ii

27/4627/46

..NET NET 應用程式執行流程 應用程式執行流程 (( 一一 ))..NET NET 應用程式執行流程 應用程式執行流程 (( 一一 ))

++組件 組件

(Assembly(Assembly 、、 IL)IL)MetadataMetadata

ResourcesResources

組件 組件 (Assembly(Assembly 、、 IL)IL)

MetadataMetadataResourcesResources

Intermediate Language CompilerIntermediate Language Compiler(( 中間碼編譯器中間碼編譯器 ))

Intermediate Language CompilerIntermediate Language Compiler(( 中間碼編譯器中間碼編譯器 ))

Just-In-Time CompilerJust-In-Time Compiler(( 即時編譯器即時編譯器 ))

Just-In-Time CompilerJust-In-Time Compiler(( 即時編譯器即時編譯器 ))

Class LibraryClass Library(( 類別程式庫類別程式庫 ))Class LibraryClass Library

(( 類別程式庫類別程式庫 ))

++ ++

Assembly LoaderAssembly Loader(( 組件載入器組件載入器 ))

Assembly LoaderAssembly Loader(( 組件載入器組件載入器 ))

Class LoaderClass Loader(( 類別載入器類別載入器 ))Class LoaderClass Loader

(( 類別載入器類別載入器 ))

SecuritySecurity(( 安全性檢安全性檢

查查 ))

SecuritySecurity(( 安全性檢安全性檢

查查 ))PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

public static void Main(String[] args )public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w;{ String usr; FileStream f; StreamWriter w; try {try { usr=Environment.GetEnvironmentVariable("USERusr=Environment.GetEnvironmentVariable("USERNAME");NAME"); f=new FileStream(“C:\\f=new FileStream(“C:\\test.txt",FileMode.Create);test.txt",FileMode.Create); w=new StreamWriter(f);w=new StreamWriter(f); w.WriteLine(usr);w.WriteLine(usr); w.Close();w.Close(); } catch (Exception e){} catch (Exception e){ Console.WriteLine("Exception:"+e.ToString());Console.WriteLine("Exception:"+e.ToString()); }}}}

public static void Main(String[] args )public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w;{ String usr; FileStream f; StreamWriter w; try {try { usr=Environment.GetEnvironmentVariable("USERusr=Environment.GetEnvironmentVariable("USERNAME");NAME"); f=new FileStream(“C:\\f=new FileStream(“C:\\test.txt",FileMode.Create);test.txt",FileMode.Create); w=new StreamWriter(f);w=new StreamWriter(f); w.WriteLine(usr);w.WriteLine(usr); w.Close();w.Close(); } catch (Exception e){} catch (Exception e){ Console.WriteLine("Exception:"+e.ToString());Console.WriteLine("Exception:"+e.ToString()); }}}}

程式原始碼程式原始碼程式原始碼程式原始碼

++機器碼 機器碼

(Native Code)(Native Code)機器碼 機器碼

(Native Code)(Native Code)

Page 26: Asp .Net 2.0 安全機制 Ii

28/4628/46

.NET .NET 應用程式執行流程 應用程式執行流程 ((二二 )).NET .NET 應用程式執行流程 應用程式執行流程 ((二二 ))

Native Code ManagerNative Code Manager(( 程式管理員程式管理員 ))

Native Code ManagerNative Code Manager(( 程式管理員程式管理員 )) 執行執行執行執行

Garbage CollectionGarbage Collection((垃圾收集垃圾收集 ))

Garbage CollectionGarbage Collection((垃圾收集垃圾收集 ))

Exception ManagerException Manager(( 例外管理員例外管理員 ))

Exception ManagerException Manager(( 例外管理員例外管理員 ))

Thread SupportThread Support(( 執行緒支援執行緒支援 ))Thread SupportThread Support(( 執行緒支援執行緒支援 ))

COM InteropCOM Interop(COM(COM 元件整合元件整合 ))

COM InteropCOM Interop(COM(COM 元件整合元件整合 ))

Debug EngineDebug Engine(( 偵錯引擎偵錯引擎 ))

Debug EngineDebug Engine(( 偵錯引擎偵錯引擎 ))

Native Code CacheNative Code Cache(( 機器碼快取機器碼快取 ))

Native Code CacheNative Code Cache(( 機器碼快取機器碼快取 ))

SecuritySecurity(( 安全性檢安全性檢

查查 ))

SecuritySecurity(( 安全性檢安全性檢

查查 ))PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

PolicyPolicy<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><configuration><configuration> <mscorlib><mscorlib> <security><security> <policy><policy> <PolicyLevel version="1"><PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="Nothing"PermissionSetName="Nothing" Name="All_Code"Name="All_Code" Description="Code groupDescription="Code group grants no permissio grants no permissions and forms the root of the code group tree.">ns and forms the root of the code group tree."> <IMembershipCondition clas<IMembershipCondition class="AllMembershipCondition"s="AllMembershipCondition" version="1"/>version="1"/> <CodeGroup class="UnionCodeGroup"<CodeGroup class="UnionCodeGroup" version="1"version="1" PermissionSetName="FullTrust"PermissionSetName="FullTrust"

++機器碼 機器碼

(Native Code)(Native Code)機器碼 機器碼

(Native Code)(Native Code)

Page 27: Asp .Net 2.0 安全機制 Ii

29/4629/46

ASP.NET ASP.NET 遠端偵錯遠端偵錯ASP.NET ASP.NET 遠端偵錯遠端偵錯遠端偵錯遠端偵錯 ::

有錯誤立即進行偵錯,簡化偵錯流程有錯誤立即進行偵錯,簡化偵錯流程保留完整的 保留完整的 ““犯罪現場犯罪現場””

需求需求 ::在 在 ASP.NET ASP.NET 執行的主機上要安裝 執行的主機上要安裝 VS2005 VS2005 或遠端偵錯元件或遠端偵錯元件用戶端必須安裝 用戶端必須安裝 VS2005 VS2005 與程式的原始與程式的原始碼碼必須對 必須對 ASP.NET ASP.NET 執行的主機有管理權執行的主機有管理權限限

偵錯自己的 偵錯自己的 process process 時必須是 時必須是 Administrators Administrators 或 或 Debugger UsersDebugger Users 群組成員群組成員偵錯別人的 偵錯別人的 process process 時,必須是 時,必須是 process process 所在機器的 所在機器的 AdministratorsAdministrators 群組成員群組成員

遠端偵錯遠端偵錯 ::有錯誤立即進行偵錯,簡化偵錯流程有錯誤立即進行偵錯,簡化偵錯流程保留完整的 保留完整的 ““犯罪現場犯罪現場””

需求需求 ::在 在 ASP.NET ASP.NET 執行的主機上要安裝 執行的主機上要安裝 VS2005 VS2005 或遠端偵錯元件或遠端偵錯元件用戶端必須安裝 用戶端必須安裝 VS2005 VS2005 與程式的原始與程式的原始碼碼必須對 必須對 ASP.NET ASP.NET 執行的主機有管理權執行的主機有管理權限限

偵錯自己的 偵錯自己的 process process 時必須是 時必須是 Administrators Administrators 或 或 Debugger UsersDebugger Users 群組成員群組成員偵錯別人的 偵錯別人的 process process 時,必須是 時,必須是 process process 所在機器的 所在機器的 AdministratorsAdministrators 群組成員群組成員

Page 28: Asp .Net 2.0 安全機制 Ii

ASP.NET ASP.NET 遠端偵錯遠端偵錯

Page 29: Asp .Net 2.0 安全機制 Ii

31/4631/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 30: Asp .Net 2.0 安全機制 Ii

32/4632/46

ASP .NET ASP .NET 處理模型處理模型IIS 5.0IIS 5.0ASP .NET ASP .NET 處理模型處理模型IIS 5.0IIS 5.0

TCP/IPTCP/IPTCP/IPTCP/IP

WinSock 2.0WinSock 2.0WinSock 2.0WinSock 2.0

inetinfo.exeinetinfo.exe inetinfo.exeinetinfo.exeaspnet_isapi.dllaspnet_isapi.dllaspnet_isapi.dllaspnet_isapi.dll

MetabaseMetabaseMetabaseMetabase

FTP,FTP,SMTP,SMTP,NNTPNNTP

FTP,FTP,SMTP,SMTP,NNTPNNTP

aspnet_wp.exeaspnet_wp.exeaspnet_wp.exeaspnet_wp.exe

aspnet_wp.exeaspnet_wp.exeHTTP runtimeHTTP runtime

aspnet_wp.exeaspnet_wp.exeHTTP runtimeHTTP runtime

AppAppDomainDomain

AppAppDomainDomain

AppAppDomainDomain

AppAppDomainDomain

User ModeUser ModeUser ModeUser Mode

Kernel ModeKernel ModeKernel ModeKernel Mode

RequestRequestRequestRequest ResponseResponseResponseResponse

named pipes

named pipes

named pipes

named pipes

RequestRequestRequestRequest ResponseResponseResponseResponse

工作行程的啟動帳號工作行程的啟動帳號 ::

ASPNETASPNET工作行程的啟動帳號工作行程的啟動帳號 ::

ASPNETASPNET

Page 31: Asp .Net 2.0 安全機制 Ii

33/4633/46

ASP .NET ASP .NET 執行時期 執行時期 AttributesAttributesASP .NET ASP .NET 執行時期 執行時期 AttributesAttributes

Attribute Attribute 名稱名稱 說明說明appRequestQueueLimitappRequestQueueLimit ASP .NET Request ASP .NET Request 佇列大小佇列大小executionTimeoutexecutionTimeout Request Request 最長執行時間最長執行時間maxRequestLengthmaxRequestLength 最大 最大 Request Request 大小大小minFreeThreadsminFreeThreads Request Request 所佔用的最小執行緒數目所佔用的最小執行緒數目minLocalRequestFreeThreadsminLocalRequestFreeThreads Local Request Local Request 所佔用的最小執行緒所佔用的最小執行緒

數目數目

透過 透過 Attributes Attributes 可以設定 可以設定 ASP .NETASP .NET 在執在執行時期的行為行時期的行為

設定在 設定在 <httpRuntime><httpRuntime> 元素中元素中

透過 透過 Attributes Attributes 可以設定 可以設定 ASP .NETASP .NET 在執在執行時期的行為行時期的行為

設定在 設定在 <httpRuntime><httpRuntime> 元素中元素中

Page 32: Asp .Net 2.0 安全機制 Ii

34/4634/46

Health MonitoringHealth MonitoringHealth MonitoringHealth Monitoring

在 在 machine.configmachine.config 中的 中的 <processModel><processModel> 元元素中設定 素中設定 enableenable 這個 這個 AttributeAttribute

IIS IIS 每 每 2 2 秒會檢查一次所有的 工作行程秒會檢查一次所有的 工作行程記憶體大小是否有超過實體記憶體的 記憶體大小是否有超過實體記憶體的 60%60% ( ( 可以使用 可以使用 memoryLimitmemoryLimit Attribute Attribute 設定設定 ))

完成的 完成的 Request Request 數目數目最後一次工作行程回應的時間最後一次工作行程回應的時間

在 在 machine.configmachine.config 中的 中的 <processModel><processModel> 元元素中設定 素中設定 enableenable 這個 這個 AttributeAttribute

IIS IIS 每 每 2 2 秒會檢查一次所有的 工作行程秒會檢查一次所有的 工作行程記憶體大小是否有超過實體記憶體的 記憶體大小是否有超過實體記憶體的 60%60% ( ( 可以使用 可以使用 memoryLimitmemoryLimit Attribute Attribute 設定設定 ))

完成的 完成的 Request Request 數目數目最後一次工作行程回應的時間最後一次工作行程回應的時間

Page 33: Asp .Net 2.0 安全機制 Ii

35/4635/46

Health MonitoringHealth MonitoringHealth MonitoringHealth Monitoring

當工作行程的記憶體超過指定比例當工作行程的記憶體超過指定比例IIS IIS 會暫停該工作行程所負責處理的所有要求會暫停該工作行程所負責處理的所有要求將這些 將這些 request request 重新導向新的 工作行程重新導向新的 工作行程終止與回收舊工作行程的記憶體終止與回收舊工作行程的記憶體記錄事件到應用程式記錄檔中 記錄事件到應用程式記錄檔中 (( 如果有設定 如果有設定 logLevel Attribute)logLevel Attribute)

如果在偵錯時不想讓 如果在偵錯時不想讓 IIS IIS 回收異常的 工回收異常的 工作行程,可以設定 作行程,可以設定 RegistryRegistry

HKLM\Software\Microsoft\ASP.NET\HKLM\Software\Microsoft\ASP.NET\UnderDebuggerUnderDebugger = 1 = 1

(DWORD)(DWORD)

當工作行程的記憶體超過指定比例當工作行程的記憶體超過指定比例IIS IIS 會暫停該工作行程所負責處理的所有要求會暫停該工作行程所負責處理的所有要求將這些 將這些 request request 重新導向新的 工作行程重新導向新的 工作行程終止與回收舊工作行程的記憶體終止與回收舊工作行程的記憶體記錄事件到應用程式記錄檔中 記錄事件到應用程式記錄檔中 (( 如果有設定 如果有設定 logLevel Attribute)logLevel Attribute)

如果在偵錯時不想讓 如果在偵錯時不想讓 IIS IIS 回收異常的 工回收異常的 工作行程,可以設定 作行程,可以設定 RegistryRegistry

HKLM\Software\Microsoft\ASP.NET\HKLM\Software\Microsoft\ASP.NET\UnderDebuggerUnderDebugger = 1 = 1

(DWORD)(DWORD)

Page 34: Asp .Net 2.0 安全機制 Ii

36/4636/46

ASP .NET ASP .NET 處理模型處理模型IIS 6.0IIS 6.0ASP .NET ASP .NET 處理模型處理模型IIS 6.0IIS 6.0

TCP/IPTCP/IPTCP/IPTCP/IP

HTTP.SYSHTTP.SYSHTTP.SYSHTTP.SYS

inetinfo.exeinetinfo.exeinetinfo.exeinetinfo.exe

MetabaseMetabaseMetabaseMetabase

FTP,FTP,SMTP,SMTP,NNTPNNTP

FTP,FTP,SMTP,SMTP,NNTPNNTP

w3wp.exew3wp.exew3wp.exew3wp.exe

User ModeUser ModeUser ModeUser Mode

Kernel ModeKernel ModeKernel ModeKernel Mode

RequestRequestRequestRequest ResponseResponseResponseResponse

WASWASWASWAS

App

Poo

l Mgr

.A

pp P

ool M

gr.

App

Poo

l Mgr

.A

pp P

ool M

gr.

Cor

ding

Mgr

.C

ordi

ng M

gr.

Cor

ding

Mgr

.C

ordi

ng M

gr.

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

w3wp.exew3wp.exew3wp.exew3wp.exe

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

aspn

et_i

sapi

.dll

ResponseResponseResponseResponseRequestRequestRequestRequest

工作行程的啟動帳號工作行程的啟動帳號 : NETWORK SERVICE: NETWORK SERVICE工作行程的啟動帳號工作行程的啟動帳號 : NETWORK SERVICE: NETWORK SERVICE

Page 35: Asp .Net 2.0 安全機制 Ii

37/4637/46

IIS 6.0 IIS 6.0 處理模型處理模型IIS 6.0 IIS 6.0 處理模型處理模型穩定性提昇穩定性提昇

啟動工作行程啟動工作行程 Isolation ModeIsolation Mode

aspnet_isapi.dll aspnet_isapi.dll 會載入工作行程,而非 會載入工作行程,而非 inetinfo.exeinetinfo.exe

增加穩定性 增加穩定性 aspnet_isapi.dll crash aspnet_isapi.dll crash 並不會影並不會影響 響 Web ServerWeb Server

效能提昇效能提昇HTTP.SYS HTTP.SYS 直接進行 直接進行 web client web client 與 工作行程的與 工作行程的連接處理,不需要透過 連接處理,不需要透過 inetinfo.exeinetinfo.exe

穩定性提昇穩定性提昇啟動工作行程啟動工作行程 Isolation ModeIsolation Mode

aspnet_isapi.dll aspnet_isapi.dll 會載入工作行程,而非 會載入工作行程,而非 inetinfo.exeinetinfo.exe

增加穩定性 增加穩定性 aspnet_isapi.dll crash aspnet_isapi.dll crash 並不會影並不會影響 響 Web ServerWeb Server

效能提昇效能提昇HTTP.SYS HTTP.SYS 直接進行 直接進行 web client web client 與 工作行程的與 工作行程的連接處理,不需要透過 連接處理,不需要透過 inetinfo.exeinetinfo.exe

Page 36: Asp .Net 2.0 安全機制 Ii

38/4638/46

Orphaning Failed Orphaning Failed 工作行程工作行程Orphaning Failed Orphaning Failed 工作行程工作行程Web Administration Service (WAS)Web Administration Service (WAS)

與 與 inetinfo.exe inetinfo.exe 進行銜接進行銜接監控工作行程的狀態監控工作行程的狀態負責終止並回收異常工作行程的記憶體負責終止並回收異常工作行程的記憶體

Orphaning Failed ASP .NET Orphaning Failed ASP .NET 工作行程工作行程將異常工作行程保留在記憶中,以進行偵錯,但將異常工作行程保留在記憶中,以進行偵錯,但是不再處理任何 是不再處理任何 requestrequest

cscript cscript adsutil.vbsadsutil.vbs set set w3svc/apppools/ w3svc/apppools/orphanworkerprocessorphanworkerprocess

11

Web Administration Service (WAS)Web Administration Service (WAS)與 與 inetinfo.exe inetinfo.exe 進行銜接進行銜接監控工作行程的狀態監控工作行程的狀態負責終止並回收異常工作行程的記憶體負責終止並回收異常工作行程的記憶體

Orphaning Failed ASP .NET Orphaning Failed ASP .NET 工作行程工作行程將異常工作行程保留在記憶中,以進行偵錯,但將異常工作行程保留在記憶中,以進行偵錯,但是不再處理任何 是不再處理任何 requestrequest

cscript cscript adsutil.vbsadsutil.vbs set set w3svc/apppools/ w3svc/apppools/orphanworkerprocessorphanworkerprocess

11

Page 37: Asp .Net 2.0 安全機制 Ii

39/4639/46

偵錯記憶體相關問題偵錯記憶體相關問題偵錯記憶體相關問題偵錯記憶體相關問題.NET .NET 記憶體管理與垃圾收集機制記憶體管理與垃圾收集機制連續記憶體空間處理連續記憶體空間處理記憶體 記憶體 GenerationsGenerations

Main Object HeapMain Object Heap

Large Object HeapLarge Object Heap

記憶體使用狀況監測記憶體使用狀況監測

.NET .NET 記憶體管理與垃圾收集機制記憶體管理與垃圾收集機制連續記憶體空間處理連續記憶體空間處理記憶體 記憶體 GenerationsGenerations

Main Object HeapMain Object Heap

Large Object HeapLarge Object Heap

記憶體使用狀況監測記憶體使用狀況監測

Page 38: Asp .Net 2.0 安全機制 Ii

40/4640/46

垃圾收集機制垃圾收集機制垃圾收集機制垃圾收集機制為了避免使用 為了避免使用 linked list linked list 來搜尋記憶體空間,來搜尋記憶體空間,Garbage Collection (GC) Garbage Collection (GC) 會進行必要的記憶體會進行必要的記憶體搬移,以確保 搬移,以確保 Heap Heap 記憶空間連續記憶空間連續

為了避免使用 為了避免使用 linked list linked list 來搜尋記憶體空間,來搜尋記憶體空間,Garbage Collection (GC) Garbage Collection (GC) 會進行必要的記憶體會進行必要的記憶體搬移,以確保 搬移,以確保 Heap Heap 記憶空間連續記憶空間連續

已配置空間已配置空間已配置空間已配置空間 已釋放空間已釋放空間已釋放空間已釋放空間 已配置空間已配置空間已配置空間已配置空間 已配置空間已配置空間已配置空間已配置空間Garbage CollectionGarbage CollectionGarbage CollectionGarbage Collection

Page 39: Asp .Net 2.0 安全機制 Ii

41/4641/46

記憶體 記憶體 GenerationsGenerations記憶體 記憶體 GenerationsGenerations

根據記憶體的 根據記憶體的 ““年齡年齡””,, GC GC 將記憶體分成 將記憶體分成 0, 1, 2 0, 1, 2 三個 三個 generationsgenerations

每當開始回收某一 每當開始回收某一 generation generation 記憶體時,所有記憶體時,所有大於該 大於該 generation generation 的記憶體 的記憶體 generation generation 自動昇自動昇級級由於高 由於高 generation generation 的記憶體比較不會變動,因的記憶體比較不會變動,因此每次回收的記憶體單位大小比較大,以減少記此每次回收的記憶體單位大小比較大,以減少記憶體拷貝時間憶體拷貝時間

Generation 0 : 256 KBGeneration 0 : 256 KB

Generation 1 : 2 MBGeneration 1 : 2 MB

Generation 2 : 10 MBGeneration 2 : 10 MB

根據記憶體的 根據記憶體的 ““年齡年齡””,, GC GC 將記憶體分成 將記憶體分成 0, 1, 2 0, 1, 2 三個 三個 generationsgenerations

每當開始回收某一 每當開始回收某一 generation generation 記憶體時,所有記憶體時,所有大於該 大於該 generation generation 的記憶體 的記憶體 generation generation 自動昇自動昇級級由於高 由於高 generation generation 的記憶體比較不會變動,因的記憶體比較不會變動,因此每次回收的記憶體單位大小比較大,以減少記此每次回收的記憶體單位大小比較大,以減少記憶體拷貝時間憶體拷貝時間

Generation 0 : 256 KBGeneration 0 : 256 KB

Generation 1 : 2 MBGeneration 1 : 2 MB

Generation 2 : 10 MBGeneration 2 : 10 MB

Page 40: Asp .Net 2.0 安全機制 Ii

42/4642/46

Large Object HeapLarge Object HeapLarge Object HeapLarge Object Heap

.NET Heap .NET Heap 分為下列兩部份分為下列兩部份Main Managed HeapMain Managed Heap

使用樹狀結構記錄物件 使用樹狀結構記錄物件 reference reference 狀況狀況確保物件 確保物件 reference reference 狀況正確狀況正確追蹤循環 追蹤循環 reference reference 狀況狀況

Large Object HeapLarge Object Heap存放物件大小 存放物件大小 >= 85,000 bytes >= 85,000 bytes 的物件的物件GC GC 不回收這部份記憶體 不回收這部份記憶體 !!!!

記憶體搬移會花費太多時間記憶體搬移會花費太多時間整個 整個 Large Object Heap Large Object Heap 會不斷長大會不斷長大

優先放在系統虛擬記憶體中優先放在系統虛擬記憶體中

.NET Heap .NET Heap 分為下列兩部份分為下列兩部份Main Managed HeapMain Managed Heap

使用樹狀結構記錄物件 使用樹狀結構記錄物件 reference reference 狀況狀況確保物件 確保物件 reference reference 狀況正確狀況正確追蹤循環 追蹤循環 reference reference 狀況狀況

Large Object HeapLarge Object Heap存放物件大小 存放物件大小 >= 85,000 bytes >= 85,000 bytes 的物件的物件GC GC 不回收這部份記憶體 不回收這部份記憶體 !!!!

記憶體搬移會花費太多時間記憶體搬移會花費太多時間整個 整個 Large Object Heap Large Object Heap 會不斷長大會不斷長大

優先放在系統虛擬記憶體中優先放在系統虛擬記憶體中

Page 41: Asp .Net 2.0 安全機制 Ii

應用程式集區設定應用程式集區設定

Page 42: Asp .Net 2.0 安全機制 Ii

44/4644/46

大綱大綱大綱大綱即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

即行時期系統監控 即行時期系統監控 - ASP.NET - ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤ASP.NET ASP.NET 追蹤功能追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定

Page 43: Asp .Net 2.0 安全機制 Ii

45/4645/46

總結總結總結總結在不影響系統執行效能前提下在不影響系統執行效能前提下

使用 使用 ASP.NET ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤

ASP.NET ASP.NET 內建追蹤功能內建追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式

確保偵錯的環境一致確保偵錯的環境一致針對資源使用上有異常的應用程式進行集針對資源使用上有異常的應用程式進行集區設定區設定

在不影響系統執行效能前提下在不影響系統執行效能前提下使用 使用 ASP.NET ASP.NET 效能計數器效能計數器ASP.NET ASP.NET 事件追蹤事件追蹤

ASP.NET ASP.NET 內建追蹤功能內建追蹤功能遠端偵錯 遠端偵錯 ASP.NET ASP.NET 應用程式應用程式

確保偵錯的環境一致確保偵錯的環境一致針對資源使用上有異常的應用程式進行集針對資源使用上有異常的應用程式進行集區設定區設定

Page 44: Asp .Net 2.0 安全機制 Ii

46/4646/46

© 2003-2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.