亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

IIS服務(wù)器性能的十條規(guī)則

添加時間:2014-6-10 17:59:04  添加: 思海網(wǎng)絡(luò) 

下面的每一條戒律都將有效地影響代碼的性能和可伸縮性。換句話說,盡可能不要照著戒律去做!下面,我將解釋如何破壞他們以便提高性能和可伸縮性。

1、應(yīng)該分配和釋放多個對象

你 應(yīng)該盡量避免過量分配內(nèi)存,因?yàn)閮?nèi)存分配可能是代價高昂的。釋放內(nèi)存塊可能更昂貴,因?yàn)榇蠖鄶?shù)分配算符總是企圖連接臨近的已釋放的內(nèi)存塊成為更大的塊。直 到Windows NT? 4.0 service pack 4.0,在多線程處理中,系統(tǒng)堆通常都運(yùn)行得很糟。堆被一個全局鎖保護(hù),并且在多處理器系統(tǒng)上是不可擴(kuò)展的。

2.不應(yīng)該考慮使用處理器高速緩存

大 多數(shù)人都知道由虛擬內(nèi)存子系統(tǒng)導(dǎo)致的hard 頁錯誤代價很高,最好避免。但是許多人認(rèn)為其他內(nèi)存訪問方法沒有什么區(qū)別。自從80486以后,這一觀點(diǎn)就不對了。現(xiàn)代的CPUs比RAM要快得 多,RAM至少需要兩級內(nèi)存緩存 ,高速L1 緩存能保存8KB數(shù)據(jù)和8KB指令,而較慢的L2 緩存能保存幾百KB的數(shù)據(jù)和代碼,這些數(shù)據(jù)和代碼混合在一起。L1 緩存中內(nèi)存區(qū)域的一個引用需要一個時鐘周期,L2 緩存的引用需要4到7個時鐘周期,而主內(nèi)存的引用需要許多個處理器時鐘周期。后一數(shù)字不久將會超過100個時鐘周期。在許多方面,緩存像一個小型的,高速 的,虛擬內(nèi)存系統(tǒng)。

至于和緩存有關(guān)的基本內(nèi)存單元不是字節(jié)而是緩存列。 Pentium 緩存列有32個字節(jié)寬。Alpha 緩存列有64個字節(jié)寬。這意味著在L1 緩存中只有512個slot給代碼和數(shù)據(jù)。如果多個數(shù)據(jù)一起使用(時間位置)而并不存儲在一起(空間位置),性能會很差。數(shù)組的空間位置很好,而相互連接 的列表和其他基于指針的數(shù)據(jù)結(jié)構(gòu)的位置往往很差。

把數(shù)據(jù)打包到同一個緩存列中通常會 有利于提高性能,但是它也會破壞多處理器系統(tǒng)的性能。內(nèi)存子系統(tǒng)很難協(xié)調(diào)處理器間的緩存。如果一個被所有處理器使用的只讀數(shù)據(jù),和一個由一個處理器使用并 頻繁更新的數(shù)據(jù)共享一個緩存 列,那么緩存將會花費(fèi)很長時間更新這個緩存列的拷貝。這個Ping-Pong高速游戲通常被稱為"緩存 sloshing"。如果只讀數(shù)據(jù)在一個不同的緩存 列中,就可以避免sloshing。

對代碼進(jìn)行空間優(yōu)化比進(jìn)行速度優(yōu)化效率更高。代碼越少,代碼所占的頁也越少,這樣需要的運(yùn)行設(shè)置和產(chǎn)生的頁錯誤也會更少,同時占據(jù)的緩存 列也會更少。然而,某些核心函數(shù)應(yīng)該進(jìn)行速度優(yōu)化。可以利用profiler去識別這些函數(shù)。

3.決不要緩存頻繁使用的數(shù)據(jù)。

軟件緩存可以被各種應(yīng)用程序使用。當(dāng)一個計算代價很高時,你會保存結(jié)果的一個拷貝。這是一個典型的時空折中方法:犧牲一些存儲空間以節(jié)省時間。如果做得好,這種方法可能非常有效。

你 必須正確地進(jìn)行緩存。如果緩存了錯誤數(shù)據(jù),就會浪費(fèi)存儲空間。如果緩存得太多,其他操作可以使用的內(nèi)存將會很少。如果緩存得太少,效率又會很低,因?yàn)槟惚? 須重新計算被緩存 遺漏的數(shù)據(jù)。如果將時間敏感數(shù)據(jù)緩存得時間過長,這些數(shù)據(jù)將會過時。一般,服務(wù)器更關(guān)心的是速度而不是空間,所以他們要比桌面系統(tǒng)進(jìn)行更多的緩存。一定要 定期去除不用的緩存,否則將會有運(yùn)行設(shè)置問題。

4.應(yīng)該創(chuàng)建多個線程,越多越好。

調(diào) 整服務(wù)器中起作用的線程數(shù)目是很重要的。如果線程是I/O-bound的,將會花費(fèi)很多時間用來等待I/O的完成-一個被阻塞的線程就是一個不做任何有用 工作的線程。加入額外的線程可以增加通量,但是加入過多的線程將會降低服務(wù)器的性能,因?yàn)樯舷挛慕粨Q將會成為一個重大的overhead。上下文交換速度 應(yīng)該低的原因有三個:上下文交換是單純的overhead,對應(yīng)用程序的工作沒有任何益處;上下文交換用盡了寶貴的時鐘周期;最糟的是,上下文交換將處理 器的緩存填滿了沒用的數(shù)據(jù),替換這些數(shù)據(jù)是代價高昂的。

有很多事情是依靠你的線程化 結(jié)構(gòu)的。每個客戶端一個線程是絕對不合適的。因?yàn)閷τ诖罅坑脩舳耍臄U(kuò)展性不好。上下文交換變得難以忍受,Windows NT用盡了資源。線程池模型會工作得更好,在這種方法中一個工人線程池將處理一條請求列,因?yàn)閃indows 2000提供了相應(yīng)的APIs,如QueueUserWorkItem。

5.應(yīng)該對數(shù)據(jù)結(jié)構(gòu)使用全局鎖

使 數(shù)據(jù)線程安全的最簡單方法是把它套上一把大鎖。為簡單起見,所有的東西都用同一把鎖。這種方法會有一個問題:序列化。為了得到鎖,每一個要處理數(shù)據(jù)的線程 都必須排隊(duì)等候。如果線程被一把鎖阻塞,它沒有在做任何有用的事。當(dāng)服務(wù)器的負(fù)載較輕時,這個問題并不常見,因?yàn)橐淮慰赡苤挥幸粋線程需要鎖。在負(fù)載很重 的情況下,對鎖的激烈爭奪可能就會成為一個大問題。

設(shè)想在多車道高速公路上發(fā)生了一個意外事故,這條高速公路上的所有車輛都被轉(zhuǎn)向一條狹窄的道路。如果車輛很少,這一轉(zhuǎn)換對交通流的速率的影響可以忽略。如果車輛很多,當(dāng)車輛慢慢并入那條單通道時,交通阻塞會延伸幾英里。

有幾種技術(shù)能夠減少鎖競爭。

· 不要過分保護(hù),也就是說,不是非常必要不要鎖住數(shù)據(jù)。只有需要時才去持有鎖,而且時間不要過長。不要在大段代碼周圍或頻繁執(zhí)行的代碼中沒必要地使用鎖,這一點(diǎn)很重要。

· 對數(shù)據(jù)進(jìn)行分割,使它能夠用一套獨(dú)立的鎖保護(hù)。例如,一個符號表可以按標(biāo)識符的第一個字母分割,這樣在修改名字以Q開頭的符號的值時,就不會去讀名字以H開頭的符號的值。

· 使用APIs的Interlocked 系列(InterlockedIncrement,InterlockedCompareExchangePointer等)自動修改數(shù)據(jù)而不需要鎖。

· 當(dāng)數(shù)據(jù)不是經(jīng)常被修改時可以使用多讀者/單作者(multi-reader/single-writer)鎖。你將獲得更好的并發(fā)性,盡管鎖操作的代價將更高并且你可能會冒餓死作者的危險。

· 在關(guān)鍵部分使用循環(huán)計數(shù)器。參見Windows NT 4.0 service pack 3中的SetCriticalSectionSpinCount API。

· 如果你不能得到鎖,使用TryEnterCriticalSection并做一些其他的有用的工作。

高競爭導(dǎo)致serialization,serialization導(dǎo)致降低CPU的利用率,這促使用戶加入更多的線程,結(jié)果事情變得更糟。

6.不必注意多處理器機(jī)器

你的代碼在多處理器系統(tǒng)上比在單處理器系統(tǒng)上運(yùn)行得還要糟,這可能是件令人惡心的事。一個很自然的想法是,在一個N維系統(tǒng)上運(yùn)行N次會更好。性能很差的原因是競爭:鎖競爭,總線競爭,和/或緩存列競爭。處理器都在是爭奪共享資源的所有權(quán),而不是做更多的工作。

如果你一定要編寫多線程應(yīng)用程序的話,你應(yīng)該在多處理器盒上對你的應(yīng)用程序進(jìn)行強(qiáng)度測試和性能測試。單處理器系統(tǒng)通過時間分片地執(zhí)行線程而提供一個并發(fā)性的假象。多處理器盒具有真正的并發(fā)性,競爭環(huán)境和競爭更容易發(fā)生。

7.應(yīng)該始終使用模塊化調(diào)用;他們很有趣。

利 用同步模塊化調(diào)用來執(zhí)行I/O操作對大多數(shù)桌面應(yīng)用程序來說是合適的。但是,他們不是使用服務(wù)器上的CPU(s)的好方法。I/O操作要花費(fèi)上百萬個時鐘 周期來完成,這些時鐘周期本來可以被更好地利用。利用異步I/O你能得到顯著提高的用戶請求率和I/O通量,不過增加了額外的復(fù)雜性。

如 果你有需要花費(fèi)很長時間的模塊化調(diào)用或I/O操作,你應(yīng)該考調(diào)撥多少資源給他們。你想使用所有的線程還是有個限制?一般地,使用有限的幾個線程要好些。構(gòu) 建一個小的線程池和隊(duì)列,利用隊(duì)列來安排線程的工作完成模塊化調(diào)用。這樣,其他線程就可以拾取和處理你的非模塊化的請求。

8.不要進(jìn)行測量

當(dāng)你能夠測量你所談?wù)摰氖虑椴⒂脭?shù)字表達(dá)它時,這就表示你對他有了一定的了解;但是如果你不能用數(shù)字表達(dá)時,你的知識是貧瘠的不能令人滿意的;這可能是知識的開始,但這時你簡直不可能將你的思想提高到科學(xué)的水平。

- Lord Kelvin (William Thomson)

如果不測量你就不能了解應(yīng)用程序的特性。你在黑暗中摸索,一半是靠猜測。如果不識別性能問題,你就不能做任何改進(jìn)或做出工作量計劃。

測 量包括黑匣子測量和profiling。黑匣子測量的意思是收集由性能計數(shù)器(內(nèi)存使用,上下文交換,CPU利用等)和外部檢測工具(通量,反映時間等) 所顯示的數(shù)據(jù)。為了profile你的代碼,你編譯代碼的一個工具版,然后在各種條件下運(yùn)行它,并收集關(guān)于執(zhí)行時間和過程調(diào)用頻率的統(tǒng)計數(shù)據(jù)。

測量如果不用于分析的話就一點(diǎn)用都沒有。測量將不僅告訴你有問題,而且甚至能幫助你找到問題發(fā)生在哪,但它不能告訴你為什么會有問題。對問題進(jìn)行分析以便你能正確地改正他們。要從根本上解決問題而不是停留在表面現(xiàn)象。

當(dāng)你進(jìn)行改動后,要重新測量。你要知道你的改動是否有效。改動也可能會暴露其他性能問題,測量-分析-改正-再測量的循環(huán)就會重新開始。你也必須要有規(guī)律地進(jìn)行測量,以便發(fā)現(xiàn)性能衰退問題。

9.應(yīng)該使用單一用戶,單一請求的測試方法。

書寫ASP和ISAPI應(yīng)用程序的一個通病是只用一個瀏覽器去測試應(yīng)用程序。當(dāng)他們在Internet上應(yīng)用他們的程序時,他們才發(fā)現(xiàn)他們的應(yīng)用程序不能處理高負(fù)載,并且通量和反應(yīng)時間另人可憐。

用 一個瀏覽器測試是必要的但是不夠的。如果瀏覽器反應(yīng)得不夠快,你就知道你有麻煩了。但即使它在使用一個瀏覽器時很快,你也不知道它處理負(fù)載的能力如何。如 果十幾個用戶同時請求會發(fā)生什么事?一百個呢?你的應(yīng)用程序能容忍什么樣的通量?它能提供什么樣的反應(yīng)時間?在輕載時這些數(shù)字會怎樣?中等負(fù)載呢?重載 呢?在多處理器機(jī)器上你的應(yīng)用程序會如何?對你的應(yīng)用程序進(jìn)行強(qiáng)度測試,這對于找出bugs發(fā)現(xiàn)性能問題來說是基本的。

類似的負(fù)載測試考慮適用于所有的服務(wù)器應(yīng)用程序。

10.不應(yīng)使用實(shí)際環(huán)境。

人們往往只在幾個特定的,人工的環(huán)境(如下benchmarks)下調(diào)整應(yīng)用程序。選擇和實(shí)際情況相對應(yīng)的各種情況,并為針對各種操作進(jìn)行優(yōu)化,這一點(diǎn)很重要。如果你不這樣做,你的用戶和評論家一定會這樣做,并且他們將依此來評判你的應(yīng)用程序的好壞。

關(guān)鍵字:IIS、服務(wù)器、虛擬內(nèi)存

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項(xiàng)備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機(jī)打開網(wǎng)站