<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>


    posts - 1,  comments - 20,  trackbacks - 0

    一.   有關Windows平臺下CPU使用率的計算

     

    1. WindowsCPU使用率的定義

    a)         CPU使用率:在任務管理器的刷新周期內CPU忙的時間與整個刷新周期的比值。

    b)         任務管理器默認的刷新周期是1s

     

    2. CPU使用率計算公式

    根據CPU使用率的定義我們可以得出在某一段時間內總的CPU使用率的計算公式:

    sysTime:表示該時間段內總的CPU時間=CPU處于用戶態和內核態CPU時間的總和,即sysTime =kerneTimel + userTime(注:這里并不包括idleTime,因為當CPU處于空閑狀態時,實在內核模式下運行System Idle Process這個進程,所以kernelTime實際上已經包含了idleTime

    idleTime:表示在該時間段內CPU處于空閑狀態的時間;

    CPU% = 1 – idleTime / sysTime * 100      

     

    3. 有關Cpu時間信息的獲取方式:

    基本思想:通過JNI(http://java.sun.com/docs/books/jni/html/jniTOC.html)將底層原生API獲取的有關進程、線程、總的CPU時間等信息回傳給Java,然后上層再根據采集到數據以及以上的公式計算相關的CPU使用率。

     

    涉及到原生API

    說明(有關這些操作系統的原生API可以通過查詢MSDN來進一步了解)

    http://msdn.microsoft.com/en-us/library/default.aspx

    GetSystemInfo

    根據該方法返回的結構體數據結構SystemInfo中的dwNumberOfProcessors可以獲取系統中地CPU個數。

    OpenProcess

    通過該方法可以獲取指定進程ID的進程的句柄。

    GetProcessTimes

    根據OpenProcess方法回帶的進程句柄,可以獲取該進程的userTimekernelTime

    OpenThread

    通過該方法可以獲取指定線程ID的線程的句柄。

    GetThreadTimes

    根據OpenThread方法回帶的進程句柄,可以獲取該線程的userTimekernelTime(注:這里的線程與Java里面的線程示一一對應的)

    GetSystemTimes

    獲取總CPU時間idleTimekernelTimeuserTime(注:在多核情況下得到的是所有CPU的總和)。

     

    4. Windows平臺下CPU使用率的測試

    線程級別CPU使用率監控

    說明:在一臺雙CPU的主機上監控一個包含一個空循環子線程的一個進程。其中每一組數據的格式為:

                                 進程:進程CPU使用率

    線程IDCPU使用率

    測試數據:

    1組數據:

    進程:50[f1] 

       452:0

       3680:50[f2] 

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    2組數據:

    進程:48

       452:0

       3680:48

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    3組數據:

    進程:49

       452:0

       3680:49

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    4組數據:

    進程:50

       452:0

       3680:50

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    5組數據:

    進程:50

       452:0

       3680:50

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    6組數據:

    進程:49

       452:0

       3680:49

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    7組數據:

    進程:48

       452:0

       3680:48

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    8組數據:

    進程:49

       452:0

       3680:49

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    9組數據:

    進程:50

       452:0

       3680:50

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    10組數據:

    進程:48

       452:0

       3680:48

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    11組數據:

    進程:49

       452:0

       3680:49

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

    12組數據:

    進程:49

       452:0

       3680:49

       1712:0

       3620:0

       2860:0

       3000:0

       3800:0

       2112:0

       740:0

       2208:0

     

    數據分析

    1.  監控時所取得采樣周期為1s,因為這個值與任務管理器的刷新頻率一致。

    2.  根據測試用例的的特殊性,被監控進程的CPU使用率在雙CPU環境下被監控進程的CPU使用率的理論值應該為50%

    3.  根據測試用例的的特殊性,被監控進程的理論上應該是包含一個CPU使用率接近50%,而其他線程的CPU使用率接近0

    4.  由以上實際的測試數據,可以知道被監控進程的實際CPU使用率與理論值基本一致

    5.  根據以上測試數據,可知進程中各線程CPU使用率以及進程的CPU用率也符合理論上的分析,都是一個線程的CPU使用率接近50%,而其他線程的CPU使用率接近0

     

    補充說明:

    1.  有關總的CPU使用率監控,由于采集到的數據不具備可比性,所以只能人工的在測試的時候對比程序得到的總的CPU使用率和由任務管理器中得到的CPU使用率。對比的結論是:基本上與任務管理器中得到的數據一致的。

    2.  同理有關進程CPU使用率的監控,也只能人工的通過對比程序得到的進程CPU使用率和任務管理器以及JConsole中的數據。對比的結論是:基本上與任務管理器和JConsole中得到的數據一致的。

    3.  在運行Windows平臺下有關CPU使用率的監控功能,得將Win32CpuTimeUtil.dll這個動態鏈接庫放到java.library.path目錄之下。其中Win32CpuTimeUtil.dll使用C語言實現的。

     

    5.參考文獻:

     http://blog.csdn.net/JPEXE/archive/2008/12/17/3541270.aspx

     http://www.codeproject.com/KB/threads/Get_CPU_Usage.aspx


     [f1]由于是在雙CPU的環境下測試的,所以該進程的CPU使用率為50%(按100%計算的)。

     [f2]3680表示Java線程的NativeThreadID50表示CPU使用率。

    posted on 2010-04-08 22:57 csgeek? 閱讀(8638) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(1)

    文章檔案(5)

    Personal Website

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 91av免费在线视频| 久久综合AV免费观看| 91精品国产亚洲爽啪在线影院| 中文字幕在线免费观看| 国产精品亚洲一区二区在线观看| 亚洲区小说区图片区| 色老头永久免费网站| 又硬又粗又长又爽免费看 | 久久久久亚洲精品无码系列| 亚洲一级免费视频| 一级视频免费观看| 亚洲冬月枫中文字幕在线看| 国产精品亚洲二区在线观看 | 午夜dj在线观看免费视频| 国产精品成人免费观看| 亚洲欧洲另类春色校园网站| 亚洲人JIZZ日本人| 国产国产人免费视频成69大陆| 99热这里只有精品6免费| 日韩在线视精品在亚洲| 亚洲视频国产精品| 久久久久亚洲爆乳少妇无 | 亚洲视频在线一区| 亚洲黄黄黄网站在线观看| 波多野结衣在线免费视频| 好男人资源在线WWW免费| 亚洲国产精品无码久久98| 亚洲精品国产福利在线观看| 久久亚洲2019中文字幕| 成人免费无遮挡无码黄漫视频| 亚欧免费一级毛片| 精品免费久久久久国产一区 | 亚洲国产高清在线| 久久久久国产成人精品亚洲午夜| 免费被黄网站在观看| 日本免费人成在线网站| 日韩精品无码免费专区网站| 欧洲美女大片免费播放器视频| 亚洲综合精品第一页| 亚洲中字慕日产2020| 亚洲高清中文字幕综合网|