成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

在Java應用程序中監視CPU的使用

瀏覽:3日期:2024-06-19 11:00:40
內容: 怎樣在Java中得到CPU的使用情況呢?這兒同時有一個好消息和一個壞消息。壞消息是不能使用純Java的方法得到CPU的使用。沒有這方面的直接的API。一個建議的替代方法是通過Runtime.exec()確定JVM的進程ID(PID),調用外部的、平臺相關的命令,例如ps,然后在運行結果中解析出感興趣的PID。但是,這種方法并不理想。 好消息是,可以采用一個更為可靠的方案:跳出Java,寫幾行C代碼,然后通過JNI進行整合。下面我將向你展示編寫一個Win32平臺的簡單的JNI庫是多么簡單。 一般來說,JNI有點復雜。但是,如果你僅僅單向調用--從Java調用本地代碼,并且僅使用基本型進行通訊--事情還是很簡單的。有許多JNI方面的學習資料,所以這兒我就不介紹JNI的基礎了。我僅介紹我的實現步驟。一、在Java中聲明JNI方法開始,我創建一個聲明了本地方法的類com.vladium.utils.SystemInformation,該方法返回當前進程已使用的CPU的毫秒數。public staticnative long getProcessCPUTime();使用JDK內置的javah工具產生將來本地代碼實現使用的C頭。JNIEXPORT jlong JNICALLJava_com_vladium_utils_SystemInformation_getProcessCPUTime (JNIEnv * env, jclass cls)二、本地方法實現在大多數的Win32平臺上,該方法可以使用GetProcessTimes()系統調用實現,差不多僅需要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));}該方法首先累加用于執行當前進程的核心和用戶代碼耗費的時間,除以處理器的數目,并把結果轉換到毫秒。fileTimeToInt64()是一個輔助函數,用于把FILETIME結構的數據轉換為64位的整數。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平臺上實現getProcessCPUTime(),你應該以getrusage系統調用開始。三、調用本地方法回到Java中,在SystemInformation類中,裝載本地庫(silib.dll on Win32)最好通過靜態初始化代碼塊完成。 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進程創建以來使用的CPU時間。就這個數據本身而言,對于這兒并沒有太多的用處。我需要更有用的Java方法來記錄不同的時刻的數據快照(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監視程序“CPU監視API基本就完成了!最后,我創建了一個singleton的線程類CPUUsageThread,它自動地每過一個時間間隔(默認是0.5秒)就拍下一個數據快照,并報告給所有的CPU使用事件的監聽者(Observer模式)。 public void run () { while (! isInterrupted ()) { final SystemInformation.CPUUsageSnapshot snapshot = SystemInformation.makeCPUUsageSnapshot (); notifyListeners (snapshot); try { sleep (sleepTime); } catch (InterruptedException e) { return; } } }CPUmon類是一個示例的監聽器,僅簡單地把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}); }另外,為了能夠在啟動要監視的應用程序之前開始CPUUsageThread,CPUmon.main()包裝了另一個Java主類。作為演示,我運行CPUmon和JDK1.3.1的SwingSet2示例程序(不要忘了把silib.dll安裝到OS的PATH環境變量或者java.library.path系統屬性所覆蓋的路徑下):>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)...當然,我也可以通過任務管理器查看到CPU使用信息,這兒的要點是現在我們可以以編程方式記錄該信息。對于長時間運行測試和服務器應用診斷程序,遲早會派上用場。本文附帶的完整的庫中添加了其它一些有用的本地方法,其中一個可以得到進程的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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人一级视频在线观看| 在线午夜精品| 激情综合激情| 久久免费视频色| 国产成人av一区二区三区在线| 在线观看国产一区二区| 亚洲小少妇裸体bbw| 一级成人国产| 亚洲精品伦理在线| 国产精品二区在线观看| 国产欧美日韩激情| 欧美有码视频| 久久影院午夜论| proumb性欧美在线观看| 欧美精品一区二区在线观看| bt欧美亚洲午夜电影天堂| 日韩三级精品电影久久久| 国产剧情一区二区三区| 欧美日韩色综合| 美女视频黄 久久| 一本久久精品一区二区| 日韩中文字幕麻豆| 欧美性大战xxxxx久久久| 久久精品理论片| 欧美日韩免费观看一区二区三区| 美美哒免费高清在线观看视频一区二区| 色婷婷久久久亚洲一区二区三区| 日本亚洲视频在线| 欧美日韩视频在线第一区 | 成人性生交大片免费看在线播放| 日韩视频一区在线观看| 成人免费毛片app| 久久久久久久久蜜桃| 欧美日韩a区| 一区二区三区美女| 久热这里只精品99re8久| 麻豆成人av在线| 91精品午夜视频| www.亚洲色图| 日本一区二区三区视频视频| 影音先锋中文字幕一区| 亚洲成人免费观看| 欧洲亚洲国产日韩| 国产精品亚洲视频| 国产亚洲人成网站| 国产欧美丝祙| 久久精品国产免费| 欧美v亚洲v综合ⅴ国产v| 欧美激情偷拍| 亚洲国产一区二区视频| 欧美日韩中文字幕精品| 成人激情动漫在线观看| 国产精品久久久久影院老司| 美日韩在线观看| 韩国女主播成人在线| 精品国产91洋老外米糕| 在线免费高清一区二区三区| 亚洲激情六月丁香| 色999日韩国产欧美一区二区| 国产中文字幕精品| 久久综合av免费| 国产精品视频| 精品一区二区在线播放| 久久久久99精品一区| 国产情侣一区| 国内一区二区在线| 久久久精品国产免费观看同学| 最新成人av网站| 看片网站欧美日韩| 国产日韩欧美电影| 亚洲综合国产| 国产精品资源在线| 欧美高清在线一区| 久久综合九色99| 不卡一区二区三区四区| 一区二区理论电影在线观看| 欧美夫妻性生活| 亚洲一级影院| 精品一区二区av| 欧美国产精品一区| 麻豆亚洲精品| 成人h精品动漫一区二区三区| 国产精品久久久久久久久免费相片| 色综合久久九月婷婷色综合| 成人在线视频首页| 一区二区三区丝袜| 日韩视频在线一区二区| 亚洲啪啪91| 国产精品综合av一区二区国产馆| 亚洲欧洲日韩女同| 欧美蜜桃一区二区三区| 国内一区二区三区在线视频| 久久99国产乱子伦精品免费| 亚洲国产精品二十页| 在线观看视频91| 很黄很黄激情成人| 国产一区二区精品久久| 亚洲精品午夜久久久| 欧美久久久久久蜜桃| 亚洲精品乱码| 国产麻豆精品theporn| 亚洲色图都市小说| 8x福利精品第一导航| 91久久中文| 成人精品视频网站| 日本怡春院一区二区| 国产精品久久久久久户外露出| 欧美日韩一区二区三区在线看| 国产精品mm| 国产尤物一区二区| 亚洲国产cao| 欧美激情一区二区三区蜜桃视频| 欧美性色aⅴ视频一区日韩精品| 在线精品亚洲一区二区| 国产91高潮流白浆在线麻豆 | 欧美日韩国产一级二级| 日韩视频在线播放| 91在线观看免费视频| 久久av资源网| 亚洲一区二区三区四区在线 | 色先锋资源久久综合| 狠狠色狠狠色综合日日tαg| 国产一区二区三区高清播放| 一级女性全黄久久生活片免费| 久久久91精品国产一区二区三区| 欧美探花视频资源| 亚洲精品一区二| 成人污视频在线观看| 秋霞成人午夜伦在线观看| 亚洲乱码中文字幕综合| 久久久久久久久久久久久女国产乱 | 亚洲少妇30p| www国产亚洲精品久久麻豆| 欧美性受xxxx黑人xyx性爽| 亚洲青涩在线| 欧美日本韩国在线| av亚洲产国偷v产偷v自拍| 国产专区欧美精品| 日本不卡在线视频| 亚洲天堂福利av| 国产丝袜在线精品| 日韩视频中午一区| 欧美日韩一区二区三区高清| 亚洲少妇诱惑| 国语精品中文字幕| 成av人片一区二区| 国产精品2024| 老司机精品视频在线| 亚洲午夜视频在线观看| 亚洲欧美在线视频观看| 久久久精品影视| 欧美成人猛片aaaaaaa| 欧美日韩一区二区在线观看视频 | 国产视频亚洲| 国产精品成人一区二区网站软件| 国产一区二区三区最好精华液| 日韩电影在线一区二区三区| 亚洲午夜精品一区二区三区他趣| 中文字幕免费一区| 久久久久久久久伊人| 精品国内片67194| 日韩欧美高清在线| 91精品国模一区二区三区| 欧美日韩极品在线观看一区| 日本电影亚洲天堂一区| 色欧美乱欧美15图片| 久久综合导航| 午夜综合激情| 麻豆精品传媒视频| 色偷偷88欧美精品久久久| 久久不射中文字幕| 蜜桃久久av| 久久国产精品久久久久久电车| 美女精品在线| 日本精品一区二区三区四区的功能| 久久亚洲一区二区| 久久一日本道色综合久久| 色诱视频网站一区| 日本乱码高清不卡字幕| 色域天天综合网| 欧美性生活影院| 精品视频在线免费观看| 欧美唯美清纯偷拍| 欧美日韩国产123区| 欧美日韩亚洲另类| 欧美片在线播放| 欧美一区日本一区韩国一区| 69堂国产成人免费视频| 91精品国产综合久久香蕉麻豆| 日韩一级大片在线| 精品国产区一区| 国产亚洲成aⅴ人片在线观看| 国产精品成人在线观看| 亚洲精品v日韩精品| 亚洲国产一区二区a毛片| 日韩电影在线免费观看| 久久丁香综合五月国产三级网站| 久久99精品国产.久久久久久| 国产精品99精品久久免费| bt7086福利一区国产|