製品安全規制の改正事項 - METI...製品安全規制の改正事項 平成30年3月19日 経済産業省 産業保安グループ 製品安全課 資料6資料5 1 .モバイルバッテリーの規制対象化について
Asp .Net 2.0 安全機制 Ii
-
Upload
chui-wen-chiu -
Category
Technology
-
view
898 -
download
3
Transcript of 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
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
5/465/46
執行時期監控執行時期監控優點 優點 ??執行時期監控執行時期監控優點 優點 ??
監控應用程式狀態變化監控應用程式狀態變化監控不正常應用程式、進行進一步分析監控不正常應用程式、進行進一步分析
診斷、分析出問題根源診斷、分析出問題根源應用程式修正後應用程式修正後
確保問題已經解決確保問題已經解決效能調校效能調校容量分析容量分析
監控應用程式狀態變化監控應用程式狀態變化監控不正常應用程式、進行進一步分析監控不正常應用程式、進行進一步分析
診斷、分析出問題根源診斷、分析出問題根源應用程式修正後應用程式修正後
確保問題已經解決確保問題已經解決效能調校效能調校容量分析容量分析
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
使用 使用 ASP.NET 2.0 ASP.NET 2.0 效能計數器效能計數器
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
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 事件事件
10/4610/46
Windows Windows 事件追蹤事件追蹤追蹤元件追蹤元件Windows Windows 事件追蹤事件追蹤追蹤元件追蹤元件
事件提供者事件提供者 CC
事件提供者事件提供者 BB
事件提供者 事件提供者 AA
事件記錄檔事件記錄檔
事件控制事件控制
……
ConsumerConsumer
即時事件即時事件
已記錄事件已記錄事件
Session 1Session 1
暫存區暫存區
Session 2Session 2 Session 64Session 64
追蹤的 追蹤的 SessionSession
事件事件
事件事件啟動 啟動 / / 停用停用Session Session 控制控制
事件處理事件處理
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
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
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 相關的事件相關的事件
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 進行排程進行排程
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
Windows Windows 事件追蹤事件追蹤
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
18/4618/46
執行時期輸出偵錯資訊執行時期輸出偵錯資訊執行時期輸出偵錯資訊執行時期輸出偵錯資訊在執行時期在執行時期 ::
輸出變數的值輸出變數的值檢查某些條件是否成立檢查某些條件是否成立追蹤應用程式執行路徑追蹤應用程式執行路徑
可以使用的物件可以使用的物件 ::TraceTrace
DebugDebug
在執行時期在執行時期 ::輸出變數的值輸出變數的值檢查某些條件是否成立檢查某些條件是否成立追蹤應用程式執行路徑追蹤應用程式執行路徑
可以使用的物件可以使用的物件 ::TraceTrace
DebugDebug
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" %>
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
21/4621/46
直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果直接在頁面中檢視追蹤結果
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
結果結果結果結果 顯示追蹤結果顯示追蹤結果 顯示追蹤結果顯示追蹤結果
不顯示追蹤結果不顯示追蹤結果 不顯示追蹤結果不顯示追蹤結果
顯示追蹤結果顯示追蹤結果 顯示追蹤結果顯示追蹤結果
使用 使用 ASP.NET Trace ASP.NET Trace 功功能能
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 _ (“(“ 類別名稱類別名稱”” , “, “ 訊訊
息息 ")")
元件追蹤元件追蹤
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
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)
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)
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 群組成員群組成員
ASP.NET ASP.NET 遠端偵錯遠端偵錯
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
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
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> 元素中元素中
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 數目數目最後一次工作行程回應的時間最後一次工作行程回應的時間
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)
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
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
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
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
記憶體使用狀況監測記憶體使用狀況監測
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
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
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 會不斷長大會不斷長大
優先放在系統虛擬記憶體中優先放在系統虛擬記憶體中
應用程式集區設定應用程式集區設定
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 應用程式應用程式健康監控 健康監控 - - 應用程式集區設定應用程式集區設定
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 應用程式應用程式
確保偵錯的環境一致確保偵錯的環境一致針對資源使用上有異常的應用程式進行集針對資源使用上有異常的應用程式進行集區設定區設定
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.