2011-02-08 28 views
6

Tôi đang cố gắng xác định có bị rò rỉ bộ nhớ trong ứng dụng web của mình hay không. Tôi đang sử dụng VisualVM và JMeter để tải kiểm tra và xem đống.Trình phân tích bộ nhớ Eclipse - Báo cáo sự cố rò rỉ không trỏ đến các lớp MY - tại sao?

Tôi đã lưu một vùng lưu trữ vào tệp và tải xuống Bộ phân tích bộ nhớ Eclipse ngày hôm qua ... sau nhiều thất vọng với VisualVM, tôi nghĩ Eclipse sẽ xác định sự rò rỉ, nếu có, tốt hơn VisualVM.

Tôi đã mở tệp heap trong Eclipse và chạy cái mà họ gọi là Báo cáo nghi ngờ rò rỉ. Tôi nghĩ rằng nó sẽ trỏ đến một lớp học cụ thể trong webapp của tôi, nhưng nó không. Vì vậy, tôi không có đầu mối làm thế nào để sử dụng các thông tin của nó được cung cấp để tìm ra nơi trong bất kỳ lớp học cụ thể của tôi bị nghi ngờ rò rỉ là.

Đây là kết quả của Báo cáo nghi ngờ rò rỉ cho một trong các tệp kết xuất đống của tôi.

 
One instance of "org.apache.catalina.session.StandardManager" loaded by "org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0" occupies 16,977,376 (48.54%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "". 


Keywords 
org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0 
org.apache.catalina.session.StandardManager 
java.util.concurrent.ConcurrentHashMap$Segment[] 

Phần còn lại của Chi tiết trong báo cáo được hiển thị trong hình ảnh đính kèm. Tôi hy vọng hình ảnh có thể được mở rộng cho một cái nhìn gần hơn .... enter image description here

Tôi biết rằng Eclipse được coi là phần mềm thực sự tốt. Đây là nỗ lực cuối cùng của tôi để sử dụng một cái gì đó như thế này để tìm một rò rỉ bộ nhớ - Tôi chỉ có rất, rất, hạn chế kiến ​​thức trong CÁCH phần mềm này có thể được sử dụng cho như vậy. Các trang hướng dẫn và trợ giúp mô tả mọi thứ như thể bạn nên biết phải làm gì sau vài cú nhấp chuột ... Tôi cần thêm trợ giúp hơn thế.

Trả lời

3

Mặc dù tôi không có bất kỳ kinh nghiệm nào về việc sử dụng Eclipse để tìm rò rỉ, trước tiên tôi sẽ đặt một câu hỏi: Bạn chắc chắn rằng bạn bị rò rỉ bộ nhớ? Từ câu hỏi của bạn, nó không có vẻ như bạn chắc chắn rằng bạn có một rò rỉ, nhưng bạn đang thử nghiệm để xem nếu bạn có một. Cách đơn giản nhất để kiểm tra đó là khởi động ứng dụng của bạn, lưu ý lượng bộ nhớ mà nó tiêu thụ, có JMeter nhấn liên tục trong 24 giờ và xem dung lượng bộ nhớ tiêu thụ (có thể sau khi thực thi GC). Nếu ứng dụng của bạn đang tiêu tốn một phần đáng kể bộ nhớ hoặc đã chết từ OutOfMemoryError thì bạn sẽ bị rò rỉ bộ nhớ.

Nếu bạn thấy rằng bạn thực sự bị rò rỉ bộ nhớ, thì trước tiên tôi sẽ đề nghị chạy ứng dụng của bạn thông qua FindBugs để xem liệu nó có thể tìm thấy rò rỉ bộ nhớ thông qua phân tích tĩnh nhanh hay không. Nếu điều đó không hiệu quả, thì this article (mặc dù nó khá cũ) có thể giúp bạn hiểu các kết quả được Eclipse cung cấp cho bạn.

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