日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

在Java應(yīng)用程序中監(jiān)視CPU的使用

瀏覽:34日期:2024-06-19 11:00:40
內(nèi)容: 怎樣在Java中得到CPU的使用情況呢?這兒同時有一個好消息和一個壞消息。壞消息是不能使用純Java的方法得到CPU的使用。沒有這方面的直接的API。一個建議的替代方法是通過Runtime.exec()確定JVM的進程ID(PID),調(diào)用外部的、平臺相關(guān)的命令,例如ps,然后在運行結(jié)果中解析出感興趣的PID。但是,這種方法并不理想。 好消息是,可以采用一個更為可靠的方案:跳出Java,寫幾行C代碼,然后通過JNI進行整合。下面我將向你展示編寫一個Win32平臺的簡單的JNI庫是多么簡單。 一般來說,JNI有點復(fù)雜。但是,如果你僅僅單向調(diào)用--從Java調(diào)用本地代碼,并且僅使用基本型進行通訊--事情還是很簡單的。有許多JNI方面的學習資料,所以這兒我就不介紹JNI的基礎(chǔ)了。我僅介紹我的實現(xiàn)步驟。一、在Java中聲明JNI方法開始,我創(chuàng)建一個聲明了本地方法的類com.vladium.utils.SystemInformation,該方法返回當前進程已使用的CPU的毫秒數(shù)。public staticnative long getProcessCPUTime();使用JDK內(nèi)置的javah工具產(chǎn)生將來本地代碼實現(xiàn)使用的C頭。JNIEXPORT jlong JNICALLJava_com_vladium_utils_SystemInformation_getProcessCPUTime (JNIEnv * env, jclass cls)二、本地方法實現(xiàn)在大多數(shù)的Win32平臺上,該方法可以使用GetProcessTimes()系統(tǒng)調(diào)用實現(xiàn),差不多僅需要3行代碼就可以了:JNIEXPORT jlong JNICALLJava_com_vladium_utils_SystemInformation_getProcessCPUTime (JNIEnv * env, jclass cls){ FILETIME creationTime, exitTime, kernelTime, userTime; GetProcessTimes (s_currentProcess, & creationTime, & exitTime, & kernelTime, & userTime); return (jlong) ((fileTimeToInt64 (& kernelTime) + fileTimeToInt64 (& userTime)) / (s_numberOfProcessors * 10000));}該方法首先累加用于執(zhí)行當前進程的核心和用戶代碼耗費的時間,除以處理器的數(shù)目,并把結(jié)果轉(zhuǎn)換到毫秒。fileTimeToInt64()是一個輔助函數(shù),用于把FILETIME結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換為64位的整數(shù)。s_currentProcess 和 s_numberOfProcessors是全局變量,當JVM裝載本地庫時即初始化。static HANDLE s_currentProcess;static int s_numberOfProcessors;JNIEXPORT jint JNICALLJNI_OnLoad (JavaVM * vm, void * reserved){ SYSTEM_INFO systemInfo; s_currentProcess = GetCurrentProcess (); GetSystemInfo (& systemInfo); s_numberOfProcessors = systemInfo.dwNumberOfProcessors; return JNI_VERSION_1_2;}注意,如果你在UNIX平臺上實現(xiàn)getProcessCPUTime(),你應(yīng)該以getrusage系統(tǒng)調(diào)用開始。三、調(diào)用本地方法回到Java中,在SystemInformation類中,裝載本地庫(silib.dll on Win32)最好通過靜態(tài)初始化代碼塊完成。 private static final String SILIB = 'silib'; static { try { System.loadLibrary (SILIB); } catch (UnsatisfiedLinkError e) { System.out.println ('native lib '' + SILIB + '' not found in 'java.library.path': ' + System.getProperty ('java.library.path')); throw e; // re-throw } }注意,getProcessCPUTime()返回自JVM進程創(chuàng)建以來使用的CPU時間。就這個數(shù)據(jù)本身而言,對于這兒并沒有太多的用處。我需要更有用的Java方法來記錄不同的時刻的數(shù)據(jù)快照(data snapshots),并報告任何兩個時間點之間CPU的使用。 public static final class CPUUsageSnapshot { private CPUUsageSnapshot (long time, long CPUTime) { m_time = time; m_CPUTime = CPUTime; } public final long m_time, m_CPUTime; } // end of nested class public static CPUUsageSnapshot makeCPUUsageSnapshot () { return new CPUUsageSnapshot (System.currentTimeMillis (), getProcessCPUTime ()); } public static double getProcessCPUUsage (CPUUsageSnapshot start, CPUUsageSnapshot end) { return ((double)(end.m_CPUTime - start.m_CPUTime)) / (end.m_time - start.m_time); }四、一個簡單的CPU監(jiān)視程序“CPU監(jiān)視API基本就完成了!最后,我創(chuàng)建了一個singleton的線程類CPUUsageThread,它自動地每過一個時間間隔(默認是0.5秒)就拍下一個數(shù)據(jù)快照,并報告給所有的CPU使用事件的監(jiān)聽者(Observer模式)。 public void run () { while (! isInterrupted ()) { final SystemInformation.CPUUsageSnapshot snapshot = SystemInformation.makeCPUUsageSnapshot (); notifyListeners (snapshot); try { sleep (sleepTime); } catch (InterruptedException e) { return; } } }CPUmon類是一個示例的監(jiān)聽器,僅簡單地把CPU的使用情況打印輸出到System.out。 public static void main (String [] args) throws Exception { if (args.length == 0) throw new IllegalArgumentException ('usage: CPUmon '); CPUUsageThread monitor = CPUUsageThread.getCPUThreadUsageThread (); CPUmon _this = new CPUmon (); Class app = Class.forName (args [0]); Method appmain = app.getMethod ('main', new Class [] {String[].class}); String [] appargs = new String [args.length - 1] System.arraycopy (args, 1, appargs, 0, appargs.length); monitor.addUsageEventListener (_this); monitor.start (); appmain.invoke (null, new Object [] {appargs}); }另外,為了能夠在啟動要監(jiān)視的應(yīng)用程序之前開始CPUUsageThread,CPUmon.main()包裝了另一個Java主類。作為演示,我運行CPUmon和JDK1.3.1的SwingSet2示例程序(不要忘了把silib.dll安裝到OS的PATH環(huán)境變量或者java.library.path系統(tǒng)屬性所覆蓋的路徑下):>java -Djava.library.path=. -cp silib.jar;(my JDK install dir)demojfcSwingSet2SwingSet2.jar CPUmon SwingSet2[PID: 339] CPU usage: 46.8%[PID: 339] CPU usage: 51.4%[PID: 339] CPU usage: 54.8%(while loading, the demo uses nearly 100% of one of the two CPUs on my machine)...[PID: 339] CPU usage: 46.8%[PID: 339] CPU usage: 0%[PID: 339] CPU usage: 0%(the demo finished loading all of its panels and is mostly idle)...[PID: 339] CPU usage: 100%[PID: 339] CPU usage: 98.4%[PID: 339] CPU usage: 97%(I switched to the ColorChooserDemo panel which ran a CPU-intensiveanimation that used both of my CPUs)...[PID: 339] CPU usage: 81.4%[PID: 339] CPU usage: 50%[PID: 339] CPU usage: 50%(I used Windows NT Task Manager to adjust the CPU affinity for the'java' process to use a single CPU)...當然,我也可以通過任務(wù)管理器查看到CPU使用信息,這兒的要點是現(xiàn)在我們可以以編程方式記錄該信息。對于長時間運行測試和服務(wù)器應(yīng)用診斷程序,遲早會派上用場。本文附帶的完整的庫中添加了其它一些有用的本地方法,其中一個可以得到進程的PID(用于與外部工具整合)。from-javaworld.com javaresearch翻譯 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲高清不卡| 国产伦理久久久久久妇女| 国产激情在线播放| 国产精品一区二区三区av麻| 国产欧美日韩一级| 久久av综合| 国产成人精品一区二区三区在线| 国产一区二区三区日韩精品| 国产在线观看91一区二区三区| 欧美黄页在线免费观看| 国产精品一线| 国产精品流白浆在线观看| 国产精品对白久久久久粗| 老司机精品视频在线播放| 国产精品二区不卡| 日韩精品一区二区三区免费观看| 激情自拍一区| 免费成人在线观看| 欧美亚洲一区二区三区| 麻豆精品国产91久久久久久| 亚洲黄色中文字幕| 欧美日韩国产高清| 日本伊人午夜精品| 精品资源在线| 欧美中文一区二区| 模特精品在线| 国产精品一区二区av日韩在线 | 日韩电影免费在线观看| 亚洲精品一二三区区别| 日韩不卡在线观看日韩不卡视频| 免费在线亚洲欧美| 99久久婷婷这里只有精品| 午夜亚洲一区| 国产精品久久久久毛片大屁完整版| 国内精品伊人| 合欧美一区二区三区| 欧美一区成人| 久久精品91| 日本麻豆一区二区三区视频| 久久精品免视看国产成人| 久久中文字幕av| 婷婷成人av| 日本在线啊啊| 色狠狠一区二区三区| 成人亚洲一区二区| 蜜臀va亚洲va欧美va天堂| 久久久久久久久成人| 婷婷丁香综合| 国产精品一区二区三区美女| 久久精品亚洲欧美日韩精品中文字幕| 亚洲一区欧美| 麻豆视频在线观看免费网站黄 | 尤物精品在线| 国产精品黄网站| 欧美日韩国产高清| 精品网站999| 男女激情视频一区| 色婷婷综合网| 亚洲深深色噜噜狠狠爱网站| 综合日韩av| 日韩欧美在线精品| 国产精品视频一区二区三区 | 麻豆国产欧美一区二区三区 | 日韩一区二区三区免费播放| 婷婷视频一区二区三区| 久久精品导航| 久久伊人国产| 日韩综合一区二区三区| 亚洲福利精品| 国产一区一一区高清不卡| 一区二区国产在线观看| 久久中文亚洲字幕| 精品美女视频| 97成人在线| 亚洲一级在线| 日韩精品免费一区二区三区| 国产精品videossex久久发布| 亚洲免费播放| 国产一区一一区高清不卡| 日韩中文字幕| 不卡视频在线| 色黄视频在线观看| 国产精品白丝久久av网站| 综合国产精品| 91久久久精品国产| 欧美一区久久久| 麻豆成人av在线| 人人爱人人干婷婷丁香亚洲| 老牛影视一区二区三区| 亚洲一级特黄| 日韩成人综合| 国产中文欧美日韩在线 | 日韩欧美一区免费| 久久精品国产久精国产| 日韩一区中文| 久久成人精品| 香蕉国产精品| 久久久久亚洲| 日本不卡免费高清视频在线| 国产精品嫩模av在线| 亚洲精品在线二区| 亚洲欧美日韩国产综合精品二区| 999国产精品999久久久久久| 丁香六月综合| 日韩在线二区| 首页国产精品| 成人国产精品一区二区免费麻豆| 国产精品一区二区三区www| 日韩av一区二区三区| 日韩免费精品| 日本在线视频一区二区| 日韩综合一区二区| 日本精品久久| 欧美精品中文| 国产精品久久免费视频| 麻豆精品少妇| 精品视频在线观看网站| 国产成人精品免费视| 久久精品国产网站| 国产色播av在线| 免费看av不卡| 欧美综合另类| 视频一区欧美日韩| 婷婷成人av| 国产精品亚洲人成在99www| 免费在线观看一区| 美女视频免费精品| 正在播放日韩精品| 欧洲精品一区二区三区| 91精品xxx在线观看| 香蕉人人精品| 狠狠爱成人网| 在线一区二区三区视频| 亚州精品视频| 国产女人18毛片水真多18精品| 国产区精品区| 国产成人免费精品| 亚洲午夜电影| 亚洲人妖在线| 国产欧美午夜| 国产一区二区三区不卡视频网站| 日韩av自拍| 国产综合精品一区| 久久都是精品| 国产精品一区二区三区www| 国产成人黄色| 欧美精品一二| 日韩免费精品| 精品久久网站| 99精品在线观看| 麻豆亚洲精品| 欧美一区久久| 日韩大片在线播放| 模特精品在线| 国产日韩中文在线中文字幕 | 蜜桃视频在线观看一区二区| 国产亚洲欧美日韩在线观看一区二区| 国产精品一区二区三区www| 97精品在线| 一区在线免费观看| 日韩激情啪啪| 日韩高清成人| 亚洲精品大片| 欧美激情99| 99久久亚洲精品蜜臀| 亚洲人www| 国产一区二区三区久久| 亚洲欧洲日本mm| 国产精品第十页| 91成人精品视频| 97久久精品| 欧美午夜精彩| 欧美在线观看天堂一区二区三区| 韩日一区二区| 美女日韩在线中文字幕| 国产精品久久久久久久免费软件| 欧美日韩视频免费观看| 色综合视频一区二区三区日韩 | 国产亚洲一区| 亚洲网站视频| 国产精品激情| 国产精品美女| 精品国产三区在线| 中文不卡在线| 国产欧洲在线| 日韩高清在线不卡| 久久精品动漫| 国产精品扒开腿做爽爽爽软件| 五月婷婷亚洲| 国产成人精品福利| 亚洲ww精品| 久久人人精品| 日本在线一区二区三区| 亚洲福利免费| 精品欧美视频| 日本久久一区| 国产视频一区三区| a天堂资源在线| 欧美日韩国产在线观看网站| 久久香蕉网站|