2013-06-13 45 views
8

Tôi cần phải đo lường bao nhiêu bộ nhớ để kiểm tra JUnit của tôi tiêu thụ.Cách để đo mức tiêu thụ bộ nhớ trong khi chạy các kiểm tra JUnit

  1. Vì vậy cách rõ ràng nhất (nhưng không thuận) là chạy JVM với lập luận như "-Xms128m -Xmx512m" và theo dõi khi tôi sẽ nhận được lỗi OutOfMemory.

  2. Cách thứ hai là yêu cầu heapdump sau khi chạy tất cả các thử nghiệm của tôi và sau đó sử dụng Công cụ phân tích bộ nhớ. Nhưng nó không phải là hữu ích để làm điều này mỗi khi tôi chạy thử nghiệm.

Cách mong muốn là ghi lại mức tiêu thụ bộ nhớ vào một tệp có giá trị tiêu thụ bộ nhớ tối đa, mức tiêu thụ trung bình, số cuộc gọi GC, v.v. .

Và câu hỏi đặt ra là, có bất kỳ công cụ hoặc phương pháp hoặc công cụ nào để thực hiện việc này không? Hoặc, có thể, mong muốn của tôi là không thật và ngây thơ và không có cách nào để thu thập dữ liệu đó?

Các thử nghiệm đang chạy dưới IntelliJ Idea với JUnit4. Tôi được tự do sử dụng bất kỳ môi trường nào khác. Cảm ơn trước cho tất cả lời khuyên!

+1

Vâng, nếu bạn sử dụng một số máy chủ Linux hoặc Unix, một cách dễ dàng sẽ làm cho một vỏ giám sát PID của bạn và in ra kích thước bộ nhớ trong khoảng thời gian nhất định. Bạn sẽ phải bắt đầu chương trình với một -Xms thấp và cao -Xmx. Bằng cách này bạn sẽ không giám sát kích thước chính xác của đống đối tượng của bạn, nhưng ít nhất là tiêu thụ thực sự của quá trình của bạn. Một ý tưởng khác xảy ra với tôi là tìm hiểu cách ApplicationServers in thông tin GC để ghi các tệp và xem liệu bạn có thể định cấu hình thiết lập của mình để in "Thông tin GC chi tiết" hay không. Điều này thường bao gồm thông tin chi tiết mà bạn có thể giải thích sau này nếu cần. – Martin

+1

http://www.jvmmonitor.org/ cho Eclipse, hoặc chỉ sử dụng jconsole, v.v. –

+1

Bạn không thể chỉ sử dụng một trình lược tả, nói từ Eclipse? –

Trả lời

7

Bạn có thể sử dụng JConsole,

http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

Nó đi kèm với JDK của bạn

+1

Cảm ơn bạn, JConsole khá hữu ích! Tôi tự hỏi, liệu có thể tự động chạy JConsole và kết nối với quy trình mới được tạo ra với các bài kiểm tra đơn vị không? – sainr

+1

Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ rằng nó không phải là có thể những gì bạn đang đề cập đến. Bạn có thể giới thiệu một sự chậm trễ trong thử nghiệm của bạn để kết nối JConsole với quá trình JUnit của bạn khi thử nghiệm được thực hiện ở lần đầu tiên. Ví dụ '@Test public void delayTestForConnectJC() {Thread.sleep (30 * 1000);}'. Nhưng bạn sẽ phải kết nối thủ công JConsole với quá trình JUnit của bạn. –

+0

Ý tưởng với sự chậm trễ có vẻ thú vị, cảm ơn bạn! Nhưng dù sao đi chăng nữa, tôi sẽ cố tìm thứ gì đó sẽ tự động đi. – sainr

Các vấn đề liên quan