qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          如何從一名測(cè)試員轉(zhuǎn)型為管理人員

          如果你是軟件測(cè)試員或是高級(jí)測(cè)試員,有志轉(zhuǎn)向管理發(fā)展,從技術(shù)方面,那么需要加強(qiáng)以下內(nèi)容,至少要做到幾點(diǎn):
            1. 扎實(shí)的軟件測(cè)試基本功,懂得測(cè)試計(jì)劃的制作與編寫(結(jié)合測(cè)試的項(xiàng)目,能以此來控制和確定測(cè)試所需人員,設(shè)備及時(shí)間)
            2.要熟悉BUG跟蹤工具及軟件測(cè)試流程.(如: QC, Bugzilla, Mantis等)
            3.要熟悉配置管理工具. (如: SVN,CVS, VSS等)
            4.要熟悉自動(dòng)化工具.(例如:QTP, Robot, RFT, Selenium等,能結(jié)合錄制完的腳本編寫代碼)
            5.要熟悉壓力及性能測(cè)試工具.(例如: LoadRunner, webload, silkperformance等,能結(jié)合相關(guān)數(shù)據(jù),分析出性能瓶頸)
            6.要熟悉或精通一門語言. (例如: C#,Java,C++)
            7.要熟悉數(shù)據(jù)庫.(例如:Oracle, DB2, SQLServer, MySQL)
            8.要熟悉至少一種主流操作系統(tǒng). (例如: HP Unix,IBM AIX, Sun Solaris, Red HatLinux, SuSE Linux,Windows)
            9. 必要的英文能力.
            10.語言表達(dá)能力強(qiáng),表達(dá)問題清晰明了.
            11.溝通能力強(qiáng),能和上級(jí)/開發(fā)經(jīng)理很好的達(dá)成測(cè)試相關(guān)/BUG事宜.
            12.學(xué)習(xí)技術(shù)的能力要強(qiáng),能快速上手一個(gè)新的技術(shù),這是做軟件行業(yè)必須的.
            13. 掌握管理技巧與團(tuán)隊(duì)建設(shè),管理不是胡亂的管人.
            14.樂于與人交流.
            當(dāng)然,現(xiàn)在的管理者,很多時(shí)候或者可以分為兩類,一種是對(duì)業(yè)務(wù)和管理熟悉但不懂技術(shù)、另一種是對(duì)管理熟悉但不懂技術(shù)。
            在軟件這一行業(yè),我認(rèn)為做為一個(gè)管理者,非常有必要懂得技術(shù),以技術(shù)做為基礎(chǔ),推進(jìn)開展部門工作,可以更高效快捷,也可以在部門中更令下屬信服,不懂技術(shù)的管理者往往得不到下屬發(fā)自內(nèi)心的信服(特別是在人才濟(jì)濟(jì)的大公司或知名企業(yè)),以上列出的技術(shù)均為軟件測(cè)試行業(yè)通用型的測(cè)試技術(shù),在不同的企業(yè),因業(yè)務(wù)性質(zhì)和業(yè)務(wù)特征的不同,對(duì)技術(shù)的要求也存在一定差異(當(dāng)然,如果具備較強(qiáng)的學(xué)習(xí)能力,這些“個(gè)性化需求”其實(shí)算不上什么)。
            懂技術(shù)的管理,才能走得更遠(yuǎn)!

          posted @ 2014-08-25 10:08 順其自然EVO 閱讀(182) | 評(píng)論 (0)編輯 收藏

          微軟Modern.IE:網(wǎng)站兼容性測(cè)試?yán)?/a>

           面對(duì)瀏覽器生態(tài)不斷加快的技術(shù)步伐,開發(fā)者很難確定自己的網(wǎng)頁能否在瀏覽器上完美兼容。為了解決這一類問題,微軟推出了一套免費(fèi)的瀏覽器測(cè)試工具——旨在簡(jiǎn)化開發(fā)者的網(wǎng)頁測(cè)試工作,提升網(wǎng)頁優(yōu)化效率,讓開發(fā)者將精力放在創(chuàng)新上,讓網(wǎng)頁更加完美地呈現(xiàn)于全新的IE10瀏覽器。
            modern.IE
            用戶只需通過輸入U(xiǎn)RL地址即可并找出所有可能影響瀏覽體驗(yàn)的常見錯(cuò)誤,并且把這些可能會(huì)導(dǎo)致兼容性問題或影響用戶體驗(yàn)的常見錯(cuò)誤羅列出來(推薦閱讀:構(gòu)建現(xiàn)代站點(diǎn)且同時(shí)支持舊版IE的20個(gè)提示)。而這些錯(cuò)誤可體現(xiàn)出如下三類:與舊版IE瀏覽器產(chǎn)生的兼容性問題,在多設(shè)備、跨平臺(tái)上是否能夠正常運(yùn)行,以及與Windows 8新特性的匹配狀況。
            Web掃描工具
            1.解決關(guān)于兼容舊版IE的常見問題
            自從新版的IE9與IE10開始支持HTML5標(biāo)準(zhǔn),而舊版本的IE卻不支持,開發(fā)者通常需要為兩者編寫不同的代碼。這使得測(cè)試不同版本的IE變得非常棘手——比如找出兼容模式下不支持的特性、讓docmode告訴瀏覽器它支持Web標(biāo)準(zhǔn)、不小心使用了一個(gè)過時(shí)的jQuery框架。如果網(wǎng)站在最新版或預(yù)發(fā)行版中會(huì)引發(fā)兼容性問題,modern.IE也會(huì)提示您,使開發(fā)者可以更從容的在不同的版本間規(guī)劃和解決問題。
            已知的兼容性問題(Known compatibility issues)
            兼容模式(Compatibility Mode)
            框架和庫(Frameworks & libraries)
            網(wǎng)絡(luò)標(biāo)準(zhǔn)文檔模式(Web standards docmode)
            2.幫助網(wǎng)站在多種瀏覽器和設(shè)備上正常運(yùn)行
            向?qū)н€包括了一系列最佳實(shí)踐,讓網(wǎng)頁可以適用于日益增加的各種設(shè)備——不論是手機(jī)、臺(tái)式機(jī)、平板電腦,甚至是大屏幕電視。實(shí)施特性檢測(cè)、采用CSS前綴的最佳實(shí)踐編碼、搭建無插件網(wǎng)站、使用響應(yīng)式網(wǎng)頁設(shè)計(jì),都可以減少跨瀏覽器、跨設(shè)備的測(cè)試時(shí)間,并提供更穩(wěn)定的用戶體驗(yàn)。
            CSS 前綴(CSS-prefixes)
            瀏覽器插件(Browser plug-ins)
            響應(yīng)式網(wǎng)頁設(shè)計(jì)(Responsive web design)
            瀏覽器檢測(cè)(Browser detection)
           3.結(jié)合Windows 8中的一些新特性構(gòu)建網(wǎng)站
            這包括觸控瀏覽和“開始”屏幕網(wǎng)站磁貼。開發(fā)者可利用Windows的這些新功能,為用戶提供更加個(gè)性化的瀏覽體驗(yàn)。
            觸控瀏覽(Touch-browsing)
            “開始”屏幕網(wǎng)站磁貼(Start screen site tile)
            如何在多瀏覽器和跨平臺(tái)設(shè)備上對(duì)站點(diǎn)進(jìn)行全面的兼容性測(cè)試,modern.IE內(nèi)置了著名的虛擬網(wǎng)頁兼容性測(cè)試服務(wù)BrowserStack,這樣無論開發(fā)人員使用何種設(shè)備和操作系統(tǒng),都能用它來測(cè)試網(wǎng)頁在不同瀏覽器下的運(yùn)行狀況。不過虛擬前端效果測(cè)試工具BrowserStack只提供3個(gè)月的免費(fèi)使用權(quán),只需在2014年1月31日之前激活即可。
            BrowserStack
            此外,modern.IE還提供Chrome與Firefox下的瀏覽器組件,還有新的Chrome和Firefox加載項(xiàng)和脫機(jī)虛擬機(jī)映像。
            modern.IE工具也考慮到同時(shí)使用Windows PC、Mac和Linux等多環(huán)境下的網(wǎng)頁開發(fā)者,為他們統(tǒng)一提供了本地測(cè)試用的虛擬機(jī)VHD文件。
            例如Windows 8下的Hyper-V/VirtualPC、Mac下的VMWare Fusion/Parallels、Linux下的VirtualBox等一系列豐富的虛擬化工具選擇,旨在讓使用各種平臺(tái)的Web開發(fā)者都能簡(jiǎn)單的參與到IE 10的兼容性測(cè)試中來。

          posted @ 2014-08-25 10:03 順其自然EVO 閱讀(301) | 評(píng)論 (1)編輯 收藏

          Windows下的Memcache安裝與測(cè)試教程

           1、下載memcache for windows
            下載地址:http://splinedancer.com/memcached-win32/,推薦下載binaries版本,
            解壓(本例中解壓到e:memcached-1.2.4)。
            2、安裝memcache,
            在命令行狀態(tài)下輸入: e:/memcached-1.2.4/memcached.exe -d install 。至此memcached已經(jīng)安裝成windows服務(wù)
            3、啟動(dòng)memcache,
            在命令行下輸入: e:/memcached-1.2.4/memcached.exe -d start 以啟動(dòng)memcached服務(wù)。
            或者也可以選擇在windows服務(wù)中啟動(dòng)
            到此,memcache的服務(wù)器端就準(zhǔn)備完畢,接下來需要安裝php的memcache擴(kuò)展,
            php安裝Memcached模塊支持
            1、下載php_memcache.dll模塊,
            你可以從http://downloads.php.net/pierre/找到對(duì)應(yīng)的版本,
            php5.3對(duì)應(yīng)php_memcache-2.2.6-5.3-vc9-x86.zip
            將php_memcache.dll放到php\ext目錄下,
            2、修改php.ini來加入擴(kuò)展,并并重啟apache服務(wù)器
            加入extension=php_memcache.dll、重啟apache服務(wù)器,
            然后查看一下phpinfo,如果有memcache,那么就說明安裝成功!
            測(cè)試windows下的Memcached
            測(cè)試代碼如下:
          <?php
          $mem = new Memcache;
          $mem->connect("127.0.0.1", 11211);
          $mem->set('key', 'Hello Memcached!', 0, 60);
          $val = $mem->get('key');
          echo $val;
          ?>
          Example #1 memcache extension overview example
          In this example, an object is being saved in the cache and then retrieved back. Object and other non-scalar types are serialized before saving, so it's impossible to store resources (i.e. connection identifiers and others) in the cache.
          <?php
          $memcache = new Memcache;
          $memcache->connect('localhost', 11211) or die ("Could not connect");
          $version = $memcache->getVersion();
          echo "Server's version: ".$version."<br/>n";
          $tmp_object = new stdClass;
          $tmp_object->str_attr = 'test';
          $tmp_object->int_attr = 123;
          $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
          echo "Store data in the cache (data will expire in 10 seconds)<br/>n";
          $get_result = $memcache->get('key');
          echo "Data from the cache:<br/>n";
          var_dump($get_result);
          ?>
          Example #2 Using memcache session handler
          <?php
          $session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10,  ,tcp://$host:$port  ";
          ini_set('session.save_handler', 'memcache');
          ini_set('session.save_path', $session_save_path);
          ?>
          memcached的基本設(shè)置:
            -p 監(jiān)聽的端口
            -l 連接的IP地址, 默認(rèn)是本機(jī)
            -d start 啟動(dòng)memcached服務(wù)
            -d restart 重起memcached服務(wù)
            -d stop|shutdown 關(guān)閉正在運(yùn)行的memcached服務(wù)
            -d install 安裝memcached服務(wù)
            -d uninstall 卸載memcached服務(wù)
            -u 以的身份運(yùn)行 (僅在以root運(yùn)行的時(shí)候有效)
            -m 最大內(nèi)存使用,單位MB。默認(rèn)64MB
            -M 內(nèi)存耗盡時(shí)返回錯(cuò)誤,而不是刪除項(xiàng)
            -c 最大同時(shí)連接數(shù),默認(rèn)是1024
            -f 塊大小增長(zhǎng)因子,默認(rèn)是1.25
            -n 最小分配空間,key+value+flags默認(rèn)是48
            -h 顯示幫助
            接口介紹
            Memcache客戶端包含兩組接口,一組是面向過程的接口,一組是面向?qū)ο蟮慕涌?,具體可以參考PHP手冊(cè) “LXXV. Memcache Functions” 這章。
            Memcache面向?qū)ο蟮某S媒涌诎ǎ?/div>
            Memcache::connect — 打開一個(gè)到Memcache的連接
            Memcache::pconnect — 打開一個(gè)到Memcache的長(zhǎng)連接
            Memcache::close — 關(guān)閉一個(gè)Memcache的連接
            Memcache::set — 保存數(shù)據(jù)到Memcache服務(wù)器上
            Memcache::get — 提取一個(gè)保存在Memcache服務(wù)器上的數(shù)據(jù)
            Memcache::replace — 替換一個(gè)已經(jīng)存在Memcache服務(wù)器上的項(xiàng)目(功能類似Memcache::set)
            Memcache::delete — 從Memcache服務(wù)器上刪除一個(gè)保存的項(xiàng)目
            Memcache::flush — 刷新所有Memcache服務(wù)器上保存的項(xiàng)目(類似于刪除所有的保存的項(xiàng)目)
            Memcache::getStats — 獲取當(dāng)前Memcache服務(wù)器運(yùn)行的狀態(tài)
            Memcache::addServer — 分布式服務(wù)器添加一個(gè)服務(wù)器

          posted @ 2014-08-25 09:55 順其自然EVO 閱讀(181) | 評(píng)論 (0)編輯 收藏

          軟件工程師獲得足夠尊重了嗎?

          軟件工程師的日子當(dāng)然是越來越好。”CNet 如是說。招聘網(wǎng)站 Glassdoor 對(duì)此表示同意:軟件工程師的平均工資是85000 美元,舊金山地區(qū)更是達(dá)到六位數(shù) (我個(gè)人覺得還有點(diǎn)低了)。對(duì)軟件工程人才需求的暴漲是眾所周知的。那么,為什么還有人會(huì)認(rèn)為軟件工程師是被踐踏、被鄙視,被剝奪權(quán)利的一個(gè)群體?
            ……其實(shí),他們差不多說準(zhǔn)了一部分。
            一個(gè)名為麥可·O·徹奇(Michael O. Church)的作家就是其中一員。他對(duì)比了同一個(gè)申請(qǐng)者申請(qǐng)“高級(jí)軟件工程師”與“數(shù)據(jù)科學(xué)副總管”(一個(gè)管理職位)兩個(gè)崗位的不同經(jīng)歷。為申請(qǐng)軟件工程師,他需要通過五層嚴(yán)苛的技術(shù)考核,其中任意一層的面試官都有一票否決權(quán)。而申請(qǐng)管理職位則完全不同,面試的問題簡(jiǎn)單多了,他基本上就是在聊天,最后公司往往會(huì)提供不錯(cuò)的職位,甚至還有一筆可觀的安家費(fèi)。徹奇認(rèn)為這種差異的出現(xiàn)就是因?yàn)檐浖こ處煹纳鐣?huì)地位比管理人員低,而即使是管理職位的申請(qǐng)人,只要他們能證明自己的實(shí)力,也和正式的管理人員有相同的地位:
            [作為管理人才],總裁跟比爾(注:文中的申請(qǐng)者)進(jìn)行了平等的對(duì)話。談話沒有居高臨下的家長(zhǎng)式的威嚴(yán),也沒有說“你的職業(yè)生涯在這里起飛”之類的大話。實(shí)際上,這種對(duì)話可不是一個(gè)軟件工程師和一個(gè)百人規(guī)模的高科技公司的首席執(zhí)行官之間能聽到的。
            那么既然這是事實(shí),我們又怎么把這個(gè)問題推到席面上?徹奇一直有個(gè)不好的習(xí)慣,那就是把一些小問題夸張化戲劇化,最后讓它偏離正確的方向,所以他的這篇博文被程序員社區(qū)瘋狂轉(zhuǎn)載,不過他似乎就是喜歡這種感覺。
            事實(shí)上,一些非常成功的企業(yè),特別是 Facebook 和谷歌,都是以工程師文化聞名全球的,他們中間的非常、非常多的工程師都有可能晉升成為高管從而獲得了更大的成功。此外,我已經(jīng)反復(fù)不停地說過,一本正經(jīng)的技術(shù)考核是最沒水平的工程師評(píng)價(jià)系統(tǒng),如果面試官已經(jīng)給面試者設(shè)置了西游記般的重重險(xiǎn)阻(并且這一點(diǎn)意義也沒有),那么要求雙方再保持平等的地位絕對(duì)是不可能了。
            造成這些的原因不止是面試。工程師往往被視為四體不勤的頭腦苦力,他們的語言只有電腦才懂,思維也刻板得像個(gè)電腦,不像商務(wù)人士有資格做出最重要的決策。分析師、產(chǎn)品經(jīng)理、工商管理碩士才是生意的運(yùn)轉(zhuǎn)者,他們賞給工程師物質(zhì),但絕不會(huì)把他們的意見當(dāng)回事,尤其是在管理方面的意見。
            而實(shí)際上,任何稱職的工程師都會(huì)告訴你,為了完成本職工作,他們每天必須不斷地進(jìn)行業(yè)務(wù)決策,只不過是在微觀而不是宏觀層面——這個(gè)數(shù)據(jù)庫字段究竟要多長(zhǎng)?應(yīng)該采用什么數(shù)據(jù)類型?如何進(jìn)行校驗(yàn)?如何處理所有的邊緣情況?這些其實(shí)都是商業(yè)決定,是工程師決定的商業(yè)行為,也是產(chǎn)品經(jīng)理一輩子都做不了的決定,他們有時(shí)候甚至根本不知道什么是技術(shù)上可以實(shí)現(xiàn),什么是不能實(shí)現(xiàn)的。
            誠(chéng)然,優(yōu)秀的管理者要在無休止的信息不對(duì)等情況下做出好的判斷,既要滿足上司的要求,還要保持下屬的愉悅和緊張感,給客戶超出預(yù)期的結(jié)果。這是個(gè)極其困難的工作。你可能會(huì)說(我也可能會(huì)說),優(yōu)秀管理者和優(yōu)秀工程師一樣稀缺,這就是他們的價(jià)值。
            但在這里我不是在討論兩者的價(jià)值比較,而是軟件工程師這個(gè)企業(yè)底層群體在重要決策中被忽視的現(xiàn)實(shí)。我們討論的是工程師被越來越多的人貼上古板、自閉、天真、神經(jīng)大條、見不了大世面的標(biāo)簽。這種想法在“技術(shù)”和“商業(yè)”聯(lián)系越來越緊密的當(dāng)下,無疑是不可想象的。
            同時(shí),那些完全不懂技術(shù)的管理人員勢(shì)必將給公司運(yùn)營(yíng)帶來負(fù)面效應(yīng)。那些從來沒寫過代碼或者焊接過二極管的人不會(huì)真正明白工程師的世界,他們只能盲目相信工程師的選擇。而矛盾的是,這種不對(duì)等導(dǎo)致了更少的尊重,最后導(dǎo)致整個(gè)公司氣氛難以調(diào)和。
            我的結(jié)論?徹奇是對(duì)的,但僅限一些企業(yè),比如那些不了解或不尊重工程師的企業(yè)。如果企業(yè)的業(yè)務(wù)和技術(shù)完全無關(guān),那么看低工程師還算是有一定的理由, 不過當(dāng)下這種企業(yè)幾乎是屈指可數(shù)了。作為軟件工程師,如果你發(fā)現(xiàn)你在供職單位受到的待遇不如商科背景的雇員,甚至被當(dāng)做碼農(nóng)和苦力,那么你一定得好好考慮一下自己的未來了。

          posted @ 2014-08-25 09:50 順其自然EVO 閱讀(170) | 評(píng)論 (0)編輯 收藏

          Linux生成隨機(jī)密碼教程

          通常情況下大家對(duì)于生成密碼都好困惑,一來復(fù)雜程度不夠會(huì)不安全,復(fù)雜程度夠了又不能手動(dòng)隨便敲擊鍵盤打出一同字符(但通常情況下這些字符是有規(guī)律的),使用 1password 或者 keepass 這種軟件生成也可以,不過貌似1password 要收費(fèi),既然這樣我們就玩一下好玩的用 linux 來生成隨機(jī)密碼玩玩吧;
            Linux操作系統(tǒng)的一大優(yōu)點(diǎn)是對(duì)于同樣一件事情,你可以使用高達(dá)數(shù)百種方法來實(shí)現(xiàn)它。例如,你可以通過數(shù)十種方法來生成隨機(jī)密碼。本文將介紹生成隨機(jī)密碼的十種方法。
            1、使用SHA算法來加密日期,并輸出結(jié)果的前32個(gè)字符:
            2、使用內(nèi)嵌的/dev/urandom,并過濾掉那些日常不怎么使用的字符。這里也只輸出結(jié)果的前32個(gè)字符:
            3、用openssl的隨機(jī)函數(shù)
            4、這種方法類似于之前的urandom,但它是反向工作
            5、使用string命令,它從一個(gè)文件中輸出可打印的字符串
            6、這是使用urandom的一個(gè)更簡(jiǎn)單的版本

            7、使用非常有用的dd命令
            8、甚至可以生成一個(gè)只用左手便可以輸入的密碼
            9、如果每次都使用上述某種方法,那更好的辦法是將它保存為函數(shù)。如果這樣做了,那么在首次運(yùn)行命令之后,你便可以在任何時(shí)間只使用randpw就可以生成隨機(jī)密碼。或許你可以把它保存到你的~/.bashrc文件里面
            10、最后這種生成隨機(jī)密碼的方法是最簡(jiǎn)單的。它同樣也可以在安裝了Cygwin的Windows下面運(yùn)行。在Mac OS X下也可以運(yùn)行。我敢肯定會(huì)有人抱怨這種方法生成的密碼沒有其它方法來的隨機(jī)。但實(shí)際上如果你使用它生成的全部字符串作為密碼,那這個(gè)密碼就足夠隨機(jī)了。

          posted @ 2014-08-22 09:53 順其自然EVO 閱讀(306) | 評(píng)論 (0)編輯 收藏

          RAC數(shù)據(jù)庫啟用歸檔和閃回的步驟

           1、RAC數(shù)據(jù)庫調(diào)整為歸檔模式步驟:
          SQL> alter system set cluster_database=false scope=spfile sid='orcl1';
          SQL> alter system set db_recovery_file_dest='+ORAFLASH' scope=spfile;
          SQL> alter system set db_recovery_file_dest_size=20g scope=spfile;
          $ srvctl stop database -d orcl
          $ sqlplus / as sysdba;
          SQL> startup mount;
          SQL> alter database archivelog;
          SQL> alter system set cluster_database=true scope=spfile sid='orcl1';
          SQL> shutdown immediate;
          $ srvctl start database -d orcl
          SQL> select name,log_mode,flashback_on from v$database;
            2、RAC數(shù)據(jù)庫啟動(dòng)閃回特性步驟:
            確認(rèn)數(shù)據(jù)已經(jīng)運(yùn)行在歸檔模式中:
          SQL> archive log list;
          SQL> alter system set cluster_database=false scope=spfile sid='orcl1';
          SQL> alter system set db_recovery_file_dest='+ORAFLASH' scope=spfile;
          SQL> alter system set db_recovery_file_dest_size=20g scope=spfile;
          $ srvctl stop database -d orcl
          SQL> startup mount;
          SQL> alter database flashback on;
          SQL> alter system set cluster_database=true scope=spfile sid='orcl1';
          SQL> shutdown immediate;
          $ srvctl start database -d orcl
            注意:可以根據(jù)需要為特定的表空間打開或關(guān)閉閃回:
            SQL> alter tablespace users flashback on;
            SQL> alter tablespace users flashback off;
            SQL> select name,log_mode,flashback_on from v$database;

          posted @ 2014-08-22 09:52 順其自然EVO 閱讀(186) | 評(píng)論 (0)編輯 收藏

          我們需要什么樣的需求管理工具?

          這篇博文的標(biāo)題是一個(gè)疑問句。在回答這個(gè)問題之前,首先應(yīng)該想到的是:提出這個(gè)問題,實(shí)際上已經(jīng)先認(rèn)定了需求管理工具是必要的。那么,需求管理工具是否真的必要呢?
            這里的“需求”不是個(gè)抽象概念,它指的是需求分析文檔、需求規(guī)格說明文檔這樣的需求分析成果;需求管理就是對(duì)這些成果(包括中間成果)的管理。從這個(gè)角度來看,需求管理工具是必要的,至少在絕大多數(shù)情況下是這樣。根據(jù)經(jīng)驗(yàn),我至少能夠列出以下兩個(gè)理由:
            1、在絕大多數(shù)情況下,需求是復(fù)雜的。
            2、在絕大多數(shù)情況下,需求是變化的。
            需求分析過程往往是這樣的:從用戶關(guān)于系統(tǒng)的一些模糊的、頂層的概念和想法出發(fā),不斷地進(jìn)行明確和分解,形成數(shù)量眾多的需求條目,直到最終成為可以指導(dǎo)開發(fā)的用例。隨著這一過程的進(jìn)行,當(dāng)程序員因?yàn)樾枨笤絹碓角逦鴤涫芄奈钑r(shí),不幸的項(xiàng)目經(jīng)理卻很可能陷入苦惱中:這么多條需求,誰知道是否有遺漏呢?誰知道這些條目之間是否有很緊密的關(guān)聯(lián)呢?如果需求條目比較少,或許項(xiàng)目經(jīng)理還能夠在腦子里把這些問題理清楚;但是如果條目很多,誰又能保證不出錯(cuò)呢?
            需求的變化有多種來源:有可能用戶的想法發(fā)生了改變;有可能用戶的想法并沒有變,但一開始他沒有說清楚,或者我們的理解有誤;實(shí)際上,需求分解本身就意味著我們對(duì)需求的認(rèn)識(shí)在不斷地深入和細(xì)化。
            所以我們可以借助工具管理好需求,以結(jié)構(gòu)化的形式(例如樹形圖、表格等)來組織需求條目,讓項(xiàng)目經(jīng)理能夠比較方便地查看、追蹤、回溯需求分解,理解需求條目之間的關(guān)系。
            所以我們可以借助工具管理好需求,不但要能夠很方便地進(jìn)行“增刪查改”,最好還能像代碼版本控制那樣,對(duì)需求分析的成果也能進(jìn)行版本控制。
            事實(shí)上,在行為驅(qū)動(dòng)開發(fā)(Behavior Driven Development, BDD)或者驗(yàn)收測(cè)試驅(qū)動(dòng)開發(fā)(Acceptance Test Driven Development, ATDD)中,需求與驗(yàn)收測(cè)試代碼最終合二為一,即所謂specification by example。所以對(duì)需求進(jìn)行管理,就像對(duì)代碼進(jìn)行管理一樣,是非常自然的事情。
            那么,什么樣的需求應(yīng)該被工具管理起來呢?
            我們可以把需求分為三類:
            1、功能需求:即系統(tǒng)應(yīng)當(dāng)提供哪些功能,例如“支持在用戶登錄時(shí)進(jìn)行用戶身份認(rèn)證”;
            2、性能需求:即性能方面的指標(biāo),例如“當(dāng)用戶登錄請(qǐng)求并發(fā)數(shù)不大于200時(shí),身份認(rèn)證處理時(shí)延不大于3秒”;
            3、特性:對(duì)某項(xiàng)功能實(shí)現(xiàn)的方式、界面、操作步驟、外觀、接口等進(jìn)行規(guī)定的需求,例如“服務(wù)器與客戶端之間的消息傳輸采用HTTP協(xié)議”。
            性能需求會(huì)對(duì)系統(tǒng)技術(shù)路線的選擇、架構(gòu)設(shè)計(jì)等產(chǎn)生直接的影響,但是通常不易被分解為更細(xì)的條目;特性往往會(huì)體現(xiàn)在某項(xiàng)功能的實(shí)現(xiàn)方式或呈現(xiàn)形式上,通常我們都是把功能需求進(jìn)行分解,并且在分解時(shí)注意把相應(yīng)的特性包括進(jìn)去。因此,實(shí)際上需求管理工具首先應(yīng)該管理的是功能需求。
            所以,為了較好地支持BDD或者ATDD,我覺得需求管理工具至少應(yīng)該具有以下功能:
            一、能夠以樹形圖或表格的方式瀏覽所有需求條目。以下以樹形圖為例進(jìn)行說明:
            1、樹形圖具有唯一的根節(jié)點(diǎn),就是“系統(tǒng)功能需求”,根節(jié)點(diǎn)以下可以有任意多層分支節(jié)點(diǎn);
            2、每個(gè)節(jié)點(diǎn)是一個(gè)需求條目,具有編號(hào)、名稱、說明3項(xiàng)內(nèi)容;
            3、采用多級(jí)編號(hào),編號(hào)能夠體現(xiàn)需求條目之間的邏輯關(guān)系;
            4、如果系統(tǒng)包括多個(gè)子系統(tǒng)(例如多個(gè)軟件),那么第1層分支節(jié)點(diǎn)是系統(tǒng)功能,從第2層分支節(jié)點(diǎn)開始是子系統(tǒng)功能,即第1層分支節(jié)點(diǎn)只把系統(tǒng)功能需求進(jìn)行分解,不按子系統(tǒng)分解;從第2層分支節(jié)點(diǎn)開始,按子系統(tǒng)進(jìn)行分解,第2層分支節(jié)點(diǎn)應(yīng)注明是“客戶端xxx功能”還是“服務(wù)器xxx功能”;
            5、最末端的分支節(jié)點(diǎn)(即葉子節(jié)點(diǎn))采用BDD驗(yàn)收測(cè)試代碼的feature文件的形式(例如cucumber的feature文件);
            6、每個(gè)節(jié)點(diǎn)可以展開(顯示子節(jié)點(diǎn))和收攏(不顯示子節(jié)點(diǎn))。
          樹形圖如下圖所示:
          系統(tǒng)功能需求--+--1.用戶登錄--+--CLIT.1.1客戶端登錄界面
          +              +
          +              +--SERV.1.1服務(wù)器身份認(rèn)證
          +              +
          +              +--SERV.1.2服務(wù)器維護(hù)用戶登錄會(huì)話狀態(tài)
          +
          +--2.XXXX--+--CLIT.2.1XXXX--+--CLIT2.1.1XXXX
          +          +                +
          +          +--CLIT.2.2XXXX  +--CLIT2.1.2XXXX
          +          +
          +          +--SERV.2.1XXXX
          +          +
          +          +--SERV.2.2XXXX--+--SERV2.2.1XXXX--+--SERV2.2.1.1XXXX
          +                           +                 +
          +                           +--SERV2.2.2XXXX  +--SERV2.2.1.2XXXX
          +                           +
          +                           +--SERV2.2.3XXXX
          +--3.XXXX
            二、對(duì)每個(gè)節(jié)點(diǎn)可以進(jìn)行以下操作:
            1、通常的操作有:編輯、添加下級(jí)分支節(jié)點(diǎn)、添加葉子節(jié)點(diǎn)、改變上級(jí)節(jié)點(diǎn)(從而可以改變節(jié)點(diǎn)之間的邏輯關(guān)系);
            2、如果已經(jīng)是葉子節(jié)點(diǎn),則不能再添加下級(jí)。
            三、能夠把所有葉子節(jié)點(diǎn)導(dǎo)出為feature文件,這些feature文件可以直接在測(cè)試代碼中使用。
            1、每個(gè)葉子節(jié)點(diǎn)是一個(gè)單獨(dú)的feature文件;
            2、feature文件分目錄存放,目錄結(jié)構(gòu)與樹形圖的分層結(jié)構(gòu)一致。
            四、能夠把所有節(jié)點(diǎn)導(dǎo)出為一個(gè)文本文件,文本文件的章節(jié)結(jié)構(gòu)與樹形圖的分層結(jié)構(gòu)一致。

          posted @ 2014-08-22 09:51 順其自然EVO 閱讀(213) | 評(píng)論 (0)編輯 收藏

          Java類文件的基本結(jié)構(gòu)

          為旅行而生
            Java類文件(.class文件)是一個(gè)為已編譯Java程序仔細(xì)定義的格式。Java源代碼被編譯成能夠被任何JVM加載和執(zhí)行的類文件。在被JVM加載之前,類文件可能是由網(wǎng)絡(luò)傳輸而來。
            類文件是獨(dú)立于底層平臺(tái)的,所以適用于更多的地方。它們由簡(jiǎn)潔的JVM字節(jié)碼組成,這樣就能輕裝上陣。類文件常常被壓縮,以極快的速度通過網(wǎng)絡(luò),到達(dá)世界各地的JVM。
            類文件里有什么?
            Java類文件包含JVM需要知道的關(guān)于一個(gè)Java類或接口的一切。按照它們的出現(xiàn)次序,主要的部分有:魔法數(shù)(magic),版本號(hào)(version),常量池(constant pool),訪問標(biāo)示符區(qū)(access flags),當(dāng)前類區(qū)(this class),超類區(qū)(super class),父接口區(qū)(interfaces),字段區(qū)(fields),方法列表區(qū)(methods),屬性區(qū)(attributes)。
            保存在類文件中的信息經(jīng)常在長(zhǎng)度上有變化,所以信息的實(shí)際長(zhǎng)度在被加載之前不能被預(yù)測(cè)。例如,在方法區(qū)里的方法數(shù)目,類與類之間是不相同的,這取決于源代碼中定義的方法個(gè)數(shù)。類文件中,這些信息的實(shí)際大小或長(zhǎng)度,被安排在信息內(nèi)容之前。這樣,當(dāng)類文件被JVM加載時(shí),可變信息的長(zhǎng)度首先被讀取。一旦JVM知道信息的大小,它就能正確的讀取實(shí)際的信息內(nèi)容。
            類文件中,不同的相鄰信息之間通常沒有空白或填充字符;一切都以字節(jié)(byte)邊界對(duì)齊。這使得類文件很小,適合網(wǎng)絡(luò)傳輸。
            為了讓JVM在加載類文件時(shí),知道需要什么信息以及從哪里可以取得所需信息,類文件的各個(gè)組成部分的次序是嚴(yán)格定義的。例如,每個(gè)JVM都知道類文件的前8個(gè)字節(jié)由魔法數(shù)和版本號(hào)組成,常量池從第9個(gè)字節(jié)開始,訪問標(biāo)示符區(qū)緊跟在常量池后面。但是,因?yàn)槌A砍氐拈L(zhǎng)度是可變的,在讀取完常量池之前,JVM是不知道訪問標(biāo)示符區(qū)具體從什么地方開始。一旦讀取完常量池,JVM就知道接下來的2個(gè)字節(jié)就是訪問標(biāo)示符區(qū)。
            魔法數(shù)(Magic)和版本號(hào)(Version)
            每個(gè)類文件的開始4個(gè)字節(jié)都是0xCAFEBABE。這個(gè)神奇的數(shù)字讓Java類文件更容易識(shí)別,因?yàn)轭愇募酝獾奈募缀醪豢赡芤惨赃@四個(gè)相同的字節(jié)開頭。之所以稱之為魔法數(shù),是因?yàn)樗梢员晃募袷皆O(shè)計(jì)者們從帽子里拉出來(??)。對(duì)它僅有的要求是,不能被現(xiàn)實(shí)已有的文件格式占用。根據(jù)最初Java團(tuán)隊(duì)主要成員之一的Patrick Naughton所說,遠(yuǎn)在“Java”被當(dāng)作Java語言的名稱之前,這個(gè)神奇的數(shù)字就已經(jīng)被選好了。我們當(dāng)時(shí)在尋找一個(gè)有趣,獨(dú)特并且很容易記住的數(shù)字。0xCAFEBABE作為漂亮的Peet’s Coffee的咖啡師的代稱,能預(yù)示未來Java語言的名字,這完全是一個(gè)巧合。
            類文件接下來的4個(gè)字節(jié)包含了大版本號(hào)(major version)和小版本號(hào)(minor version)。這些數(shù)字標(biāo)識(shí)了特定類文件使用的類文件格式,讓JVM可以驗(yàn)證類文件是否可以被載入。每個(gè)JVM都有一個(gè)它能載入的最大版本號(hào),拒絕加載大于最大版本號(hào)的類文件。
            常量池(Constant Pool)
            類文件在常量池中保存與類或接口關(guān)聯(lián)的常量。常量池中能看到的部分常量是字符串字面值(literal strings),final變量的值(final variable values),類名,接口名,變量名和變量類型,方法名和方法簽名(method names and signatures)。方法簽名由方法返回值類型(return type)和一組參數(shù)類型(argument types)組成。
            常量池被組織成一個(gè)元素長(zhǎng)度可變的數(shù)組。每個(gè)常量占據(jù)數(shù)組中的一個(gè)元素。在整個(gè)類文件中,常量通過指示它們?cè)跀?shù)組中位置的整型索引來引用。第一個(gè)常量的索引值是1,第二個(gè)是2,以此類推。常量池?cái)?shù)組的元素個(gè)數(shù)寫在常量池的前面,所以在加載類文件時(shí),JVM知道它需要加載多少常量。
            常量池中每個(gè)元素以指明自己類型的單字節(jié)標(biāo)簽(tag)開始。一旦JVM看到這個(gè)標(biāo)簽,就能知道接下來會(huì)遇到什么類型的常量。例如,如果看到一個(gè)表示字符串的標(biāo)簽,JVM會(huì)認(rèn)為接下來2個(gè)字節(jié)就是字符串的長(zhǎng)度,然后就是“長(zhǎng)度”個(gè)字節(jié)組成的字符串。
            在本文剩下的部分,我有時(shí)會(huì)用constant_pool[n]表示常量池?cái)?shù)組的第n個(gè)元素。從常量池組織的像個(gè)數(shù)組來說,這是有道理的;但是請(qǐng)記住,這些元素具有不同的大小和類型,并且第一個(gè)元素的索引是1。
            訪問標(biāo)識(shí)符區(qū)(Access Flags)
            常量池之后的2個(gè)字節(jié)就是訪問標(biāo)示符,它表明該文件定義的是類還是接口;該類或接口是公開的(public)還是抽象的(abstract);如果是類,該類是不是final的。
            當(dāng)前類區(qū)(This class)
            接下來2個(gè)字節(jié)是當(dāng)前類區(qū),它是常量池?cái)?shù)組的索引。被當(dāng)前類引用的常量constant_pool[this_class],包含兩部分:?jiǎn)巫止?jié)標(biāo)簽(tag)和雙字節(jié)名稱索引(name index)。標(biāo)簽等于CONSTANT_Class,一個(gè)表示本元素中包含類或接口信息的值。constant_pool[name_index]是一個(gè)包含類或接口名的字符串常量。
            當(dāng)前類部分稍稍揭示了常量池是怎么被使用的。當(dāng)前類區(qū)本身只是一個(gè)常量池的索引。當(dāng)JVM查找constant_pool[this_class]時(shí),它找到一個(gè)用標(biāo)簽表明自己是一個(gè)CONSTANT_Class得元素。JVM知道CONSTANT_Class元素在標(biāo)簽(tag)之后,總是有一個(gè)叫名稱索引(name index)的常量池雙字節(jié)索引。然后它查找constant_pool[name_index],得到包含類或接口名的字符串。
          .超類區(qū)(Super class)
            當(dāng)前類區(qū)之后是超類區(qū),也是2個(gè)字節(jié)的常量池索引。constant_pool[super_class]是CONSTANT_Class元素,它指向當(dāng)前類所直接繼承的超類名。
            接口區(qū)(Interfaces)
            接口區(qū)開頭的2個(gè)字節(jié),表示文件所定義的類(或接口)實(shí)現(xiàn)的接口數(shù)目。緊接著是一個(gè)數(shù)組,它包含了類所實(shí)現(xiàn)的每一個(gè)接口在常量池中的索引。
            每個(gè)接口都是常量池中的CONSTANT_Class元素,它指向接口名。
            字段區(qū)(Fields)
            字段部分,以表示該類或接口包含的字段數(shù)的2個(gè)字節(jié)開始。字段是一個(gè)實(shí)例變量,或者是類或接口的類變量。接下來是一個(gè)以可變長(zhǎng)結(jié)構(gòu)為元素的數(shù)組,一個(gè)結(jié)構(gòu)一個(gè)字段。每個(gè)結(jié)構(gòu)都包含一個(gè)字段的相關(guān)信息,如字段名,字段類型,如果是final變量,還包括字段值。部分信息在結(jié)構(gòu)當(dāng)中,另一部分在常量池中由結(jié)構(gòu)所指向的位置。
            這部分僅有的字段,都是由定義在該類文件中的類或接口聲明的變量;繼承自超類或接口的字段不在此列。
            方法區(qū)(Methods)
            方法部分,以表示類或接口中方法數(shù)目的2字節(jié)開始。這個(gè)數(shù)目,只包含當(dāng)前類顯式定義的方法,不包括繼承自超類的方法。數(shù)目之后是方法本身。
            表示每個(gè)方法的結(jié)構(gòu)包含方法相關(guān)的幾條信息,包括方法描述符(method descriptor,包括返回值類型和參數(shù)列表),方法本地變量需要的棧字(stack words)數(shù),方法操作數(shù)棧(operand stack)需要的最大棧字?jǐn)?shù),方法捕獲的異常表,字節(jié)碼序列和行號(hào)表。
            屬性區(qū)(Attributes)
            排在最后的是屬性區(qū),它提供定義在類文件中的特定類或接口的一般信息。屬性區(qū)以2字節(jié)的屬性數(shù)目開始,然后是屬性本身。比如一個(gè)表示源碼屬性的屬性:它表示當(dāng)前類被編譯而來的源文件名。JVM會(huì)悄悄地忽略任何它們識(shí)別不了的屬性。

          posted @ 2014-08-22 09:51 順其自然EVO 閱讀(206) | 評(píng)論 (0)編輯 收藏

          Junit指定運(yùn)行的測(cè)試方法

          public static Test suite()
          {
          //以下是用來增加單個(gè)測(cè)試用例,測(cè)試用例類的名稱為RunTimeTest
          TestSuite suite = new TestSuite("ALL TEST");     //通過Junit自帶的TestSuite基類創(chuàng)建一個(gè)TestSuite類型的對(duì)象suite
          //以下這句將運(yùn)行RunTimeTest中被指定的方法,如testreValue
          suite.addTest(new RunTimeTest("testreValue")); //將一個(gè)測(cè)試用例類中的特定方法添加到suite中,以便在main函數(shù)中運(yùn)行
          //以下這句將運(yùn)行RunTimeTest中的所有測(cè)試方法
          //suite.addTestSuite(RunTimeTest.class);            //將整個(gè)測(cè)試用例類中的所有方法都添加到suite中,以便在main函數(shù)中運(yùn)行
          //以下這句講運(yùn)行RunTimeTest.suite()中規(guī)定的一組方法
          //suite.addTest(RunTimeTest.suite());                //先將一個(gè)測(cè)試用例類中指定的方法添加到suite中,然后將這一個(gè)suite添加到suite中,以便運(yùn)
          //行這一組方法
          return suite;
          }
          public static void main(String[] args)
          {
          //以下三種方式均可以,具體情況可運(yùn)行以下,看一下結(jié)果
          // junit.textui.TestRunner.run(TestUnit.class);//如果沒有制定特定的suite,則自動(dòng)映射為執(zhí)行用例類中所有的testXXX方法
          // junit.swingui.TestRunner.run(Test.class);
          // junit.awtui.TestRunner.run(Test.class);
          // junit.swingui.TestRunner.run(TestUnit.class);
          junit.textui.TestRunner.run(suite());               //運(yùn)行測(cè)試用例類中添加到suite中的方法
          }
          }

          posted @ 2014-08-22 09:43 順其自然EVO 閱讀(381) | 評(píng)論 (0)編輯 收藏

          碼農(nóng)的性能測(cè)試

           1.如何理解TPS
            性能指標(biāo)的一個(gè)重要因素。TPS(Transaction Per Second,每秒事物數(shù)),單位時(shí)間內(nèi)完成的事物的數(shù)量。TPS的計(jì)算一般是通過的事物除以時(shí)間。
            TPS是跟測(cè)試腳本中事物(Transaction)相關(guān)聯(lián)的。
            在性能測(cè)試工具中,吞吐量也被稱之為TPS(Transaction Per Second,每秒事物數(shù))。吞吐量直接體現(xiàn)系統(tǒng)性能的承載能力,是指單位時(shí)間內(nèi)處理的客戶請(qǐng)求的數(shù)量。其計(jì)量單位可以根據(jù)需求不同而不同,比如請(qǐng)求數(shù)/秒,頁面數(shù)/秒,業(yè)務(wù)數(shù)/小時(shí)(可以說下我們采集項(xiàng)目中吞吐量可以用 解析卡數(shù)/秒)。
            對(duì)于交互式應(yīng)用,用戶直接的體驗(yàn)就是“響應(yīng)時(shí)間”,通過“并發(fā)用戶數(shù)”和“響應(yīng)時(shí)間”可以確定系統(tǒng)的性能規(guī)劃;但對(duì)于非交互式應(yīng)用,用“吞吐量”來描述用戶對(duì)系統(tǒng)的性能期望可能更加合理。
            吞吐量作為性能測(cè)試的主要關(guān)鍵指標(biāo)。吞吐量和并發(fā)用戶數(shù)之前存在著一定的聯(lián)系。在沒有性能瓶頸的時(shí)候,吞吐量隨著虛擬用戶數(shù)的增加而增加(計(jì)算公式為 吞吐量 = (VU個(gè)數(shù) * 每個(gè)VU發(fā)出請(qǐng)求數(shù)) / 單位時(shí)間)。如果性能遇到瓶頸,吞吐量與VU數(shù)理之間就不再符合這個(gè)關(guān)系。
            2.如何理解線程調(diào)用
            線程(thread)是”進(jìn)程”中某個(gè)單一順序的控制流。也被稱為輕量進(jìn)程。
            線程的好處:
            1 創(chuàng)建一個(gè)新線程花費(fèi)的時(shí)間少。
            2.(JAVA中線程具有新的,可運(yùn)行,運(yùn)行,等待/阻塞/休眠,死亡等幾種狀態(tài)。)在未阻塞情況下,兩個(gè)線程(在同一進(jìn)程中的)的切換時(shí)間少。在阻塞情況下,線程間切換將產(chǎn)生上下文切換。
            3.由于同一個(gè)進(jìn)程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。
            4 線程能獨(dú)立執(zhí)行,能充分利用和發(fā)揮處理機(jī)與外圍設(shè)備并行工作的能力。
            使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理
            ps:JAVA中可以通過jstack或者jprofiler dump出線程所執(zhí)行的堆棧信息。
            3.如何理解響應(yīng)時(shí)間
            響應(yīng)時(shí)間反映完成某個(gè)業(yè)務(wù)所需要的時(shí)間。
            在性能測(cè)試中是通過測(cè)試工具的事物函數(shù)來完成響應(yīng)時(shí)間的統(tǒng)計(jì)。事物函數(shù)會(huì)記錄開始事物和結(jié)束事物的時(shí)間差,使用Transaction Response Time這個(gè)詞來說明。
            響應(yīng)時(shí)間主要包括網(wǎng)絡(luò)時(shí)間,服務(wù)器處理時(shí)間,網(wǎng)絡(luò)延遲
            對(duì)于交互式應(yīng)用,用戶直接的體驗(yàn)就是“響應(yīng)時(shí)間”,通過“并發(fā)用戶數(shù)”和“響應(yīng)時(shí)間”可以確定系統(tǒng)的性能規(guī)劃;
            對(duì)于交互式應(yīng)用,響應(yīng)時(shí)間出現(xiàn)拐點(diǎn)系統(tǒng)就可能出現(xiàn)瓶頸
            4.如何理解性能建模(可分類回答)
            這個(gè)不會(huì),之前找到一個(gè)資料,分享一下吧 http://www.docin.com/p-452373613.html
            5.如何理解響應(yīng)時(shí)間,TPS曲線和用戶之間的關(guān)系
            隨著用戶數(shù)量的增加,在未出現(xiàn)瓶頸前響應(yīng)時(shí)間保持穩(wěn)定,TPS值和并發(fā)用戶數(shù)成線性關(guān)系,出現(xiàn)瓶頸后響應(yīng)時(shí)間變長(zhǎng),TPS基本保持不變或開始下降。
            6.在LoadRunner中為何要設(shè)置思考時(shí)間和pacing?
            1)Think time,思考時(shí)間??梢酝ㄟ^設(shè)置思考時(shí)間,來模擬真實(shí)用戶在操作過程中的等待時(shí)間。從定義上來看,think time是在iteration內(nèi)部的某個(gè)action中各個(gè)步驟的間隔時(shí)間。
            2)Pacing,步調(diào)。可以通過設(shè)置兩次迭代(iteration)之間的間隔時(shí)間,來調(diào)整各個(gè)action之間的步調(diào)(或者稱之為節(jié)奏)。
            3)pacing和think time都是可以模擬現(xiàn)實(shí)世界中的停頓。對(duì)于復(fù)雜場(chǎng)景,這個(gè)停頓要靠pacing來完成。不過,pacing怎么設(shè)置才最合適,是需要研究用戶行為才能定的。
           操作系統(tǒng)
            1.如何判斷CPU、內(nèi)存、磁盤的瓶頸?
            CPU瓶頸:
            1) 查看CPU利用率。建議CPU指標(biāo)如下
            a) User Time:65%~70%
            b) System Time:30%~35%
            c) Idle:0%~5%
            如果us,sy高于這個(gè)指標(biāo)可以判斷CPU有瓶頸
            使用top查看
            查看運(yùn)行隊(duì)列
            每個(gè)CPU都會(huì)維持一個(gè)運(yùn)行隊(duì)列,理想情況下,調(diào)度器會(huì)不斷讓隊(duì)列中的進(jìn)程運(yùn)行。進(jìn)程不是處在sleep狀態(tài)就是run able狀態(tài)。如果CPU過載,就會(huì)出現(xiàn)調(diào)度器跟不上系統(tǒng)的要求,導(dǎo)致可運(yùn)行的進(jìn)程會(huì)填滿隊(duì)列。隊(duì)列愈大,程序執(zhí)行時(shí)間就愈長(zhǎng)。“load”用來表示運(yùn)行隊(duì)列,用top 命令我們可以看到CPU一分鐘,5分鐘和15分鐘內(nèi)的運(yùn)行隊(duì)列的大小。這個(gè)值越大表明系統(tǒng)負(fù)荷越大。超過 1.00,那么說明CPU已經(jīng)超出負(fù)荷,交通嚴(yán)重的擁堵。
            使用top或者uptime查看
            查看上下文切換
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對(duì)于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            使用vmstat查看cs
            結(jié)論:
            檢查system的運(yùn)行隊(duì)列,以及確定不要超出每個(gè)處理器3個(gè)可運(yùn)行狀態(tài)線程的限制.
            確定CPU 利用率中user/system比例維持在70/30
            當(dāng)CPU 開銷更多的時(shí)間在system mode,那就說明已經(jīng)超負(fù)荷并且應(yīng)該嘗試重新調(diào)度優(yōu)先級(jí)
            當(dāng)I/O 處理得到增長(zhǎng),CPU 范疇的應(yīng)用處理將受到影響
            ps:對(duì)于JAVA應(yīng)用,CPU瓶頸可以通過jprofiler監(jiān)控分析
            內(nèi)存瓶頸:
            1.查看利用率(free)
            used:已使用多大。
            free:可用有多少。
            Shared:多個(gè)進(jìn)程共享的內(nèi)存總額。
            Buffers/cached:磁盤緩存的大小。
            2.查看頁交換,swap交換(po,pi,so,si),磁盤IO(vmstat)
            si: 每秒從交換區(qū)寫到內(nèi)存的大小
            so: 每秒寫入交換區(qū)的內(nèi)存大小
            page in :分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In
            page out : 分頁(Page)寫入磁盤的過程被稱作Page-Out
            另外在進(jìn)行頁交換的時(shí)候,會(huì)產(chǎn)生磁盤IO,還需注意bi,bo
            Bo 磁盤塊頁面從內(nèi)存到文件或交換設(shè)備的總額
            Bi 磁盤塊頁面從文件或交換設(shè)備到內(nèi)存的總額
            3.page fault(pidstat -r,sar -B )
            minflt/s: 每秒次缺頁錯(cuò)誤次數(shù)(minor page faults),次缺頁錯(cuò)誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)
            majflt/s: 每秒主缺頁錯(cuò)誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生
            其中sar -B中fault/s表示每秒鐘minflt,majflt的和。
            結(jié)論:
            監(jiān)控虛擬內(nèi)存性能由以下幾個(gè)部分組成:
            1.當(dāng)系統(tǒng)中出現(xiàn)較少的頁錯(cuò)誤,獲得最好的響應(yīng)時(shí)間,是因?yàn)閙emory caches(譯注:內(nèi)存高速緩存)比disk caches更快(譯注:磁盤高速緩存).
            2.較少的空閑內(nèi)存,是件好事情,那意味著緩存的使用更有效率.除非在不斷的寫入swap device和disk.
            3.如果系統(tǒng)不斷報(bào)告,swap device總是繁忙中,那就意味著內(nèi)存已經(jīng)不足,需要升級(jí)了.
            zee:
            如果用做緩沖區(qū)(buff)和快速緩存(Cache)的物理內(nèi)存不斷地增加,而空閑的物理內(nèi)存(free)不斷地減少,證明系統(tǒng)中運(yùn)行的進(jìn)程正在不斷地消耗物理內(nèi)存。
            已經(jīng)使用的虛擬內(nèi)存(swpd)不斷增加,而且存在著大量的頁面交換(si和so),證明物理內(nèi)存已經(jīng)不能滿足系統(tǒng)需求,系統(tǒng)必須把物理內(nèi)存的頁面交換到磁盤中去。
            由此可以得到這樣的結(jié)論:該主機(jī)上的物理內(nèi)存已經(jīng)不能滿足系統(tǒng)運(yùn)行的需要,內(nèi)存已成為該系統(tǒng)性能的一個(gè)瓶頸。
            ps:對(duì)于java程序,內(nèi)存瓶頸可以通過heap dump后使用mat分析
            磁盤瓶頸:
            iostat查看IO信息。如果 %util 接近 100%,說明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。
            另外還需要注意iowait這個(gè)值,iowait 值高就意味著磁盤緩慢或負(fù)載過大。還有不要信任svctm這個(gè)字段。
            監(jiān)控swap 和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸.
            ps:磁盤瓶頸可以通過pidstat -d 定位程序
            2.如何理解CPU、內(nèi)存、磁盤的關(guān)系?
            這些子系統(tǒng)之間關(guān)系是彼此聯(lián)系,相互彼此依賴的
            1.對(duì)于進(jìn)程來說,數(shù)據(jù)是存放在內(nèi)存中的,進(jìn)程的運(yùn)行需要使用CPU,進(jìn)程讀寫數(shù)據(jù)需要跟磁盤打交道。
            2.當(dāng)內(nèi)存不足時(shí)需要跟磁盤進(jìn)行頁(page)交換,swap交換,從而產(chǎn)生磁盤IO。po,so釋放物理內(nèi)存,pi,si增加物理內(nèi)存使用。交換分頁的過程需要占用cpu時(shí)間。 (內(nèi)存占用過高)
            3.當(dāng)磁盤IO負(fù)載過高時(shí),需要監(jiān)控swap和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸。磁盤的相當(dāng)慢的,當(dāng)iowait 增長(zhǎng),表示CPU花費(fèi)大量的時(shí)間在等待磁盤IO,此時(shí)CPU Bound的應(yīng)用處理將受到影響(磁盤IO過高)
            3.如何理解paging in / paging out ?
            在Linux內(nèi)存管理中,主要是通過“調(diào)頁P(yáng)aging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動(dòng)頁面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個(gè)進(jìn)程,而不是部分頁面,全部交換到磁盤上。
            分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當(dāng)內(nèi)核需要一個(gè)分頁時(shí),但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁錯(cuò)誤(Page Fault)。
            當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會(huì)通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁的時(shí)間超過運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會(huì)急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。
            可以通過vmstat -s 查看 paged in/out 數(shù)量
            4.如何監(jiān)控操作系統(tǒng)的資源?(可用一個(gè)操作系統(tǒng)做例子)
            (把簡(jiǎn)歷上部分內(nèi)容直接貼出來了,懶的整理了)
            CPU監(jiān)控:top(利用率), uptime(運(yùn)行隊(duì)列數(shù)), vmstat(上下文切換數(shù)), jprofile(方法占用cpu時(shí)間百分比)
            內(nèi)存監(jiān)控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看對(duì)象)
            磁盤監(jiān)控:iostat(%util), top(iowait%), pidstat -d
            網(wǎng)絡(luò)監(jiān)控:netstat(連接數(shù)), nethogs(流量), wireshark和tcpdump(抓包)
            JVM監(jiān)控:jstat(gc), jmap(堆dump), jstack(線程dump), jprofiler和visualvm(剖析工具)
            nmon(長(zhǎng)時(shí)間全局收集數(shù)據(jù))
            5.如何理解內(nèi)存管理和線程調(diào)度?(可用一個(gè)操作系統(tǒng)做例子)
            不會(huì)
            6.如何理解上下文切換(context switch)?(可用一個(gè)操作系統(tǒng)做例子)
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對(duì)于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            vmstat其中cs那一列
            7.如何理解磁盤IO?(可用一個(gè)操作系統(tǒng)做例子)
            磁盤IO速度是非常慢的,linux內(nèi)核就是要盡量降低IO
            內(nèi)存不足時(shí)會(huì)進(jìn)行頁交換,產(chǎn)生磁盤IO
            CPU Bound類型應(yīng)用,當(dāng)磁盤IO過多,iowait過大時(shí)會(huì)影響性能。
           操作系統(tǒng)
            1.如何判斷CPU、內(nèi)存、磁盤的瓶頸?
            CPU瓶頸:
            1) 查看CPU利用率。建議CPU指標(biāo)如下
            a) User Time:65%~70%
            b) System Time:30%~35%
            c) Idle:0%~5%
            如果us,sy高于這個(gè)指標(biāo)可以判斷CPU有瓶頸
            使用top查看
            查看運(yùn)行隊(duì)列
            每個(gè)CPU都會(huì)維持一個(gè)運(yùn)行隊(duì)列,理想情況下,調(diào)度器會(huì)不斷讓隊(duì)列中的進(jìn)程運(yùn)行。進(jìn)程不是處在sleep狀態(tài)就是run able狀態(tài)。如果CPU過載,就會(huì)出現(xiàn)調(diào)度器跟不上系統(tǒng)的要求,導(dǎo)致可運(yùn)行的進(jìn)程會(huì)填滿隊(duì)列。隊(duì)列愈大,程序執(zhí)行時(shí)間就愈長(zhǎng)。“load”用來表示運(yùn)行隊(duì)列,用top 命令我們可以看到CPU一分鐘,5分鐘和15分鐘內(nèi)的運(yùn)行隊(duì)列的大小。這個(gè)值越大表明系統(tǒng)負(fù)荷越大。超過 1.00,那么說明CPU已經(jīng)超出負(fù)荷,交通嚴(yán)重的擁堵。
            使用top或者uptime查看
            查看上下文切換
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對(duì)于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            使用vmstat查看cs
            結(jié)論:
            檢查system的運(yùn)行隊(duì)列,以及確定不要超出每個(gè)處理器3個(gè)可運(yùn)行狀態(tài)線程的限制.
            確定CPU 利用率中user/system比例維持在70/30
            當(dāng)CPU 開銷更多的時(shí)間在system mode,那就說明已經(jīng)超負(fù)荷并且應(yīng)該嘗試重新調(diào)度優(yōu)先級(jí)
            當(dāng)I/O 處理得到增長(zhǎng),CPU 范疇的應(yīng)用處理將受到影響
            ps:對(duì)于JAVA應(yīng)用,CPU瓶頸可以通過jprofiler監(jiān)控分析
            內(nèi)存瓶頸:
            1.查看利用率(free)
            used:已使用多大。
            free:可用有多少。
            Shared:多個(gè)進(jìn)程共享的內(nèi)存總額。
            Buffers/cached:磁盤緩存的大小。
            2.查看頁交換,swap交換(po,pi,so,si),磁盤IO(vmstat)
            si: 每秒從交換區(qū)寫到內(nèi)存的大小
            so: 每秒寫入交換區(qū)的內(nèi)存大小
            page in :分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In
            page out : 分頁(Page)寫入磁盤的過程被稱作Page-Out
            另外在進(jìn)行頁交換的時(shí)候,會(huì)產(chǎn)生磁盤IO,還需注意bi,bo
            Bo 磁盤塊頁面從內(nèi)存到文件或交換設(shè)備的總額
            Bi 磁盤塊頁面從文件或交換設(shè)備到內(nèi)存的總額
            3.page fault(pidstat -r,sar -B )
            minflt/s: 每秒次缺頁錯(cuò)誤次數(shù)(minor page faults),次缺頁錯(cuò)誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)
            majflt/s: 每秒主缺頁錯(cuò)誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生
            其中sar -B中fault/s表示每秒鐘minflt,majflt的和。
            結(jié)論:
            監(jiān)控虛擬內(nèi)存性能由以下幾個(gè)部分組成:
            1.當(dāng)系統(tǒng)中出現(xiàn)較少的頁錯(cuò)誤,獲得最好的響應(yīng)時(shí)間,是因?yàn)閙emory caches(譯注:內(nèi)存高速緩存)比disk caches更快(譯注:磁盤高速緩存).
            2.較少的空閑內(nèi)存,是件好事情,那意味著緩存的使用更有效率.除非在不斷的寫入swap device和disk.
            3.如果系統(tǒng)不斷報(bào)告,swap device總是繁忙中,那就意味著內(nèi)存已經(jīng)不足,需要升級(jí)了.
            zee:
            如果用做緩沖區(qū)(buff)和快速緩存(Cache)的物理內(nèi)存不斷地增加,而空閑的物理內(nèi)存(free)不斷地減少,證明系統(tǒng)中運(yùn)行的進(jìn)程正在不斷地消耗物理內(nèi)存。
            已經(jīng)使用的虛擬內(nèi)存(swpd)不斷增加,而且存在著大量的頁面交換(si和so),證明物理內(nèi)存已經(jīng)不能滿足系統(tǒng)需求,系統(tǒng)必須把物理內(nèi)存的頁面交換到磁盤中去。
            由此可以得到這樣的結(jié)論:該主機(jī)上的物理內(nèi)存已經(jīng)不能滿足系統(tǒng)運(yùn)行的需要,內(nèi)存已成為該系統(tǒng)性能的一個(gè)瓶頸。
            ps:對(duì)于java程序,內(nèi)存瓶頸可以通過heap dump后使用mat分析
            磁盤瓶頸:
            iostat查看IO信息。如果 %util 接近 100%,說明產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。
            另外還需要注意iowait這個(gè)值,iowait 值高就意味著磁盤緩慢或負(fù)載過大。還有不要信任svctm這個(gè)字段。
            監(jiān)控swap 和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸.
            ps:磁盤瓶頸可以通過pidstat -d 定位程序
            2.如何理解CPU、內(nèi)存、磁盤的關(guān)系?
            這些子系統(tǒng)之間關(guān)系是彼此聯(lián)系,相互彼此依賴的
            1.對(duì)于進(jìn)程來說,數(shù)據(jù)是存放在內(nèi)存中的,進(jìn)程的運(yùn)行需要使用CPU,進(jìn)程讀寫數(shù)據(jù)需要跟磁盤打交道。
            2.當(dāng)內(nèi)存不足時(shí)需要跟磁盤進(jìn)行頁(page)交換,swap交換,從而產(chǎn)生磁盤IO。po,so釋放物理內(nèi)存,pi,si增加物理內(nèi)存使用。交換分頁的過程需要占用cpu時(shí)間。 (內(nèi)存占用過高)
            3.當(dāng)磁盤IO負(fù)載過高時(shí),需要監(jiān)控swap和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸。磁盤的相當(dāng)慢的,當(dāng)iowait 增長(zhǎng),表示CPU花費(fèi)大量的時(shí)間在等待磁盤IO,此時(shí)CPU Bound的應(yīng)用處理將受到影響(磁盤IO過高)
            3.如何理解paging in / paging out ?
            在Linux內(nèi)存管理中,主要是通過“調(diào)頁P(yáng)aging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動(dòng)頁面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個(gè)進(jìn)程,而不是部分頁面,全部交換到磁盤上。
            分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當(dāng)內(nèi)核需要一個(gè)分頁時(shí),但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁錯(cuò)誤(Page Fault)。
            當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會(huì)通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁的時(shí)間超過運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會(huì)急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。
            可以通過vmstat -s 查看 paged in/out 數(shù)量
            4.如何監(jiān)控操作系統(tǒng)的資源?(可用一個(gè)操作系統(tǒng)做例子)
            (把簡(jiǎn)歷上部分內(nèi)容直接貼出來了,懶的整理了)
            CPU監(jiān)控:top(利用率), uptime(運(yùn)行隊(duì)列數(shù)), vmstat(上下文切換數(shù)), jprofile(方法占用cpu時(shí)間百分比)
            內(nèi)存監(jiān)控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看對(duì)象)
            磁盤監(jiān)控:iostat(%util), top(iowait%), pidstat -d
            網(wǎng)絡(luò)監(jiān)控:netstat(連接數(shù)), nethogs(流量), wireshark和tcpdump(抓包)
            JVM監(jiān)控:jstat(gc), jmap(堆dump), jstack(線程dump), jprofiler和visualvm(剖析工具)
            nmon(長(zhǎng)時(shí)間全局收集數(shù)據(jù))
            5.如何理解內(nèi)存管理和線程調(diào)度?(可用一個(gè)操作系統(tǒng)做例子)
            不會(huì)
            6.如何理解上下文切換(context switch)?(可用一個(gè)操作系統(tǒng)做例子)
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對(duì)于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            vmstat其中cs那一列
            7.如何理解磁盤IO?(可用一個(gè)操作系統(tǒng)做例子)
            磁盤IO速度是非常慢的,linux內(nèi)核就是要盡量降低IO
            內(nèi)存不足時(shí)會(huì)進(jìn)行頁交換,產(chǎn)生磁盤IO
            CPU Bound類型應(yīng)用,當(dāng)磁盤IO過多,iowait過大時(shí)會(huì)影響性能。

          posted @ 2014-08-22 09:41 順其自然EVO 閱讀(609) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共394頁: First 上一頁 60 61 62 63 64 65 66 67 68 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          • 隨筆 - 3936
          • 文章 - 404
          • 評(píng)論 - 179
          • 引用 - 0

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 修水县| 深泽县| 潜江市| 漳州市| 四平市| 锦屏县| 扶余县| 延津县| 河北省| 中方县| 东乌| 邢台市| 孝义市| 吉林市| 樟树市| 西昌市| 雅江县| 垦利县| 新泰市| 雷州市| 敦化市| 扎兰屯市| 松阳县| 大安市| 富平县| 莱芜市| 含山县| 平凉市| 清远市| 阿合奇县| 姚安县| 集安市| 凤冈县| 太保市| 张家港市| 襄樊市| 独山县| 富宁县| 于田县| 基隆市| 玉田县|