• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 我所理解的性能測試是什么?(2)

    發表于:2013-03-14來源:碼農博客作者:backtracker點擊數: 標簽:性能測試
    當CPU 開銷更多的時間在system mode,那就說明已經超負荷并且應該嘗試重新調度優先級 當I/O 處理得到增長,CPU 范疇的應用處理將受到影響 ps:對于JAVA應用,C

      當CPU 開銷更多的時間在system mode,那就說明已經超負荷并且應該嘗試重新調度優先級

      當I/O 處理得到增長,CPU 范疇的應用處理將受到影響

      ps:對于JAVA應用,CPU瓶頸可以通過jprofiler監控分析

      內存瓶頸:

      1.查看利用率(free)

      used:已使用多大。

      free:可用有多少。

      Shared:多個進程共享的內存總額。

      Buffers/cached:磁盤緩存的大小。

      2.查看頁交換,swap交換(po,pi,so,si),磁盤IO(vmstat)

      si: 每秒從交換區寫到內存的大小

      so: 每秒寫入交換區的內存大小

      page in :分頁(Page)從磁盤重新回到內存的過程被稱作Page-In

      page out : 分頁(Page)寫入磁盤的過程被稱作Page-Out

      另外在進行頁交換的時候,會產生磁盤IO,還需注意bi,bo

      Bo 磁盤塊頁面從內存到文件或交換設備的總額

      Bi 磁盤塊頁面從文件或交換設備到內存的總額

      3.page fault(pidstat -r,sar -B )

      minflt/s: 每秒次缺頁錯誤次數(minor page faults),次缺頁錯誤次數意即虛擬內存地址映射成物理內存地址產生的page fault次數

      majflt/s: 每秒主缺頁錯誤次數(major page faults),當虛擬內存地址映射成物理內存地址時,相應的page在swap中,這樣的page fault為major page fault,一般在內存使用緊張時產生

      其中sar -B中fault/s表示每秒鐘minflt,majflt的和。

      結論:

      監控虛擬內存性能由以下幾個部分組成:

      1.當系統中出現較少的頁錯誤,獲得最好的響應時間,是因為memory caches(譯注:內存高速緩存)比disk caches更快(譯注:磁盤高速緩存).

      2.較少的空閑內存,是件好事情,那意味著緩存的使用更有效率.除非在不斷的寫入swap device和disk.

      3.如果系統不斷報告,swap device總是繁忙中,那就意味著內存已經不足,需要升級了.

      zee:

      如果用做緩沖區(buff)和快速緩存(Cache)的物理內存不斷地增加,而空閑的物理內存(free)不斷地減少,證明系統中運行的進程正在不斷地消耗物理內存。

      已經使用的虛擬內存(swpd)不斷增加,而且存在著大量的頁面交換(si和so),證明物理內存已經不能滿足系統需求,系統必須把物理內存的頁面交換到磁盤中去。

      由此可以得到這樣的結論:該主機上的物理內存已經不能滿足系統運行的需要,內存已成為該系統性能的一個瓶頸。

      ps:對于java程序,內存瓶頸可以通過heap dump后使用mat分析

      磁盤瓶頸:

      iostat查看IO信息。如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。

      另外還需要注意iowait這個值,iowait 值高就意味著磁盤緩慢或負載過大。還有不要信任svctm這個字段。

      監控swap 和系統分區,要確保virtual memory不是文件系統I/O 的瓶頸.

      ps:磁盤瓶頸可以通過pidstat -d 定位程序

      2.如何理解CPU、內存、磁盤的關系?

      這些子系統之間關系是彼此聯系,相互彼此依賴的

      1.對于進程來說,數據是存放在內存中的,進程的運行需要使用CPU,進程讀寫數據需要跟磁盤打交道。

      2.當內存不足時需要跟磁盤進行頁(page)交換,swap交換,從而產生磁盤IO。po,so釋放物理內存,pi,si增加物理內存使用。交換分頁的過程需要占用cpu時間。 (內存占用過高)

      3.當磁盤IO負載過高時,需要監控swap和系統分區,要確保virtual memory不是文件系統I/O 的瓶頸。磁盤的相當慢的,當iowait 增長,表示CPU花費大量的時間在等待磁盤IO,此時CPU Bound的應用處理將受到影響(磁盤IO過高)

      3.如何理解paging in / paging out ?

      在Linux內存管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的內存調度。調頁算法是將內存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁盤上。

      分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內存的過程被稱作Page-In。當內核需要一個分頁時,但發現此分頁不在物理內存中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。

      當系統內核發現可運行內存變少時,就會通過Page-Out來釋放一部分物理內存。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。

      可以通過vmstat -s 查看 paged in/out 數量

      4.如何監控操作系統的資源?(可用一個操作系統做例子)

      (把簡歷上部分內容直接貼出來了,懶的整理了)

      CPU監控:top(利用率), uptime(運行隊列數), vmstat(上下文切換數), jprofile(方法占用cpu時間百分比)

      內存監控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看對象)

      磁盤監控:iostat(%util), top(iowait%), pidstat -d

      網絡監控:netstat(連接數), nethogs(流量), wireshark和tcpdump(抓包)

      JVM監控:jstat(gc), jmap(堆dump), jstack(線程dump), jprofiler和visualvm(剖析工具)

      nmon(長時間全局收集數據)

      5.如何理解內存管理和線程調度?(可用一個操作系統做例子)

      不會

      6.如何理解上下文切換(context switch)?(可用一個操作系統做例子)

      每個CPU(或多核CPU中每個核心)在同一時間只能執行一個線程,Linux采用搶占式調度。即為每個線程分配一定的執行時間,當到達執行時間,線程中有IO阻塞或高優先級線程要執行時,Linux將切換執行的線程,在切換時要存儲目前線程的執行狀態,并恢復要執行的線程狀態,這個過程稱之為上下文切換。對于java應用,典型的是在進行文件IO操作,網絡IO操作,鎖等待或線程sleep時,當前線程會進入阻塞或者休眠狀態,從而觸發上下文切換,上下文切換過多會造成內核占用過多的CPU使用,使得應用的響應速度下降。

    原文轉自:http://www.neversaydie.cc/the-performance-test-what-i-understand/

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>