2013-01-22 28 views
28

Tôi có thể kiểm tra việc sử dụng đống của một JVM đang chạy từ dòng lệnh, ý tôi là việc sử dụng thực tế thay vì số tiền tối đa được phân bổ bằng Xmx.Làm thế nào để kiểm tra việc sử dụng heap của một JVM đang chạy từ dòng lệnh?

Tôi cần nó để được commandline bởi vì tôi không có quyền truy cập vào một môi trường cửa sổ, và tôi muốn kịch bản dựa trên các giá trị, các ứng dụng đang chạy trong Jetty máy chủ ứng dụng

Trả lời

43

Bạn có thể sử dụng jstat, như:

jstat -gc pid 

tài liệu đầy đủ ở đây: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

+0

Thankyou trông giống như những gì tôi muốn, có thể mất một lúc để hiểu tất cả các tùy chọn mặc dù, tôi về cơ bản đang tìm kiếm bao nhiêu của đống được sử dụng –

+2

vì vậy tôi nghĩ OU là cột quan trọng, với OC hiển thị tối đa đã được phân bổ –

+4

@PaulTaylor Bạn muốn các cột EU và OU - thêm chúng lên cho bạn số lượng đống được sử dụng. Việc thêm các cột EC và OC cho bạn số tiền được phân bổ cho vùng heap. – pacoverflow

8

Nếu bạn bắt đầu thực hiện với gc logging bật bạn sẽ có được các thông tin trong hồ sơ. Nếu không, 'jmap -heap' sẽ cung cấp cho bạn những gì bạn muốn. Xem jmap doc page để biết thêm.

Xin lưu ý rằng jmap nên không được sử dụng trong môi trường sản xuất trừ khi hoàn toàn cần thiết khi công cụ tạm dừng ứng dụng để có thể xác định mức sử dụng vùng heap thực tế. Thông thường điều này là không mong muốn trong một môi trường sản xuất.

10

Đối với Java 8 bạn có thể sử dụng dòng lệnh sau đây để có được việc sử dụng không gian đống trong kB:

jstat -gc <PID> | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]; print sum}' 

Lệnh cơ bản tổng kết:

  • S0U: Survivor gian 0 sử dụng (kB).
  • S1U: Sử dụng không gian sống sót 1 (kB).
  • EU: Sử dụng không gian Eden (kB).
  • OU: Sử dụng không gian cũ (kB).

Bạn cũng có thể muốn bao gồm metaspace và sử dụng không gian lớp nén. Trong trường hợp này, bạn phải thêm [10] và [12] vào tổng số tiền.