我需要在java中檢查服務器的CPU和內存使用情況,任何人都知道它可以做什麼?如何在Java中檢查CPU和內存使用情況?
回答
如果您使用的是Tomcat,請Psi Probe,它可以讓你監控內部和外部存儲器的消耗,以及其他領域的主機。
Java的Runtime對象可以報告JVM的內存使用情況。對於CPU消耗,您必須使用外部實用程序,如Unix的頂層或Windows進程管理器。
對於內存的使用,下面的工作,
long total = Runtime.getRuntime().totalMemory();
long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
CPU使用率,你需要使用一個外部應用程序來衡量它。
JConsole是監視正在運行的Java應用程序,一個簡單的方法,也可以使用Profiler來得到你的應用程序的更多詳細信息。我喜歡用這個NetBeans Profiler。
如果您使用的是已被張貼在許多答案,這裏的運行時間/ totalMemory解決方案(我已經做了很多),請務必先強行使兩個垃圾收集,如果你想相當準確的/一致的結果。
對於效率芻議Java的通常允許強制GC之前的垃圾填滿了所有的記憶,即使如此,它通常不是一個完整的GC,所以你的結果runtime.freeMemory()始終是「真正」的量之間的某處可用內存和0
第一GC沒有得到一切,它得到大部分。
上升是,如果你只是做freeMemory()調用,你會得到一個絕對無用的數字,並且變化很大,但如果做2 gc的話,它是一個非常可靠的量表。它也會使例行程序更慢(可能是秒)。
如果你專門爲JVM內存尋找:
Runtime runtime = Runtime.getRuntime();
NumberFormat format = NumberFormat.getInstance();
StringBuilder sb = new StringBuilder();
long maxMemory = runtime.maxMemory();
long allocatedMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
sb.append("free memory: " + format.format(freeMemory/1024) + "<br/>");
sb.append("allocated memory: " + format.format(allocatedMemory/1024) + "<br/>");
sb.append("max memory: " + format.format(maxMemory/1024) + "<br/>");
sb.append("total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory))/1024) + "<br/>");
然而,這些應採取只有一個估計...
所以如果我在Eclipse中運行,這將取決於我的Eclipse設置? – Coffee 2013-03-01 02:08:38
由於Java 1.5的JDK配備了一個新的工具:JConsole至極可以顯示任何1.5或更高版本JVM的CPU和內存使用情況。它可以執行這些參數的圖表,導出爲CSV,顯示加載的類的數量,實例的數量,死鎖,線程等等...
YourKit Java Profiler是一個出色的商業解決方案。您可以在CPU profiling和memory profiling的文檔中找到更多信息。
JMX,提供的MXBean(ThreadMXBean的,等等)會給你內存與CPU佔用率。
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
operatingSystemMXBean.getSystemCpuLoad();
如果您使用的是Sun JVM,並有興趣在應用程序(多少您的應用的使用分配的內存),我喜歡打開的JVM內置垃圾的內存使用情況收集日誌。您只需將-verbose:gc添加到啓動命令。
從Sun文檔:
命令行參數-verbose:在每一個 收集GC打印信息。請注意,-verbose:gc輸出的格式會在J2SE平臺的發行版之間發生變化,主題爲 。例如,這裏是一個大型的服務器應用程序 輸出:
[GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.8479984 secs]
這裏我們可以看到兩個小集合和一個主要的一個。數字 前後箭頭
325407K->83000K (in the first line)
後表示活動對象的總大小之前和垃圾收集 後,分別。未成年人集合後,計數包括 對象不一定是活着,但不能被回收,要麼 因爲他們是直接活着,還是因爲他們是內部或 從年老代引用。括號
(776768K) (in the first line)
數量是總的可用空間,而不是在永久 一代,這是總堆減去生存空間的一個計算的空間。 小型收藏大約需要四分之一秒。
0.2300771 secs (in the first line)
欲瞭解更多信息,請參閱:http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
下面是一些簡單的代碼來計算兆內存的使用:
double currentMemory = ((double)((double)(Runtime.getRuntime().totalMemory()/1024)/1024))- ((double)((double)(Runtime.getRuntime().freeMemory()/1024)/1024));
對於Eclipse,你可以使用TPTP(測試和性能工具平臺),用於分析內存使用情況等more information
package mkd.Utils;
import java.io.File;
import java.text.NumberFormat;
public class systemInfo {
private Runtime runtime = Runtime.getRuntime();
public String Info() {
StringBuilder sb = new StringBuilder();
sb.append(this.OsInfo());
sb.append(this.MemInfo());
sb.append(this.DiskInfo());
return sb.toString();
}
public String OSname() {
return System.getProperty("os.name");
}
public String OSversion() {
return System.getProperty("os.version");
}
public String OsArch() {
return System.getProperty("os.arch");
}
public long totalMem() {
return Runtime.getRuntime().totalMemory();
}
public long usedMem() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
public String MemInfo() {
NumberFormat format = NumberFormat.getInstance();
StringBuilder sb = new StringBuilder();
long maxMemory = runtime.maxMemory();
long allocatedMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
sb.append("Free memory: ");
sb.append(format.format(freeMemory/1024));
sb.append("<br/>");
sb.append("Allocated memory: ");
sb.append(format.format(allocatedMemory/1024));
sb.append("<br/>");
sb.append("Max memory: ");
sb.append(format.format(maxMemory/1024));
sb.append("<br/>");
sb.append("Total free memory: ");
sb.append(format.format((freeMemory + (maxMemory - allocatedMemory))/1024));
sb.append("<br/>");
return sb.toString();
}
public String OsInfo() {
StringBuilder sb = new StringBuilder();
sb.append("OS: ");
sb.append(this.OSname());
sb.append("<br/>");
sb.append("Version: ");
sb.append(this.OSversion());
sb.append("<br/>");
sb.append(": ");
sb.append(this.OsArch());
sb.append("<br/>");
sb.append("Available processors (cores): ");
sb.append(runtime.availableProcessors());
sb.append("<br/>");
return sb.toString();
}
public String DiskInfo() {
/* Get a list of all filesystem roots on this system */
File[] roots = File.listRoots();
StringBuilder sb = new StringBuilder();
/* For each filesystem root, print some info */
for (File root : roots) {
sb.append("File system root: ");
sb.append(root.getAbsolutePath());
sb.append("<br/>");
sb.append("Total space (bytes): ");
sb.append(root.getTotalSpace());
sb.append("<br/>");
sb.append("Free space (bytes): ");
sb.append(root.getFreeSpace());
sb.append("<br/>");
sb.append("Usable space (bytes): ");
sb.append(root.getUsableSpace());
sb.append("<br/>");
}
return sb.toString();
}
}
從here
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
int availableProcessors = operatingSystemMXBean.getAvailableProcessors();
long prevUpTime = runtimeMXBean.getUptime();
long prevProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();
double cpuUsage;
try
{
Thread.sleep(500);
}
catch (Exception ignored) { }
operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long upTime = runtimeMXBean.getUptime();
long processCpuTime = operatingSystemMXBean.getProcessCpuTime();
long elapsedCpu = processCpuTime - prevProcessCpuTime;
long elapsedTime = upTime - prevUpTime;
cpuUsage = Math.min(99F, elapsedCpu/(elapsedTime * 10000F * availableProcessors));
System.out.println("Java CPU: " + cpuUsage);
我還要補充以下的方法來跟蹤CPU負載:
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
double getCpuLoad() {
OperatingSystemMXBean osBean =
(com.sun.management.OperatingSystemMXBean) ManagementFactory.
getPlatformMXBeans(OperatingSystemMXBean.class);
return osBean.getProcessCpuLoad();
}
你可以閱讀更多here
- 1. 檢查MySQL CPU使用情況(內部)
- 2. 如何查看/報告Windows Azure CPU和內存使用情況?
- 3. 如何使用Appcelerator在android上檢測CPU和內存使用情況?
- 4. 如何獲得Apache Cordova中的CPU和內存使用情況?
- 5. 如何檢查統一腳本和gameObjects的cpu使用情況?
- 6. 如何測量F#代碼的CPU和內存使用情況?
- 7. 檢查android的內存使用情況anp cpu和應用程序的功耗
- 8. 檢查內存使用情況
- 9. Java - 我如何監視其他進程的內存和CPU使用情況
- 10. Java內存使用情況
- 11. java內存使用情況
- 12. Python - 在窗口中獲取進程名稱,CPU,內存使用情況和峯值內存使用情況
- 13. 如何跟蹤linux中進程的cpu /內存使用情況?
- 14. 如何獲取CPU溫度以及CPU和內存使用情況?
- 15. 如何檢查Elixir中的內存使用情況?
- 16. Java api獲取我的java應用程序的CPU和內存使用情況
- 17. 使用Google Analytics(分析)跟蹤CPU和內存使用情況
- 18. 如何檢查我的應用程序的CPU使用情況?
- 19. 如何使用PowerShell查找CPU和RAM使用情況?
- 20. 如何以編程方式檢查網站cpu使用情況?
- 21. Java問題:MAC操作系統中的內存和CPU使用情況
- 22. 用於測量CPU和內存使用情況的RRD
- 23. 如何通過java進程查找cpu使用情況
- 24. 發佈之前 - 如何檢查內存使用情況?
- 25. 如何使用Prometheus監控Mac上的nodejs cpu和內存使用情況?
- 26. 如何知道使用WMI的進程的CPU和內存使用情況?
- 27. 如何找出Java中的java進程的CPU使用情況
- 28. 在構建期間如何測量CPU,內存和磁盤使用情況?
- 29. 使用JAVA檢查Internet使用情況
- 30. Linux:程序的CPU和內存使用情況
[使用Java來獲得操作系統級的可能重複系統信息](http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information) – 2012-04-25 19:41:36
也許這些鏈接將有所幫助:http://www.javaworld.com/和javaworld/javaqa/2002-11/01-QA-1108-CPU .html http://www.roseindia.net/javatutorials/determining_memory_usage_in_java.shtml – chessguy 2008-09-16 17:19:18