TechNet Event Session
Download
Report
Transcript TechNet Event Session
Insights and Answers for IT Professionals
Internet Information Server 5.0
網站效能調整及實務應用
王達時
林純忠
臺灣微軟顧問
(育碁數位科技)
應用軟體開發顧問經理
(臺灣微軟)
講座大綱
IIS 5.0 架構剖析
IIS 5.0 效能調整
多層式(n-tier)架構下的效能調整要訣
台大大考查榜系統研討
IIS 5.0 架構剖析
共用資訊
Web Distributed Authoring and
Versioning (WebDAV)
支援 Web資料夾
支援 FrontPage Server Extension
支援最新的 Internet 標準
利用一個 IP 位址的多個網站支援
新聞與郵件
PICS 分級
HTTP 壓縮
FTP 重新連線
建立以 Web 為基礎的應用程式(一)
Active Server Pages
您可以使用伺服器端的指令檔以及元件,來建立動態的內容
http://msdn.microsoft.com/workshop
物件的效能加強
XML 的整合性
ASP 對其常安裝的元件提供效能加強效的版本
建立具有交換格式化 XML 資料能力的應用程式
http://msdn.microsoft.com/xml
Windows Script Components
此可供開發人員將公司邏輯指令檔程序轉換為對 Web 應用程式及
其他支援 COM 元件集的 COM元件
建立以 Web 為基礎的應用程式(二)
瀏覽器相容性元件
ASP 自我調整
ASP 指令編碼
應用程式保護
ADSI 2.0
將伺服器作業系統的功能帶到 Web 上(一)
多重站台主管能力
多重使用者網域
使用者管理授權
處理限制
Web 網站頻寬限制
整合及升級
Microsoft管理主控台 (MMC) 工作板
將伺服器作業系統的功能帶到 Web 上(二)
可靠的 IIS 重新啟動
備製及復原
帳戶處理
改進的自訂錯誤訊息
設定選項
遠端管理
終端服務
集中管理
Web 安全服務
整合的 Web 安全性
Secure Communications
分類驗證
Server-gated Cryptography
安全精靈
IP 及 Internet 網域約束
Kerberos Version 5 Authentication Protocol
Compliance
憑證存放
Fortezza
IIS 5.0 效能調整
效能調整是一種藝術
IIS 5.0 架構簡介
dllhost.exe
dllhost.exe
dllhost.exe
ASP: Out-of-Process
ISAPI: Out-of-Process
IIS Process
inetinfo.exe
CGI
Out-of-Process
wsock32.dll
User mode
Kernel mode
TCPIP
network card
Inter- or intra-network
動態網頁 vs. 靜態網頁
IIS 處理程序(IIS Process)負責處理靜態要求
範例: get http://www.name.com/prices/apple.htm
動態要求以不同的方式處理:
ISAPI 動態連結程式庫 (DLLs)
範例: get
http://name.com/pricing.dll?paramaters
可以 In-Process 或 Out-of-Process 方式執行
CGI: IIS 起始(spawn)一程序, 並執行要求
範例: get
http://name.com/pricing.exe?parameters
只能以獨立處理程序(Out Of Process)的方式執行
,且於 建立處理程序時會花費大量系統資源
如有必要,請使用ISAPI
執行 ASP (一)
Active Server Pages enable
server-side processing
2
Server
.ASP
3
1
HTTP request
(ASP)
ASP.DLL
HTML
4
5
Client
HTTP response
(HTML)
ASP Script
Engine/templates
執行 ASP (二)
Active Server Pages enable
server-side processing
2
Server
.ASP
3
1
HTTP request
(ASP)
ASP.DLL
HTML
4
5
Client
HTTP response
(HTML)
ASP Script
Engine/templates
ASP 要求
Microsoft scripting solution
e.g. get http://name.com/prices.asp
ASP 要求視同 ISAPI 要求一般處理
使用者使用 VBScript 或 Jscript 撰寫
特色
在執行時 (runtime) 解譯 易於修改及撰寫和
OLEAut, COM 有十分緊密的關係
ASP Script Engine/templates 的快取十分重要,
但也需要很多記憶體
效能 vs. 彈性
效能
彈性
Static (100) > ISAPI (50) > ASP (10) > CGI (1)
ASP > CGI > ISAPI > Static
容錯性
CGI = ASP (OOP) = ISAPI (OOP) > ASP (INP) = ISAPI
(INP) = Static
靜態要求效能調整秘訣
IIS 5.0 快取靜態資料於本身的記憶體中
IIS 4.0 使用系統的檔案快取
IIS 5.0 快取調整參數
\\HKLM\System\CurrentControlSet\Services\Inetinfo\
Parameters
MemCacheSize (units: MB):這個參數會指定 IIS 將
用於其本身檔案快取的最大記憶體容量 (50% RAM)
MaxCachedFileSize (bytes):允許快取中的最大檔案
大小(256KB)
ObjectCacheTTL (seconds):其定義了物件 (包括檔
案) 保留在快取記憶體中的時間長度 (30s)
IIS logging 會佔用 5~8% CPU 時間
如果可以,請使用 IIS Admin關閉 log visits
動態要求效能調整秘訣(一)
使用IIS處理程序(in-process) 取得更佳效能表現
使用獨立處理程序(Out Of Process) 建立更穩定
的網站
使用 IIS Admin (應用程式保護) 來更改設定: INP
(low), OOP (medium and high)
開啟 Keep-Alive 設定
除非必要,請不要使用CGI
動態要求效能調整秘訣(二)
ASP 調整設定
W2K 較 NT4 有更佳的表現
增加快取 ASP Script Engines
AspScriptEngineCacheMax (Default:125)
值應等於或大於 CPU 的數量再加上 1,再乘上
AspProcessorThreadMax 的設定值
增加快取 ASP Script Templates
AspScriptFileCacheSize (Default:250)
調整 AspProcessorThreadMax (Default:25)
IIS4 (10) -> IIS5 (25)
調整 AspThreadGateEnabled
以上設定,要測試過才知道
IIS 處理程序、獨立處理程序
以及
集區處理程序的效能比較
應用程式如何影響 IIS 4.0 的正常運作
Web 服務故障 !
Out of
Process
Application
1
In Process
(INETINFO)
Application
Application
Out of
Process
Application
2
IIS 5.0 - 應用程式管理的增強功能
獨立處理程序不再嚴重影響效能
應用程式儘量避免以IIS處理程序執行
集區處理程序
讓 IIS 5.0 更具延展性
集區處理程序
Web 服務持續運作 !
Pooled out of
Process
Application
1
In Process
(INETINFO
)
Application
Application
22
Application
Application
Application
Application
33
Out of
Process
Application
1
Out of
Process
Application
2
Demo
IIS 5.0 的應用程式設定
IIS 處理程序
獨立處理程序
集區處理程序
在 IIS 5.0 上的改變
DLL Host
Pooled out of
Process
(DLL Host)
Applicatio
n
Applicatio
n
Applicatio
n
RPC
In Process
(INETINFO
)
RPC
Applicatio
n
WAM
RPC
Applicatio
n
Applicatio
n
RPC
WAM
WAM
WAM: Web Application Manager
DLL Host
Applicatio
n
WAM
600
500
In-Process
400
Out-Of-Process
Pooled
Out-Of-Process
Isolated
300
200
100
# Applications
10
00
80
0
60
0
40
0
20
0
0
1
Committed Memory
記憶體的使用量
350
300
250
200
150
100
50
0
In-Process
# Applications
10
00
80
0
60
0
40
0
20
0
Out-Of-Process
Pooled
Out-Of-Process
Isolated
1
Requests / Sec
效能
部署應用程式的建議
現學現用:
應用程式應該以IIS處理程序執行嗎?
IIS 5.0 對應用程式預設的處理程序為何 ?
預設的處理程序提供最佳的保障、效能,以及延
展性考量
使用獨立處理程序執行重要的應用程式,以便與
其它網站應用程式隔離
IIS4.0 網站伺服器當機時的處置
重新啟動 INETINFO 中所有的服務
由遠端強制關閉服務的方式並不一致
正常關閉服務需時較久
管理者沒有適當的工具強制關閉IIS 服務
(必須使用 Resource Kit, 無 GUI 介面)
當 IIS 服務當機時, 無自動恢復功能
IIS 5.0的增強功能 - 重新啟動
可靠的重新啟動 : IIS 自動復原
假如 INETINFO 當機, 則重新啟動 IIS
快速地正常關閉服務
先正常關閉服務, 若不行再強制關閉
多種管理工具
MMC 提供方便的 GUI 工具
Command line 提供進階的管理
例如: 定期的重新啟動
安全的由遠端重新啟動
Demo
在 IIS 5.0 設
定可靠的重新啟
動
部署重新啟動的建議
預設為自動重新啟動
網站應用程式不要以 IIS 處理程序執行
將大部分應用程式以集區處理程序執行
重要的網站應用程式以獨立處理程序執行
在監視程式執行的 script中加入 IISRESET 命令
開發高效能ASP程式的秘訣(一)
請勿將物件變數或資料存成Session或
Application變數
DEMO
ASP檔案中不要有太多的程式碼
被 #include 的ASP檔案的長度不宜過大
減少使用全域變數
避免ASP程式碼及HTML標籤混雜
設定Response.Buffer=True
開發高效能ASP程式的秘訣 (二)
盡量避免使用Session State
減少重新設定陣列的長度
(Re-dimension Array)
使用 .With 來多次存取同一個物件中的屬性及
method
Set rs = Server.CreateObject(“ADODB.RecordSet”)
With rs
.CursorLocation = “…..”
.ActiveConnection = “…..”
End With
如何使用COM+大幅增加系統效能
應用程式在 Windows 2000 上執行的更好
安裝更容易
提供更佳的延展性與穩定性
更容易部署與管理
應用程式在 Windows 2000 上能做的更多
Distributed and Network Transparent
Enhanced end-user experience
Integrated security
什麼是COM+
COM+ = COM + MTS + Services
COM+
COM+ Catalog
Queued Components
New Event Model
Object Pooling
Administration Services
Component Management
MTS
Transaction Services
Resource Pooling
Security
Easier Administration
DCOM / COM
Interface-based programming model
Remoting infrastructure
Basic component services
Distributed component services
什麼是MTS
•異動(transaction)功能
多個資料庫之間的「同生共死」功能,確保資料一致完整性
元件之間的「協調同步」功能
•資源共享(resource pooling)功能
資料庫連結共享(database connection pooling)
執行緒共享(thread pooling)物件共享(object pooling)
•存取權限安全控制功能
對每一個「元件」(component)
對一個元件(component)中的每一個「介面」
•用戶端安裝元件(component)功能
•管理功能
COM+ : 演進自 COM/MTS
基本的程式設計模型是一樣的!
新的 COM+ 服務提供你更多的設計選項:
負載平衡 : Load Balancing
交易支援 : Transaction support
佇列元件:Queued Components (QC)
鬆散結合事件:Loosely Coupled Events (LCE)
記憶體內資料庫:In-Memory Database (IMDB)
交易共用屬性管理員:
Transactional Shared Property Manager (TSPM)
如何使用COM+大幅增加系統效能
把Connection String寫死在COM程式中
使用Disconnected recordsets
使用合適的記錄鎖定機制
非必要不要傳回一整個recordset
使用OLE-DB和ADO
一致的錯誤處理程序
加入記載版本資訊的類別以利除錯
製作輔助函數增加程式碼的可讀性
多層式(n-tier)架構下的
效能調整要訣
伺服器的一般調整
停止任何不必要的服務
不要將伺服器效能調整為前端模式
移除不必要的通訊協定 (如:IPX)
不要使用 3D 模式的 Screen Saver
不要將過多的服務裝在同一部主機上
安裝足夠的記憶體
…
網站伺服器的調整(一)
啟用HTTP的持續作用
停用記錄
設定非獨立的處理程序
調整快取(Cache)記憶體
依需求調整網站伺服器的CPU數量
靜態網頁採用HTTP 壓縮
Windows 2000 請安裝 SP1
網站伺服器的調整(二)
AspProcessorThreadMax: 1025
AspThreadGateEnable:
AspThreadGateLoadLow: 50%
可能表示引線被阻斷 ,或純粹表示載量低, IIS 5.0 會增加使用
中的引線數目,以便即時服務其他要求
AspThreadGateLoadHigh: 80%
IIS 5.0 會撤消引線,以減少內容切換的數量
ASP 處理程序的工作引線一定不會超過 CPU 個數乘以
AspProcessorThreadMax
Asp Template Cache: -1250 個檔案
Set Connection Timeout: 15 min
應用程式伺服器的調整(一)
ISAPI > ASP > CGI
儘可能使用靜態資料、並在客戶端執行一般的
資料驗証工作
關閉 ASP Debugging的選項
設定Expires Header
只於必要處使用SSL
注意由資料庫所產生的延遲、並儘量使用
stored procedure
一般而言,若ASP程式超過100行,最好將其
轉換成COM物件
應用程式伺服器的調整(二)
現在緩衝功能預設是啟用的
<% Response.Buffer = True %>
AspQueueConnectionTestTime (3s)
在 IIS 5.0 中,如果有個要求在佇列中存留超過佇列連線
測試時間,則伺服器在開始執行之前,會先檢查看看該用
戶端是否仍在連線中
沒有指令的 ASP
新的流程控制功能
Server.Transfer
新的轉向方法 - Server.Transfer
減少往返 Server 的次數
IIS 4.0
Request (1)
Client
IIS 5.0
ASP
A
Response.Redirect
Client
Request (2)
Response(2)
ASP
B
ASP
A
Request
Server.Transfer
Response
ASP
B
將Session和Application變數值帶到轉向後之URL位址
Server.Execute會將轉向後之URL位址之transaction結果
(OnTransactionAbort和OnTransactionCommit),帶回原呼叫程式
而影響其transaction結果。
應用程式伺服器的調整(三)
複製集合物件及全域變數到區域變數
使用 宣告類型程式庫 TypeLibs
<!-- METADATA TYPE="typelib" FILE="c:\program
files\common files\system\ado\msado15.dll"-->
使用 Option Explicit
<% Option Explicit %>
不使用 Session 變數
提昇Component效能的建議
請勿將STA類型的物件存成Session或
Application變數
盡量使用固定長度的字串宣告
在結束 MTS/COM+ 的元件時請務必呼叫
SetComplete/SetAbort
使用適當的語法建立元件
盡量避免將ASP內建物件傳入MTS元件內
當使用VB撰寫元件時,注意元件專案的設定
請用ATL來撰寫元件,而勿使用MFC
提昇存取資料效能的建議(一)
使用OLE-DB取代ODBC
使用Connection pooling
請勿將ADO connection 存入Application或
Session變數
如果回傳的資料只有一筆,可使用stored
procedure取代產生Recordset
明確告訴 ADO 命令的型態如:
adCmdText、 adCmdTable 、adCmdStoredProc
請勿使用File-Base的資料庫(如Access)
提昇存取資料效能的建議 (二)
遲一點取得資源,早一點釋放資源
重覆使用 Recordsets
使用 Recordset.CacheSize
DEMO
將經常使用的資料快取在應用程式物件中
Don’t Request Entire Table
BAD
RS.Open ”tblOrders", myConn, adOpenKeyset,
adLockOptimistic, adCmdTableDirect
RS.AddNew
RS!order_id = lOrder_ID
RS!shopper_id = lShopper_ID
RS.Update
RS.Close
GOOD
myConn.Open
myConn.Open "Orders","sa",""
myConn.Execute("INSERT INTO tblOrders VALUES (" &
CStr(lOrder_ID) & ", " & CStr(lShopper_ID) & ") "
myConn.Close
Caching Techniques
<HTML> <BODY> <FORM METHOD="POST“ ACTION="Add.asp”>
What is your favorite confections? <%= gsProductsConfections () %><p>
<INPUT TYPE=submit> </FORM> </BODY> </HTML>
<% FUNCTION GetProductsConfections ()
sRetVal = Application("gsProductsConfections")
If sRetVal <> "" Then GetProductsConfections = sRetVal
Else
sSQL = "procGetProductsConfections"
Set cnNorthwind = Server.CreateObject("ADODB.Connection")
Set rsProducts = Server.CreateObject("ADODB.Recordset")
cnNorthwind.Open("Northwind", "sa", "")
rsProducts.Open sSQL, cnNorthwind, adOpenForwardOnly, adLockReadOnly
sRetVal = "<SELECT name=cboProducts>" & Chr(13)
Do Until rsProducts.EOF
sRetVal = sRetVal _& " <OPTION VALUE = " & _
Cstr(rsProducts("ProductID")) & ">" & rsProducts("ProductName") & _
" </OPTION>" & Chr(13)
rsProducts.MoveNext
Loop
sRetVal = sRetVal & "</SELECT>" & Chr(13)
Application("gsProductsConfections") = sRetVal
GetProductsConfections = sRetVal %>
資料庫伺服器的調整(一)
使用stored procedures執行所有資料庫存取的
動作
利用stored procedures提供的Precompiled
query plans特性使效能達到最好
修改資料庫架構不會影響middle-tier的程式碼
善用資料庫索引(index)
只選擇所用到的欄位資料,避免使用“Select *”
沒有必要不要使用 “Order by” 語法
資料庫伺服器的調整 (二)
選擇適當的通訊協定
Name Pipes vs TCP/IP Socket
有計劃且定期的維護資料庫伺服器
執行效能
HTML > IDC/HTX > XML > ASP
使用效能監視器工具
28個改善ASP效能和樣式的訣竅
Hint
1.
將經常使用的資料快取處理在Web伺服器上
2.
將經常使用的資料快取在應用程式或工作階段物件中
3.
將資料和 HTML 快取在 Web伺服器的磁碟上
4.
ADO Save() and Open()
Scripting.FileSystemObject
XML 分析程式 MSXML 支援儲存和載入 XML 文件。
LookupTable 物件
避免將非敏捷元件快取在應用程式或工作階段物件中
無限制執行緒的元件 (除非它們彙總 FTM)
Apartment-threaded 元件。
單一執行緒元件
28個改善ASP效能和樣式的訣竅
5.
6.
不要將資料庫連線快取在應用程式或工作階段物
件中
合理使用工作階段物件
7.
8.
Hint
<% @EnableSessionState=False %>
將程式碼封裝在 COM 物件中
COM 物件有利於將表示邏輯與業務邏輯分開
COM 物件可以保證程式碼重複使用
許多開發人員發現以 VB、C++ 或 Visual J++ 編
寫的程式碼比 ASP 更容易除錯
遲一點取得資源,早一點釋放資源
28個改善ASP效能和樣式的訣竅
9.
10.
跨程序執行用效能交換可靠性
COM 元件可以是「未設定的」、「設定為程式庫應用
程式」,或「設定為伺服器應用程式」
權衡效能與可靠性的合理組態
在 IIS 4.0 中,使用 ASP 低隔離等級,使用
MTS 伺服器套裝軟體。
在 IIS 5.0 上,使用 ASP 的中隔離等級,並使用
COM+ 程式庫應用程式。
使用 Option Explicit
28個改善ASP效能和樣式的訣竅
11.
在副常式和函數中使用區域變數
12.
將經常使用的資料複製到 Script 變數中
13.
避免重新確定陣列的維數
14.
使用回應緩衝
<% Response.Buffer = True %>
Response.Flush
Hint
15.
批次處理內嵌 Script 和 Response.Write 陳述式
16.
在開始長途旅行之前使用Response.IsClientConnected
17.
使用 <OBJECT> 列舉物件
18.
<object runat=server id=objname>
對於 ADO 和其它元件使用 TypeLib 連結
Hint
Hint
28個改善ASP效能和樣式的訣竅
19.
利用瀏覽器的驗證功能
20.
避免在迴圈中使用字串並列
21.
啟用瀏覽器和 Proxy 快取處理
<% Response.Expires = 10 %>
<% Response.ExpiresAbsolute = #May 31,2001
13:30:15# %>
<META HTTP-EQUIV="Expires" VALUE="May 31,2001 13:30:15">
<% Response.CacheControl = "Public" %>
22.
盡可能使用 Server.Transfer 代替 Response.Redirect
23.
在目錄 URL 中使用反斜線
<a href="http://msdn.microsoft.com/workshop/" title="MSDN Web
Workshop">http://msdn.microsoft.com/workshop</a>
28個改善ASP效能和樣式的訣竅
24.
避免使用伺服器變數
Request.ServerVariables 集合比其它集合慢得多
25.
升級到最新和最出色的
26.
微調 Web 伺服器
27.
進行效能測試
28.
閱讀資源連結
http://www.microsoft.com/taiwan/technet
網站效能調整及測試工具
Microsoft Web Application Stress Tool
MetaEdit
InetMon
Performance Monitor
IIS Exception Monitor
Web Application Stress Tool
http://webtool.rte.microsoft.com
如何避免成為被測試的對象
ROBOTS.TXT
User-agent: stress-agent
Disallow: /
MetaEdit
Performance Monitor
Performance Monitor
Web 伺服器
Web Service : Current Connections
Web Service : Connections Attempts/sec
ASP : Requests Queued
ASP : Requests /sec
ASP : Errors /sec
ASP: Request execution time
ASP: Request waiting time
Process (inetinfo) : % Processor Time
使用效能監視器工具的記錄功能
Performance Monitor
資料庫伺服器
Processor : % Processor Time
Process (SQLSERVR) : % Processor Time
SQL Server General Stats : User
Connections
和connection pooling的效率有關
Performance Monitor
COM+/MTS
Server Package vs. Library Package
執行效能比較
須把IIS程式調成獨立執行的EXE
InetMon
Exception Monitor
http://www.microsoft.com/TechNet/iis/tools/ixcptmon.asp
ASP.NET Features (一)
Multiple Language Support
Increased Performance
Compiled code
Cache
Classes and Namespaces
Server Controls
Web Services
ASP.NET Features (二)
Improved Security
Greater Scalability
Cookie-less Sessions
Easy Configuration and Deployment
Animation: The ASP.NET
Execution Model
個案研討:
(台灣大學) 大學聯招查榜系統
系統由來
國立台灣大學、台灣微軟公司、康柏電腦公司
聯合規劃建置大學聯招查榜系統,提供全國十
三萬名考生更快、更好的服務。考生及家長們
祇要用瀏覽器連上台大計算機暨資訊網路中心
的網站http://uee.ntu.edu.tw,或MSN網站
(http://msn.com.tw) , 或使用WAP手機連上
http://uee.ntu.edu.tw/wap/,立即獲知是否已
考取心目中理想的院校科系。
系統需求(一)
「每年大學聯考後,所有考生最關切的事情莫過於準時
公佈所有的榜單,讓考生可以在第一時間內獲知考試結
果」
「台灣大學過去三年來一直以能夠提供最正確、最快速
、最即時的查榜系統自許,因此對於建置大學聯招查榜
系統的條件要求非常嚴格,系統必需具備高穩定性、速
度快,且可即時回應數萬名考生同時上網查詢的需求」
國立台灣大學計算機暨資訊網路中心主任
林一鵬
系統需求(二)
WAP手機查榜:有鑑於無線通訊技術的普及,台灣大學決定
今年提供WAP手機查榜的最新服務,讓考生及家長可使用
WAP手機直接連上台灣大學計算機暨資訊網路中心的伺服器
查詢。
Internet線上查榜:提供查詢網頁介面,考生及家長可在家
中線上查詢放榜的狀況。
CrossLink功能:當考生查詢到自已考上的學校時,網頁上
會提供該校網址的連結,方便您連結至該校了解進一步的相
關訊息
查詢新同學系統:除了查詢自已的資料外,考生也可以查詢
同一科系上榜同學的資料,先一步看到新同學的姓名。
系統架構及流量分析
根據去年資料統計,若榜單查詢全部集中在台大
計算機暨資訊網路中心發佈,則整體網站尖峰時
期的同時上網需求必高於10,000次 /秒,以去年單
一伺服器流量統計,放榜後一個小時內的網頁
page views即高達150萬次。
系統設計
軟體:
Microsoft® Windows® 2000 Advanced Server
IIS 5.0 做為前端的 Web Server
使用動態負載平衡技術 (Windows Load Balancing)
軟體程式設計以 Windows DNA 分散式架構為基礎,使用
ASP 及 COM+ 開發系統及元件
Microsoft® SQL Server™ 7.0 Enterprise Edition
採用資料庫叢集技術(Clustering)技術以提昇延展性及可靠度
硬體:
Compaq Proliant 5500 * 4
配備三顆Intel Pentium III Xeon處理器
ASUS 2 way Server *2
大考查榜系統軟硬體架構圖
http://uee.ntu.edu.tw
Browser
Windows 2000 Advance Server
Compaq Proliant 5500 3 CPU
Tanet
155M
NTU
Router
InterneInterne
t
t Interne
t
http://uee.ntu.edu.tw/wap
WAP手機
Windows 2000 Advance Server
Compaq Proliant 5500 4 CPU
COM+
Windows 2000 Advance Server
Compaq Proliant 5500 3 CPU
Windows 2000 Advance Server
Compaq Proliant 5500 4 CPU
Windows 2000 Advance Server
Dual CPU Server
Windows 2000 Advance Server
Dual CPU Server
動態負載平衡
網站伺服器叢集
IIS 5.0
資料庫叢集伺服器
SQL Server
ASP效能調整流程圖
檢視程式碼
28個秘訣中之
5,6,7,8,11,13,14,1
5
修改程式碼
測試
系統效能調整 – 程式碼的調整
減少 .asp 程式碼約 60%(100行 30行)
減少 if… then…else
複雜的程式碼移到 Store procedure及COM元件中
調整秘訣:
Script Engine 執行效率必定比機器碼差,故避免將判斷邏輯(if…)
或複雜流程在ASP Script中執行
ASP中程式行數越多,對讀取時間及執行效率影響越大
可觀察效能監視器中ASP: Request execution time 及ASP:
Request waiting time兩數值
系統效能調整 – IIS的調整
AspProcessorThreadMax = 250 per CPU
『應用程式保護』設為「高(獨立)」
C:\inetpub\adminscripts\adsutil Set W3SVC/aspprocessorthreadmax 250
確保ASP可以永遠運作
COM 元件設為不支援異動支援
調整密訣:
AspProcessorThreadMax 隨著CPU的執行效能的快慢,可嘗試調整之
測試計劃
設定測試標準
每秒允許同時連線數目標值
250 * 3CPUs * 2 compaq+ 250*2cpus(Asus) = 2000
每個ASP Request的等待執行時間 45 秒
0秒
每個ASP執行時間最慢不得超過 30秒
870 ms
每次COM元件執行時間不得超過 50 ms
17 ms
使用 WAS 工具作模擬測試
實際應用成效
第一次測試系統只能承受每秒 500 個連線
經過2週的調整和測試之後系統己經可以讓2000
個使用者連線
放榜當天成績
四個小時 hits : 2,124,203 次
每一位學生平均等待 1.5 秒即可查到結果
尖峰時期 Concurrent User: 7850
ASP response time: 870 ms
COM+ response time: 17 ms
今年大學聯招會的網路查榜仍由台大計算機及資訊網路中心負責
,為了避免以往網路塞車的毛病,台大今年特別由台灣微軟及康
柏電腦支援技術,改善查榜系統,號稱半小時內可處理一千八百
萬個上網需求,保證不塞車,昨天上午八時起,上網查榜的確順
暢,只要輸入姓名或准考證號碼,榜單立刻顯現,還可查詢同學
姓名及連線到考上的大學網站,非常方便 (聯合報)
八十九學年度大學聯招考試今天上午八點整,透過電腦網路系統放
榜了。由於“聯招會與台大計資中心、台灣微軟等單位合作設置「
考生即時線上查榜服務系統」,因此,考生只要能上網,就能在「
一、二秒之內」獲知自己考上哪一個校系,消除往年網路「塞車」
的現象。(中國時報)
其他成功案例
日盛證券 www.jihsun.com.tw
戴爾電腦 www.dell.com
那斯達克 www.Nasdaq.com
和信超媒體 www.giga.net
……
總結
IIS 5.0 簡介
IIS 5.0 效能調整
多層式(n-tier)架構下的效能調整要訣
(台灣大學)大學聯招查榜系統實際應用成效
更多的資源
教育訓練課程
www.microsoft.com/train_cert/win2kmoc
Course #1557 Installing and Configuring Microsoft
Windows 2000
Course #1562 Designing a Microsoft Windows 2000
Networking Services Infrastructure
技術白皮書
http://www.microsoft.com/windows/server/Te
chnical/networking/
http://www.microsoft.com/ntserver/commserv
/techdetails/
整體服務
Insights & Answers for IT Professionals
TechNet 光碟、TechNet Plus光碟
Microsoft® TechNet 實務技術講座
網站
www.microsoft.com/taiwan/technet
TechNet Flash資訊技術人電子快訊
TechNet CD 標準版內容
一年十二期
Microsoft Knowledge Base
所有產品的 Resource Kit
持續更新的 Service Packs
深入的實務技術資訊
評估與部署指南
TechNet 線上研討會 (Seminar Online)
個案研討
策略白皮書
…
TechNet Plus CD內容
TechNet Plus
=
TechNet 標準版光碟的內容
+
Microsoft 各種最新產品的 Beta 評估版以及
正式評估版光碟
2001年2月TechNet Plus
Microsoft Mobile Information 2001 Server企業版 Beta
Microsoft SharePoint Portal Server RC-1
Exchange 2000 Conferencing Server正式評估版
Exchange 2000 Server企業版正式評估版
Microsoft SQL Server 2000中文版正式評估版
Microsoft BizTalk Server 2000企業版正式評估版
Microsoft Internet Security and Acceleration (ISA) Server
2000企業版正式評估版
Microsoft Host Integration Server 2000正式評估版
Microsoft Visio 2000標準版正式評估版
將經常使用的資料快取在應用程式
或工作階段物件中
<%
Function GetEmploymentStatusList
Dim d
d = Application("EmploymentStatusList")
If d = "" Then
' FetchEmploymentStatusList function (not shown)
' fetches data from DB, returns an Array
d = FetchEmploymentStatusList()
Application("EmploymentStatusList") = d
End If
GetEmploymentStatusList = d
End Function
%>
為所需的每個資料塊編寫類似的函數
' Get Recordset, return as an Array
Function FetchEmploymentStatusList
Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open "select StatusName, StatusID from EmployeeStatus", _
"dsn=employees;uid=sa;pwd=;"
FetchEmploymentStatusList = rs.GetRows() ‘ Return data as an
Array
rs.Close
Set rs = Nothing
End Function
做更進一步改進,可以將 HTML 快取為清單
' Get Recordset, return as HTML Option list
Function FetchEmploymentStatusList
Dim rs, fldName, s
Set rs = CreateObject("ADODB.Recordset")
rs.Open "select StatusName, StatusID from EmployeeStatus", _
"dsn=employees;uid=sa;pwd=;"
s = "<select name=""EmploymentStatus"">" & vbCrLf
Set fldName = rs.Fields("StatusName") ' ADO Field Binding
Do Until rs.EOF
' Next line violates Don't Do String Concats,
' but it's OK because we are building a cache
s = s & " <option>" & fldName & "</option>" & vbCrLf
rs.MoveNext
Loop
s = s & "</select>" & vbCrLf
rs.Close
Set rs = Nothing ' See Release Early
FetchEmploymentStatusList = s ' Return data as a String
End Function
下列範例存放帶有快取資料的時間戳記,並在
一段時間間隔之後更新資料
<%
' error handing not shown...
Const UPDATE_INTERVAL = 300 ' Refresh interval, in seconds
' Function to return the employment status list
Function GetEmploymentStatusList
UpdateEmploymentStatus
GetEmploymentStatusList = Application("EmploymentStatusList")
End Function
' Periodically update the cached data
Sub UpdateEmploymentStatusList
Dim d, strLastUpdate
strLastUpdate = Application("LastUpdate")
(續)
If (strLastUpdate = "") Or _
(UPDATE_INTERVAL < DateDiff("s", strLastUpdate, Now)) Then
' Note: two or more calls might get in here. This is okay and will simply
' result in a few unnecessary fetches (there is a workaround for this)
' FetchEmploymentStatusList function (not shown)
' fetches data from DB, returns an Array
d = FetchEmploymentStatusList()
' Update the Application object. Use Application.Lock()
' to ensure consistent data
Application.Lock
Application("EmploymentStatusList") = Events
Application("LastUpdate") = CStr(Now)
Application.Unlock
End If
End Sub
要中斷記錄集連線,執行下面的兩個步驟
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient ' step 1
' Populate the recordset with data
rs.Open strQuery, strProv
' Now disconnect the recordset from the data provider and data source
rs.ActiveConnection = Nothing ' step 2
將經常使用的物件資料複製到指令碼變數中
Bad Sample
Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc Then ' ...
Good Sample
Set myobj = Foo.bar.blah ' do the resolution of blah ONCE
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc Then '...
Or
With Foo.bar.blah
.baz = .qaz(1)
If .zaq = .abc Then '...
...
End With
批次處理內嵌 Script 和 Response.Write
陳述式 Bad Sample
<table>
<% For Each fld in rs.Fields %>
<th><% = fld.Name %></th>
<%
Next
While Not rs.EOF
%>
<tr>
<% For Each fld in rs.Fields %>
<td><% = fld.Value %></td>
<% Next
</tr>
<% rs.MoveNext
Wend %>
</table>
批次處理內嵌 Script 和 Response.Write
陳述式 Good Sample
<table>
<%
For each fld in rs.Fields
Response.Write (?<th>? & fld.Name & ?</th>? & vbCrLf)
Next
While Not rs.EOF
Response.Write (?<tr>?)
For Each fld in rs.Fields %>
Response.Write(?<td>? & fld.Value & ?</td>? & vbCrLf)
Next
Response.Write ?</tr>?
Wend
%>
</table>
對於 ADO 和其它元件使用 TypeLib 宣告
要存取 ADO TypeLib,將下面的陳述式放在 Global.asa 中。
<!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5
Library"
TYPE="TypeLib" UUID="{00000205-0000-0010-800000AA006D2EA4}" -->
或
<!-- METADATA TYPE="TypeLib"
FILE="C:\Program Files\Common Files\system\ado\msado15.dll"
-->