2012-05-28 38 views
0

嗨:我有一個擁有10,000個Junit測試用例的應用程序。上週,當我添加新的代碼時,我注意到有很多Java堆內存單元測試用例錯誤。 1)一種方法是重新檢查我添加的代碼。 2)我在單元測試的情況下連接JVM,然後得到堆轉儲。有人能給我提示如何在2)情況下做?在mvn測試期間連接JVM

我使用windows,maven,J2SE。

基本上我知道我會給Java命令什麼樣的參數,但我不會把這些參數放在pom xml中。

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
</plugin> 
+0

您可以通過使用JVisualVM與JDK一起運來分析你的java程序連接到JVM。當你運行JVisualVM時,它會列出你機器上運行的所有java進程。如果你正在不同的機器上運行你的測試,你也可以連接各自的java進程。 – Seshagiri

回答

1

您可以設置JVM屬性-XX:-HeapDumpOnOutOfMemoryError(http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html),把它萬無一失(http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine)
或者,您可以使用jmap按需轉儲進程的內存。
見JPS(用於獲取PID)和JMAP文檔
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html