Tomcat获取Java堆空间

Tomcat获取Java堆空间,java,tomcat,tomcat7,Java,Tomcat,Tomcat7,有没有一种方法可以通过使用Java代码找到我的Tomcat服务器(7.0.67)的Java堆空间? 我很想用CatalinaProperties.getProperty()获得它,但我不知道堆空间的属性是如何准确调用的。下一步我检查的是catalina.properties文件,但是没有堆空间的条目…这一个得到了我想要的一切: /** * Returns a large bunch of memory information. */ public static

有没有一种方法可以通过使用Java代码找到我的Tomcat服务器(7.0.67)的Java堆空间?


我很想用CatalinaProperties.getProperty()获得它,但我不知道堆空间的属性是如何准确调用的。下一步我检查的是catalina.properties文件,但是没有堆空间的条目…

这一个得到了我想要的一切:

    /**
     * Returns a large bunch of memory information.
     */
    public static String getAllMemoryInformation() {
        StringBuilder b = new StringBuilder();
        b.append("Current PID: "+getPid()+"\n"); //$NON-NLS-1$

        com.sun.management.OperatingSystemMXBean osb =
            (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
        b.append("Physical memory: "+formatMemory(osb.getTotalPhysicalMemorySize())+" total, "+ //$NON-NLS-1$ //$NON-NLS-2$
                formatMemory(osb.getFreePhysicalMemorySize())+" free.\n"); //$NON-NLS-1$
        b.append("Swap space: "+formatMemory(osb.getTotalSwapSpaceSize())+" total, "+ //$NON-NLS-1$ //$NON-NLS-2$
                formatMemory(osb.getFreeSwapSpaceSize())+" free.\n"); //$NON-NLS-1$

        MemoryUsage m = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
        b.append("Heap memory usage: "+formatMemory(m.getInit())+" initial, "+ //$NON-NLS-1$ //$NON-NLS-2$
                                                 formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                                                 formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                                                 formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
        for( MemoryPoolMXBean mpb : ManagementFactory.getMemoryPoolMXBeans() ) {
            if( mpb.getType().equals(MemoryType.HEAP) ) {
                 m = mpb.getUsage();
                b.append("- " + mpb.getName()+" usage: "+formatMemory(m.getInit())+" initial, "+  //$NON-NLS-2$ //$NON-NLS-3$
                        formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                        formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                        formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
            }
        }

        m = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage();
        b.append("Non-Heap memory usage: "+formatMemory(m.getInit())+" initial, "+ //$NON-NLS-1$ //$NON-NLS-2$
                                                     formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                                                     formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                                                     formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
        for( MemoryPoolMXBean mpb : ManagementFactory.getMemoryPoolMXBeans() ) {
            if( mpb.getType().equals(MemoryType.NON_HEAP) ) {
                 m = mpb.getUsage();
                b.append("- " + mpb.getName() + " usage: "+formatMemory(m.getInit())+" initial, "+  //$NON-NLS-2$ //$NON-NLS-3$
                        formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                        formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                        formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
            }
        }
        return b.toString();
    }

我刚刚看到我使用了一些非Java格式的函数,但是答案应该是有用的。

这一个得到了我想要的一切:

    /**
     * Returns a large bunch of memory information.
     */
    public static String getAllMemoryInformation() {
        StringBuilder b = new StringBuilder();
        b.append("Current PID: "+getPid()+"\n"); //$NON-NLS-1$

        com.sun.management.OperatingSystemMXBean osb =
            (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
        b.append("Physical memory: "+formatMemory(osb.getTotalPhysicalMemorySize())+" total, "+ //$NON-NLS-1$ //$NON-NLS-2$
                formatMemory(osb.getFreePhysicalMemorySize())+" free.\n"); //$NON-NLS-1$
        b.append("Swap space: "+formatMemory(osb.getTotalSwapSpaceSize())+" total, "+ //$NON-NLS-1$ //$NON-NLS-2$
                formatMemory(osb.getFreeSwapSpaceSize())+" free.\n"); //$NON-NLS-1$

        MemoryUsage m = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
        b.append("Heap memory usage: "+formatMemory(m.getInit())+" initial, "+ //$NON-NLS-1$ //$NON-NLS-2$
                                                 formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                                                 formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                                                 formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
        for( MemoryPoolMXBean mpb : ManagementFactory.getMemoryPoolMXBeans() ) {
            if( mpb.getType().equals(MemoryType.HEAP) ) {
                 m = mpb.getUsage();
                b.append("- " + mpb.getName()+" usage: "+formatMemory(m.getInit())+" initial, "+  //$NON-NLS-2$ //$NON-NLS-3$
                        formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                        formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                        formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
            }
        }

        m = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage();
        b.append("Non-Heap memory usage: "+formatMemory(m.getInit())+" initial, "+ //$NON-NLS-1$ //$NON-NLS-2$
                                                     formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                                                     formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                                                     formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
        for( MemoryPoolMXBean mpb : ManagementFactory.getMemoryPoolMXBeans() ) {
            if( mpb.getType().equals(MemoryType.NON_HEAP) ) {
                 m = mpb.getUsage();
                b.append("- " + mpb.getName() + " usage: "+formatMemory(m.getInit())+" initial, "+  //$NON-NLS-2$ //$NON-NLS-3$
                        formatMemory(m.getUsed())+" used, "+ //$NON-NLS-1$
                        formatMemory(m.getCommitted())+" committed, "+ //$NON-NLS-1$
                        formatMemory(m.getMax())+" max.\n"); //$NON-NLS-1$
            }
        }
        return b.toString();
    }

我刚刚看到我使用了一些非Java格式的函数,但答案应该是有用的。

还有没有办法获得永久空间?你能解释一下代码的非堆部分吗?有没有办法获得永久空间?你能解释一下代码的非堆部分吗?