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: 1025

AspThreadGateEnable:

AspThreadGateLoadLow: 50%
可能表示引線被阻斷 ,或純粹表示載量低, IIS 5.0 會增加使用
中的引線數目,以便即時服務其他要求

AspThreadGateLoadHigh: 80%
IIS 5.0 會撤消引線,以減少內容切換的數量

ASP 處理程序的工作引線一定不會超過 CPU 個數乘以
AspProcessorThreadMax

Asp Template Cache: -1250 個檔案

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"
-->