当前位置: 首页 > 面试题库 >

您可以使用Java获得基本的GC统计信息吗?

史高阳
2023-03-14
问题内容

我想让一些长时间运行的服务器应用程序以Java定期输出常规GC性能数字,例如与Runtime.freeMemory()等效的GC等,诸如完成的周期数,平均时间等。

我们有在客户计算机上运行的系统,其中怀疑配置错误的内存池会导致过多的GC频率和长度-在我看来,定期报告基本的GC活动通常是很好的。

有没有平台独立的方法可以做到这一点?

编辑:我特别想在运行时将此数据输出到系统日志(控制台)。 这不是我想要连接到JVM的东西,就像使用JConsole或JVisualVM一样。

Edit2:MX bean看起来像我想要的-有人有工作代码示例获取其中之一吗?


问题答案:

这是一个[GarbageCollectorMXBean](http://java.sun.com/javase/6/docs/api/java/lang/management/GarbageCollectorMXBean.html)用于打印GC统计信息的示例。大概您会定期调用此方法,例如使用进行调度[ScheduledExecutorService](http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html)

public void printGCStats() {
    long totalGarbageCollections = 0;
    long garbageCollectionTime = 0;

    for(GarbageCollectorMXBean gc :
            ManagementFactory.getGarbageCollectorMXBeans()) {

        long count = gc.getCollectionCount();

        if(count >= 0) {
            totalGarbageCollections += count;
        }

        long time = gc.getCollectionTime();

        if(time >= 0) {
            garbageCollectionTime += time;
        }
    }

    System.out.println("Total Garbage Collections: "
        + totalGarbageCollections);
    System.out.println("Total Garbage Collection Time (ms): "
        + garbageCollectionTime);
}


 类似资料:
  • In Paris they simply stared when I spoke to them in French. I never did succeed in making those idiots understand their language. — Mark Twain 当地的知识是非常有用的。通常在 Puppet 的配置清单中,你需要知道一些所在机器的本地信息。 Puppet 的发

  • 问题内容: 我在Intranet上有一个PHP Web应用程序,可以在该页面上提取当前用户的IP和主机名,但是我想知道是否还有一种方法来获取/提取其Active Directory / Windows用户名。这可能吗? 问题答案: 检查请求变量。如果您的Web应用程序允许匿名访问,则此字段为空,但是如果您的服务器使用的是基本身份验证或Windows集成身份验证,则它将包含已验证用户的用户名。 在A

  • V2Ray 提供了一些关于其运行状况的统计信息。 StatsObject StatsObject 对应配置文件中的stats项。 { } 目前统计信息没有任何参数,只要StatsObject项存在,内部的统计即会开启。同时你还需要在 Policy 中开启对应的项,才可以统计对应的数据。 目前已有的统计信息如下: 用户数据 user>>>[email]>>>traffic>>>uplink 特定用

  • 在一个货架上有 5 件商品,编写程序,在输入商品价格之后输出最高价格、总价格和平均价格。 首先要创建一个包含 5 个空元素的价格数组,然后使用 for 循环使用户从控制台录入商品的价格,并将价格保存至数组中,再使用一个 for 循环来遍历该数组,求出最高价格和总价格。最后用总价格除以商品数量算出平均价格。 该程序运行后的结果如下所示。

  • 问题内容: 有谁知道如何获取当前的主板,处理器或高清温度统计信息? 在GNU / Linux中,我知道我可以使用诸如hddtemp或感测器之类的信息来获取信息,然后对其进行解析…但是在Windows中:我该怎么做?并且,可以使用C#或Java或任何其他高级编程语言来完成吗? 谢谢! 问题答案: 温度和其他监视传感器的问题在于,在硬件级别上没有通用协议,也没有驱动程序允许使用通用API检索该信息。

  • 我的spark应用程序正在我们内部实验室的远程机器上运行。为了分析远程应用程序的内存消耗,通过使用本地机器的“附加模式”(在jpenable的帮助下)将远程应用程序pid附加到JProfiler。 将远程应用程序连接到本地机器中的JProfiler后,JProfiler仅显示远程机器内存消耗的5%,但当我们在远程Centos机器上运行“top”命令时,“top”命令显示内存消耗的72%。我无法找到