2012-08-24 19 views
0

我正在執行一個JMX獲取任務的ant腳本:螞蟻 - 打印收藏 - 地圖

<jmx:get 
       name="java.lang:type=GarbageCollector,name=Copy" 
       attribute="LastGcInfo" 
       resultproperty="CopyLastGcInfo" 
       /> 

現在,LastGcInfo屬性有一個名爲memoryUsageBeforeGC地圖的地圖。在這張地圖上有一對鑰匙叫做「價值」。 Althoug我無法將其引出並打印出來。我試圖做到這一點:

<echo>${CopyLastGcInfo.memoryUsageBeforeGc.value.used}</echo> 
    <echo>${CopyLastGcInfo.memoryUsageBeforeGc.0.used}</echo> 
    <echo>${CopyLastGcInfo.memoryUsageBeforeGc.used}</echo> 

這沒有奏效。你有什麼建議如何解決這個問題?

謝謝。

+0

您使用的是第三方JMX ANT任務? –

+0

嗨馬克,這是org.apache.catalina.ant.jmx – Janek

回答

1

下面的例子爲我工作:

<project name="Catalina Ant JMX" xmlns:jmx="antlib:org.apache.catalina.ant.jmx" default="jmx"> 

    <target name="jmx" description="Show JMX stats"> 
     <jmx:open host="localhost" port="9012" username="controlRole" password="tomcat"/> 

     <jmx:get name="java.lang:type=GarbageCollector,name=Copy" 
       attribute="LastGcInfo" 
       resultproperty="CopyLastGcInfo" 
       echo="false" 
       /> 

     <echo> 
     memoryUsageBeforeGc 
     =================== 
     Perm Gen.used=${CopyLastGcInfo.memoryUsageBeforeGc.Perm Gen.used} 
     Tenured Gen.used=${CopyLastGcInfo.memoryUsageBeforeGc.Tenured Gen.used} 
     Eden Space.used=${CopyLastGcInfo.memoryUsageBeforeGc.Eden Space.used} 
     Code Cache.used=${CopyLastGcInfo.memoryUsageBeforeGc.Code Cache.used} 
     Survivor Space.used=${CopyLastGcInfo.memoryUsageBeforeGc.Survivor Space.used} 
     </echo> 
    </target> 

</project> 

示例輸出

jmx: 
    [echo] 
    [echo]   memoryUsageBeforeGc 
    [echo]   =================== 
    [echo]   Perm Gen.used=9660888 
    [echo]   Tenured Gen.used=8393792 
    [echo]   Eden Space.used=4456448 
    [echo]   Code Cache.used=2038016 
    [echo]   Survivor Space.used=172784 
    [echo]   

注意

  • 的 「JMX:查詢」 的 「回聲」 屬性任務可以用於查看任務創建的ANT屬性和值。用於故障排除。
+0

請注意,這些表達式中使用的世代的名稱是特定於JVM的,並且*可以*在不同版本之間更改(即使是在較小的更新中也是如此!)。 –

+0

@JoachimSauer同意。這就是爲什麼我提到使用「echo」屬性來查看由ANT任務創建的實際屬性。 –