有許多元素會影響到 Proxy Server 環境的效能,包括代理伺服器用戶端、Proxy Server、原始伺服器及網路。本附錄說明可能改善 Proxy Server 效能的一些調整工作。
本附錄僅供進階管理員使用。調校伺服器時請務必謹慎,在進行任何變更之前,務必做好配置檔案備份。
本附錄包含下列小節:
本小節說明分析 Proxy Server 效能時,應注意的一般領域。
本小節包含以下主題:
停用存取記錄可以提昇 Proxy Server 的效能。不過,如此便無法檢視存取 Proxy Server 之人以及他們請求的頁面。
若要停用 Proxy Server 存取記錄,請在 obj.conf 檔案中為下列指令加入註釋:
Init fn=“flex-init” access=“$accesslog” format.access=“%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] \\”%Req->reqpb.clf-request%\\“ %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%”...AddLog fn=“flex-log” name=“access”
依預設,Proxy Server 將會在 ACL 使用者快取記憶體中快取使用者及群組認證結果。您可以使用 magnus.conf 檔案中的 ACLCacheLifetime 指令,控制 ACL 使用者快取記憶體的有效期限。每次參照快取記憶體中的某個項目時,都將計算其生命週期並檢查 ACLCacheLifetime。如果該項目的生命週期大於或等於 ACLCacheLifetime,則不會使用它。
ACLCacheLifetime 的預設值為 120 秒,這表示 Proxy Server 與 LDAP 伺服器處於不同步狀態的時間,最長可長達兩分鐘。將此值設為 0 (零) 將關閉快取記憶體,並迫使 Proxy Server 於每次使用者請求認證時都必須查詢 LDAP 伺服器。若 Proxy Server 實作存取控制,則此種設定會對 Proxy Server 的效能造成負面影響。若將 ACLCacheLifetime 設為較大的值,則每次對 LDAP 項目進行變更時,可能都必須重新啟動 Proxy Server,因為此種設定會迫使 Proxy Server 查詢 LDAP 伺服器。請僅在 LDAP 目錄不經常變更時,才設定一個較大的值。
ACLUserCacheSize 是 magnus.conf 中的一個參數,用於配置快取記憶體中可以保留的最大項目數。此參數的預設值為 200。新的項目會增加至清單開頭,而且當快取記憶體的大小達到最大值時,位於此清單尾端的項目會回收以建立新的項目。
您也可以使用 ACLGroupCacheSize 參數,設定每個使用者項目可以快取的最大群組成員數。群組中非成員身分的使用者不會被快取,這將導致每個請求都要進行數個 LDAP 目錄存取。
您可以指定伺服器通訊端的傳送緩衝區 (SndBufSize) 及接收緩衝區 (RcvBufSize) 的大小。這些參數都可於 magnus.conf 檔案中配置。建議值會因不同的 UNIX 及 Linux 作業系統而異。請參閱作業系統文件,以正確設定這些參數。
您可以使用 magnus.conf 檔案中的 AcceptTimeout 參數,指定伺服器在關閉連線前等候資料從用戶端到達的秒數。如果逾時時間已到但資料仍未到達,連線將會關閉。此參數預設為 30 秒。在大多數情況下,您不需要變更此設定。若將此參數值設為低於預設值,可以釋放出一些執行緒,但卻可能會使連線速度較慢的使用者中斷連線。
提高 server.xml () 檔案中的 LOG 標籤的記錄層級屬性,會導致伺服器在錯誤記錄中產生並儲存更多資訊。不過,將項目寫入至該檔案會影響效能。僅在進行問題除錯時才提高記錄層級,不使用疑難排解模式時則降低記錄層級。
啟用 SSL 可提高 Proxy Server 的私密性與安全性,但也會影響到效能,因為將封包加密和解密會需要經常性耗用時間。您可以考慮將加密和解密處理工作移至硬體加速卡。
Proxy Server 快取不儲存在隨機存取記憶體中。每當從快取擷取文件時,即會向檔案系統存取檔案。您可以考慮使用 Solaris 檔案系統快取,將 Proxy Server 快取預先載入記憶體。之後只要參照已快取的檔案,就會從記憶體中擷取,而非從檔案系統擷取。
逾時對伺服器效能的影響巨大。為 Proxy Server 設定最合適的逾時值,有助於節省網路資源。
若要配置 Proxy Server 內的逾時值,可使用兩個針對實例的 SAF (伺服器應用程式函數) 及一個全域參數:
init-proxy() 函數會初始化 Proxy Server 的內部設定。Proxy Server 初始化時會呼叫此函數,但您仍然應該在 obj.conf 檔案中指定此函數,才能正確初始化各個參數值。
此函數的語法如下:
Init fn=init-proxy timeout=seconds timeout-2=seconds
在上述範例中,下列參數會直接套用至 Proxy Server 的 init-proxy SAF 逾時設定:
timeout (代理伺服器逾時) - 代理伺服器逾時參數會告知伺服器應等待多久才能退出閒置連線。若設定較大的代理伺服器逾時值,會將有價值的代理伺服器執行緒長時間由可能已當機的用戶端佔用。 若逾時值較低,則會退出需要很長時間才產生結果的 CGI 程序檔,如資料庫查詢閘道。
若要決定伺服器的最佳代理伺服器逾時值,請考量下列事項:
Proxy Server 會處理許多資料庫查詢或 CGI 程序檔嗎?
Proxy Server 處理的請求數目是否少到在任何給定的時間都可以有閒置的程序?
如果對上述問題中任何一個的答案為是,就可以決定設定較大的代理伺服器逾時值。建議設定的最高代理伺服器 timeout 值為 1 小時。預設值為 300 秒 (5 分鐘)。
您可以存取 Server Manager 中 [Preferences] 標籤下的 [Configure System Preferences] 頁面,以檢視或修改代理伺服器逾時值。將以 [Proxy Timeout] 來參照此參數。
timeout-2 (中斷後逾時) - 中斷後逾時值告知 Proxy Server 在用戶端退出作業事件後,要繼續寫入快取檔案多長時間。換句話說,如果 Proxy Server 快要完成文件快取時用戶端突然退出連線,伺服器仍然可以繼續快取文件,直到 timeout after interrupt 值才停止。
建議的最高 timeout after interrupt 值為 5 分鐘。預設值為 15 秒。
http-client-config 函數可配置 Proxy Server 的 HTTP 用戶端。
此函數的語法如下:
Init fn=http-client-config keep-alive=(true|false) keep-alive-timeout=seconds always-use-keep-alive=(true|false) protocol=HTTP Protocol proxy-agent="Proxy-agent HTTP request header"
其設定為:
always-use-keep-alive - (可選) 布林值,指出 HTTP 用戶端是否應嘗試使用永久性連線。預設值為 [true]。
always-use-keep-alive - (可選) 布林值,指出 HTTP 用戶端是否可對各種請求重複使用現有的永久性連線。預設值為 [false],表示對於非 GET 請求或含有內文的請求將不會重複使用永久性連線。
protocol - (可選) HTTP 協定版本字串。依預設,HTTP 用戶端將使用 HTTP/1.0 或 HTTP/1.1,視 HTTP 請求的內容而定。僅在發生特定協定的互通功能問題時,才使用 protocol 參數。
proxy-agent - (可選) Proxy-agent HTTP 請求標頭的值。預設值為包含 Proxy Server 產品名稱和版本的字串。
KeepAliveTimeout() 參數決定伺服器將用戶端與 Proxy Server 之間的 HTTP 持續作用連線或永久性連線保持開啟的最長時間 (以秒為單位)。預設為 30 秒。如果閒置超過 30 秒,連線即逾時。最長為 300 秒 (5 分鐘)。
magnus.conf 檔案中的逾時設定會套用至用戶端和 Proxy Server 之間的連線。obj.conf 檔案中的 http-client-config SAF 逾時設定則會套用至 Proxy Server 與原始伺服器之間的連線。
Proxy Server 提升效能的方法,是從本機快取提供文件,而非從原始伺服器獲得。此方法的缺點之一是可能會提供已過時的文件。
Proxy Server 可執行檢查,確定快取中是否為最新文件,若文件已過時,則會重新整理快取的版本。只在必要時才執行最新狀態檢查,因為經常檢查文件會降低 Proxy Server 的整體效能。
最新狀態檢查是在 [Caching] 標籤的 [Set Cache Specifics] 頁面配置。預設值是每隔兩小時檢查是否有新文件。此資訊是在 ObjectType 指令中使用 max-uncheck 參數配置的。
若要在提昇伺服器效能的同時確保文件為最新版本,請自訂最新狀態檢查,方法是結合 last-modified 因子來確定合理的文件使用期限。
Last-Modified 因子有助於根據已有記錄的先前變更來確定文件變更的可能性。
Last-Modified 因子是介於 .02 和 1.0 之間的分數。其值需乘以文件上次實際修改時間,和上次對文件執行最新狀態檢查時間兩者的間隔。將所得數字和自上次執行最新狀態檢查以來的時間做比較。如果此數字小於時間間隔,表示文件尚未過期。但是,如果此數字大於時間間隔,則表示文件已過期,並且需從原始伺服器取得新的文件版本。
Last-modified 因子可讓您確定最近變更過的文件的檢查頻率會高於舊文件的檢查頻率。
應將 Last-modified 因子設定在 0.1 和 0.2 之間。
DNS 是用於在標準 IP 位址與主機名稱之間建立關聯的系統。此系統若配置不當,就會佔用有價值的 Proxy Server 資源。若要使效能最佳化,請考慮下列選項:
啟用 DNS 快取。
請在 Server Manager 的 [Preferences] 標籤下選擇 [Configure DNS Cache] 連結,以啟用 DNS 快取。選取 DNS 快取的 [Enabled] 單選按鈕。
僅記錄用戶端 IP 位址,而非記錄用戶端 DNS 名稱。
在 Server Manager 的 [Server Status] 標籤下選擇 [Set Access Log Preferences] 連結,可以停用用戶端 DNS 名稱記錄。選取 [IP addresses] 單選按鈕以記錄 IP 位址,而非記錄用戶端主機名稱。
停用反向 DNS。
反向 DNS 會將 IP 位址轉譯為主機名稱。在 Server Manager 的 [Preferences] 標籤下選擇 [Configure System Preferences] 連結,可以停用反向 DNS。選取 [No] 單選按鈕,以停用反向 DNS。
避免根據用戶端主機名稱進行存取控制
在存取控制敘述中盡可能使用用戶端的 IP 位址,不要使用主機名稱。
magnus.conf 檔案中的 RqThrottle 參數用於指定 Proxy Server 可以處理的最大同步作業事件數。預設值為 128。變更此值即可調節伺服器,減少所執行作業事件的延遲狀況。
伺服器為了計算同步請求數,會計算使用中的請求數目。新請求到達時伺服器會將該數字加上 1,完成請求時則會減掉 1。當新請求到達時,伺服器會檢查正在處理的請求是否到達了最大數目。如果已達到限制,則會等到使用中的請求數目低於數目上限時,才開始處理新的請求。
透過檢視 perfdump 所產生資料的 SessionCreationInfo 部分,或檢視 proxystats.xml 資料,您可以監視同步請求數目。可以透過此資訊確定與執行緒的總數 (限制) 相比,同步 (尖峰) 請求的最大數目。下列資訊取自 perfdump 輸出:
SessionCreationInfo: ------------------------ Active Sessions 1 Keep-Alive Sessions 0 Total Sessions Created 48/128
[Active Sessions] 顯示目前在處理請求的階段作業數目 (請求處理執行緒)。[Keep-Alive Sessions] 與 [Active Sessions] 相似,但僅限於持續作用的連線。[Total Sessions Created] 顯示已建立的階段作業數及允許的階段作業數上限。這些值分別為 RqThrottle 值的最小值和最大值。
RqThrottleMin 是伺服器啟動時所啟動的最小執行緒數目。預設值為 48。此參數也可以在 magnus.conf 檔案中設定,但依預設並不會顯示。
達到所配置的執行緒數目上限不一定是壞事。您不需要因此自動增加 RqThrottle 值。達到此限制意味著伺服器在尖峰負載期間需要這麼多數目的執行緒。只要伺服器可以及時處理請求,就表示伺服器的調校得當。不過,這個時候連線會在連線佇列等候,可能會因此造成佇列溢位。如果您的 perfdump 輸出經常顯示已建立的階段作業總數值常接近 RqThrottle 上限,可考慮提高執行緒限制。
合適的 RqThrottle 值應介於 100 到 500 之間,視負載而定。
可以使用 magnus.conf 中的 KeepAlive* 設定及相關設定調校傳入連線池,包括下列項目:
如需有關這些參數的更多資訊,請參閱「Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide」的第 2 章,網址為:
http://docs.sun.com/app/docs/doc/819-6516/
在此 Proxy Server 發行版本中無法配置傳出連線池設定。
提高 FTP 清單寬度可接受較長的檔案名稱,從而減少檔案名稱被截斷的情況。預設寬度為 80 個字元。
要修改 FTP 清單寬度,請選擇 Server Manager [Preferences] 標籤下的 [Tune Proxy] 連結。
妥善配置快取可以改善伺服器效能。架構快取時,應注意的建議事項:
分散負載。
使用多個代理伺服器快取分割區。
使用多台磁碟機。
使用多個磁碟控制器。
適當的快取設定對 Proxy Server 的效能極為重要。在配置代理伺服器快取時需牢記的最重要的規則就是要分散負載。每個分割區可設定約 1 GB 快取記憶體,且應將其分散至多個磁碟及多個磁碟控制器。此種安排在建立及擷取檔案速度上,要比一個單獨的大型快取記憶體快許多。
快取批次更新功能可讓您從指定的網站預先載入檔案,或對快取記憶體中已經存在的文件執行最新狀態檢查。通常在 Proxy Server 的負載達到最低時,才會啟動此作業。您可以在 [Cache Batch Updates] 頁面中建立、編輯及刪除 URL 批次,以及啟用與停用批次更新。
您可以指定要以批次方式更新的檔案,以便主動快取內容,而不只是在要求時才快取。Proxy Server 可讓您對快取記憶體中的多個檔案執行最新狀態檢查,或從某特定網站預先載入多個檔案。
在具有伺服器及代理伺服器網路的大型網站中,建議您以批次更新方式來預先載入 Web 的指定區域。批次處理會對文件中的連結執行遞迴下降,並將內容快取到本機上。此項功能可能會造成遠端伺服器的負擔,因此請謹慎使用。在 bu.conf 配置檔案中的參數可避免此程序無限期執行遞迴,並對此程序提供某種程度的控制。
請使用 Proxy Server 存取記錄來確定哪些網站最常更新,並對那些網站執行批次更新以提昇效能。
資源回收是指檢視 Proxy Server 快取,然後移除陳舊檔案的程序。資源回收是一項密集使用資源的處理程序。因此,建議您調校一些資源回收設定,以提高其效能。
下列參數可微調資源回收程序。您可以在 Server Manager 的 [Caching] 標籤下選擇 [Tune GC],以取得 [Tune Garbage Collection] 表單,並於此檢視或修改這些參數。 這些參數包括:
gc hi margin percent
gc lo margin percent
gc extra margin percent
gc leave fs full percent
gc hi margin percent 變數可控制快取記憶體大小百分比的上限,當達到此百分比時,就會觸發資源回收。
此值必須大於 gc lo margin percent 的值。
gc hi margin percent 的有效範圍介於 10% 到 100% 之間。預設值為 80%,表示當快取記憶體的使用容量達到 80% 時,即會觸發資源回收。
gc lo margin percent 變數用於控制最大快取記憶體大小百分比,資源回收器以此百分比為目標。
此值必須低於 gc hi margin percent 的值。
gc lo margin percent 的有效範圍為 5% 到 100% 之間。預設值為 70%。表示其目標為資源回收後,快取記憶體使用量應該達到 70%。
如果觸發資源回收的原因不是因為分割區的大小接近允許的大小上限 (gc hi margin percent),則資源回收將使用 gc extra margin percent 變數設定的百分比,以決定應移除的快取部分。
gc extra margin percent 的有效範圍為 0% 到 100% 之間。預設值為 30%,表示會移除現有快取檔案的 30%。
gc leave fs full percent 值決定快取分割區大小的百分比,若低於此值將不會進行資源回收。若其他應用程式獨佔了磁碟空間,此值可防止資源回收移除快取中的所有檔案。
gc leave fs full percent 的有效範圍為 0% (允許全部移除) 到 100% (不允許移除)。預設值為 60%,此值允許將快取大小縮減為其現行大小的 60%。
Solaris 核心中有各種參數可用來微調 Proxy Server 效能。下表列出部分的參數。
表 19–1 Solaris 效能調校參數
參數 |
範圍 |
預設值 |
調校值 |
註釋 |
---|---|---|---|---|
/etc/system |
1024 |
8192 |
程序開啟檔案描述元限制。應涵蓋相關通訊端、檔案及管道 (如果有的話) 的預期負載。 |
|
/etc/system |
64 |
8192 | ||
/etc/system |
2 |
0 |
控制串流驅動程式佇列大小。設定此參數為 0 表示效能執行不會由於缺乏緩衝區空間而受到影響。用戶端也須設定此參數。 |
|
ndd/dev/tcp |
240000 |
60000 |
用戶端也須設定此參數。 |
|
ndd/dev/tcp |
128 |
1024 | ||
ndd/dev/tcp |
1024 |
4096 | ||
ndd/dev/tcp |
480000 |
60000 | ||
tcp_keepalive_interval |
ndd/dev/tcp |
7200000 |
900000 |
對於高流量的網站,請降低此值。 |
ndd/dev/tcp |
3000 |
3000 |
如果重新傳輸作業的數量大於 30-40%,請提高此值。 |
|
ndd/dev/tcp |
240000 |
10000 | ||
ndd/dev/tcp |
200 |
3000 | ||
ndd/dev/tcp |
32768 |
1024 |
用戶端也須設定此參數。 |
|
ndd/dev/tcp |
1 |
2 |
少量資料的傳輸速度會稍微快一點。 |
|
ndd/dev/tcp |
8129 |
32768 |
使用此參數以提高傳輸緩衝區。 |
|
ndd/dev/tcp |
8129 |
32768 |
使用此參數以提高接收緩衝區。 |
如需有關這些參數的更多資訊,請參閱「Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide」的第 5 章,網址為:
http://docs.sun.com/app/docs/doc/819-6516/