无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢(xún)熱線(xiàn):0371-60135900 注冊(cè)有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

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

    發(fā)布時(shí)間:  2012/8/9 15:28:03
     下面的每一條戒律都將有效地影響代碼的性能和可伸縮性。換句話(huà)說(shuō),盡可能不要照著戒律去做!下面,我將解釋如何破壞他們以便提高性能和可伸縮性。

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

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

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

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

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

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

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

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

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

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

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

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

    有很多事情是依靠你的線(xiàn)程化結(jié)構(gòu)的。每個(gè)客戶(hù)端一個(gè)線(xiàn)程是絕對(duì)不合適的。因?yàn)閷?duì)于大量用戶(hù)端,它的擴(kuò)展性不好。上下文交換變得難以忍受,Windows NT用盡了資源。線(xiàn)程池模型會(huì)工作得更好,在這種方法中一個(gè)工人線(xiàn)程池將處理一條請(qǐng)求列,因?yàn)閃indows 2000提供了相應(yīng)的APIs,如QueueUserWorkItem。


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

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

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

    有幾種技術(shù)能夠減少鎖競(jìng)爭(zhēng)。

    · 不要過(guò)分保護(hù),也就是說(shuō),不是非常必要不要鎖住數(shù)據(jù)。只有需要時(shí)才去持有鎖,而且時(shí)間不要過(guò)長(zhǎng)。不要在大段代碼周?chē)蝾l繁執(zhí)行的代碼中沒(méi)必要地使用鎖,這一點(diǎn)很重要。

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

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

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

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

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

    高競(jìng)爭(zhēng)導(dǎo)致serialization,serialization導(dǎo)致降低CPU的利用率,這促使用戶(hù)加入更多的線(xiàn)程,結(jié)果事情變得更糟。
    6.不必注意多處理器機(jī)器

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

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

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

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

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

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

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

    - Lord Kelvin (William Thomson)

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

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

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


    本文出自:億恩科技【mszdt.com】

    服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 專(zhuān)注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問(wèn):河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      1
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線(xiàn)