我需要检查java中服务器的CPU和内存使用情况,有谁知道怎么做?

===============>>#1 票数:69

如果您正在寻找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/>");

但是,这些应该仅作为估计......

===============>>#2 票数:19

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();
    }
}

===============>>#3 票数:17

如果您正在使用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

===============>>#4 票数:15

这里开始

    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);

===============>>#5 票数:9

JMX,提供的MXBeans(ThreadMXBean等)将为您提供内存和CPU使用。

OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
operatingSystemMXBean.getSystemCpuLoad();

===============>>#6 票数:8

对于内存使用,以下将起作用,

long total = Runtime.getRuntime().totalMemory();
long used  = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

对于CPU使用情况,您需要使用外部应用程序来测量它。

===============>>#7 票数:5

从Java 1.5开始,JDK附带了一个新工具: JConsole可以向您展示任何1.5或更高版本JVM的CPU和内存使用情况。 它可以做这些参数的图表,导出到CSV,显示加载的类数,实例数,死锁,线程等......

===============>>#8 票数:4

如果您使用已在许多答案中发布的runtime / totalMemory解决方案(我已经做了很多),如果您想要相当准确/一致的结果,请务必先强制两个垃圾收集。

为了提高效率,Java通常允许垃圾在强制GC之前填满所有内存,即使这样,它通常也不是完整的GC,因此runtime.freeMemory()的结果总是在“实际”可用内存量和0之间。 。

第一个GC没有得到所有东西,它得到了大部分。

上升的是,如果你只是进行freeMemory()调用,你会得到一个绝对没用并且变化很大的数字,但是如果先做2 gc,它是一个非常可靠的指标。 它还使例程MUCH更慢(可能是秒)。

===============>>#9 票数:3

Java的Runtime对象可以报告JVM的内存使用情况。 对于CPU消耗,您必须使用外部实用程序,如Unix的顶级或Windows Process Manager。

===============>>#10 票数:2

我还将添加以下方法来跟踪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();
}

你可以在这里阅读更多

===============>>#11 票数:2

下面是一些计算当前内存使用量的简单代码,以兆字节为单位:

double currentMemory = ( (double)((double)(Runtime.getRuntime().totalMemory()/1024)/1024))- ((double)((double)(Runtime.getRuntime().freeMemory()/1024)/1024));

===============>>#12 票数:1

如果您使用的是Tomcat,请查看Psi Probe ,它可以监控内部和外部内存消耗以及许多其他区域。

===============>>#13 票数:1

JConsole是一种监视正在运行的Java应用程序的简便方法,您也可以使用Profiler获取有关应用程序的更多详细信息。 我喜欢使用NetBeans Profiler

===============>>#14 票数:1

YourKit Java分析器是一个出色的商业解决方案。 您可以在有关CPU分析内存分析的文档中找到更多信息。

===============>>#15 票数:0

对于Eclipse,您可以使用TPTP(测试和性能工具平台)来分析内存使用情况等更多信息

  ask by Johnny Bou translate from so

未解决问题?本站智能推荐:

1回复

您可以在运行32位操作系统的64位CPU上使用多少内存?

初学者在这里。 cpu表示> 4GB,OS表示<4GB。 答案是什么?
4回复

CPU如何从RAM访问应用程序和数据

在将应用程序加载到RAM中并打开一个文件(因此文件的数据也存储在RAM中)之后,我很难理解CPU如何从RAM中访问应用程序和数据。 据我了解,当程序计数器滴答或在中断后执行任务时,CPU只是从RAM中获取指令。 然后如何访问应用程序和数据。 是不是它仍然只是获得指令(例如,将文件加载到
1回复

CPU,RAM,芯片组/ BIOS,硬件(外围设备)和操作系统

我只想弄清硬件(更确切地说是外设-鼠标,键盘等),操作系统,芯片组/ BIOS,RAM和CPU之间关系的确切顺序: 我的理解:操作:用鼠标单击屏幕上的按钮:1.硬件的任何输入均由设备驱动程序处理(无论是系统ROM BIOS,选件ROM BIOS还是软件驱动程序)。 2.指令从驱动程序发送
2回复

我的操作系统如何获取有关磁盘大小,RAM大小,CPU频率等的信息

我可以从操作系统中看到有关硬盘,RAM和CPU的信息。 但是我从未告诉过我的操作系统这些信息。 我的操作系统怎么知道? 硬盘,CPU或RAM中是否有存储此类信息的地方? 关于这种信息的格式是否有一些标准?
4回复

如何获取Java7应用程序的CPU,RAM和网络使用情况

我发现这篇较旧的文章如何监视计算机 -cpu -memory-and-disk-usage-in-java并且有问题,如果java 7中有新内容我想获得当前的CPU- ,RAM-和netzwork-定期使用我的应用程序。 它必须适用于linux(mac)和windows。 数据不能非常详细,
5回复

使用Java检测CPU速度/内存/ Internet速度?

在Java中是否可以识别可用的总CPU速度以及总系统内存? 网络的网络连接速度也很棒。
1回复

工具/插件来查找Jquery的CPU和内存使用情况

我有一个使用Jquery,css,HTML,json和一些图像开发的应用程序。 该应用程序的问题在于,它在浏览器(Mozila)上运行速度更快,但在实际设备(即烤箱)中运行速度较慢。 在PC上的浏览器中运行应用程序时,我需要了解CPU和Ram的使用情况。 有没有免费的工具或插件可以显示CP
6回复

当JVM执行Java应用程序时,操作系统的作用是什么?为什么我们需要操作系统?

我在互联网上做了一些阅读,有人说Java应用程序是由java虚拟机(JVM)执行的。 “执行”这个词让我感到困惑。 据我所知,操作系统可以执行非Java应用程序(即:用C,C ++编写......)。 在较低级别,这意味着OS将二进制程序加载到内存中,然后指示CPU执行内存中的指令。
1回复

监视基础结构的工具:在仪表板上查看每个IIS应用程序的CPU和RAM使用情况

我试图列出所有可以帮助我监视基础结构的工具。 它由具有多个IIS应用程序的服务器组成。 我的首要目标是能够查阅仪表板,从那里我可以读取每个服务器和每个应用程序的CPU和RAM使用情况。 Bandwith也将很有趣。 我刚刚发现了Nagios ,但是我敢肯定还有很多其他很棒的工
2回复

Windows系统命令找出机器+特定应用程序/ WebApp的CPU / RAM使用情况

我希望确定基于Windows的虚拟机或Server-中当前用于该计算机本身的CPU / RAM,以及该计算机上运行的特定应用程序/网络应用程序的CPU / RAM。 我拥有在该Windows计算机上执行的应用程序/ Web应用程序的详细信息。 该应用程序通常将是一个Web应用程序,并