2010-02-24 27 views
9

Tôi muốn tìm hiểu kích thước heap tổng được sử dụng tại một thời điểm nhất định bởi một quá trình Java và tôi phải sử dụng jmap.Tìm kích thước heap hiện tại với jmap

Kết quả của jmap -heap <pid> mang lại cho tôi một cái gì đó như thế này:

 
Attaching to process ID 2899, please wait... 
Debugger attached successfully.    
Server compiler detected.     
JVM version is 14.2-b01      

using thread-local object allocation. 
Parallel GC with 2 thread(s)   

Heap Configuration: 
    MinHeapFreeRatio = 40 
    MaxHeapFreeRatio = 70 
    MaxHeapSize  = 1258291200 (1200.0MB) 
    NewSize   = 1048576 (1.0MB)  
    MaxNewSize  = 4294901760 (4095.9375MB) 
    OldSize   = 4194304 (4.0MB)   
    NewRatio   = 8      
    SurvivorRatio = 8      
    PermSize   = 16777216 (16.0MB)  
    MaxPermSize  = 67108864 (64.0MB)  

Heap Usage: 
PS Young Generation 
Eden Space:   
    capacity = 119013376 (113.5MB) 
    used  = 117277608 (111.84464263916016MB) 
    free  = 1735768 (1.6553573608398438MB) 
    98.54153536489882% used 
From Space: 
    capacity = 131072 (0.125MB) 
    used  = 81920 (0.078125MB) 
    free  = 49152 (0.046875MB) 
    62.5% used 
To Space: 
    capacity = 131072 (0.125MB) 
    used  = 0 (0.0MB) 
    free  = 131072 (0.125MB) 
    0.0% used 
PS Old Generation 
    capacity = 954466304 (910.25MB) 
    used  = 80791792 (77.04905700683594MB) 
    free  = 873674512 (833.2009429931641MB) 
    8.46460390077846% used 
PS Perm Generation 
    capacity = 57671680 (55.0MB) 
    used  = 41699008 (39.76727294921875MB) 
    free  = 15972672 (15.23272705078125MB) 
    72.30413263494319% used 

Tôi có thể sử dụng một công thức cho những giá trị này để tìm hiểu tổng bộ nhớ được sử dụng?

Các đề xuất khác về cách tôi có thể tìm thấy điều này trên Linux được chào đón nhưng jmap được ưu tiên hơn chúng.

Cảm ơn

Trả lời

2

Các mục dưới Heap Usage: được liệt kê các hồ bộ nhớ phân vùng khác nhau trong JVM, cùng với kích thước tối đa của họ, sử dụng và không gian trống. Bạn chỉ có thể thêm các giá trị used: khác nhau, điều đó sẽ cung cấp cho bạn một giá trị hợp lý cho tổng mức sử dụng bộ nhớ, mặc dù có thể có một số chi phí JVM không được tính trong các nhóm được liệt kê.

+0

Chạy 'jmap -heap: format = b ' và phân tích cú pháp tệp kết xuất đống với Công cụ phân tích bộ nhớ từ Eclipse cung cấp cho tôi tổng mức sử dụng 22Mb. Tôi không thể tìm cách thu được tổng giá trị tương tự ... – fmoga

+0

@MelmanRo: Tôi đoán là công cụ nhật thực đã xóa tất cả các đối tượng không thể truy cập (tức là rác được thu thập) từ phép tính, đây là một phép tính những gì kích thước heap * sẽ * được nếu một quét GC đầy đủ đã được chạy. Tôi duy trì rằng việc sử dụng bộ nhớ hệ điều hành * thực tế * hiện tại là tổng số các nhóm khác nhau như tôi đã mô tả. – skaffman

+0

Đây có phải là nguồn gốc của sự khác biệt lớn như vậy không? – fmoga

3

nếu bạn đang cố gắng so sánh với thứ gì đó như jconsole hoặc jvisualvm với cửa sổ chính hiển thị 'sử dụng toàn bộ heap' tôi phát hiện ra rằng bằng cách thêm 'không gian eden đã sử dụng' và 'không gian thế hệ cũ được sử dụng ps' những gì biểu đồ đó hiển thị trong các chương trình nói trên - đó là những gì tôi có xu hướng đi bây giờ

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