2012-01-10 29 views
10

Tôi đã tìm kiếm các giải pháp có thể, chẳng hạn như How to monitor the computer's cpu, memory, and disk usage in Java?. Nhưng bộ nhớ dành cho bộ đệm và bộ nhớ đệm không được đề cập ở bất kỳ đâu?Làm thế nào để theo dõi bộ nhớ trống (bao gồm bộ đệm và bộ đệm) trong java?

Ví dụ, trên Linux, sản lượng free -m: sản lượng

 
      total  used  free  shared buffers  cached 
Mem:   2011  1835  175   0  309  847 
-/+ buffers/cache:  678  1333 
Swap:   1998   0  1998 

Tôi đã thử nghiệm của sigar, mà báo cáo bộ nhớ trống 175 MB.

Nguyên nhân của câu hỏi này là làm thế nào để phát hiện khi hệ điều hành có ít bộ nhớ còn lại? Trong kết quả trước đó của free -m, 175 MB có vẻ khá thấp; nhưng bằng cách thêm bộ đệm và bộ nhớ đệm, điều hiển nhiên là bộ nhớ miễn phí thực sự là 1333 MB trong tổng số 2 GB.

Để tóm tắt, sử dụng java, có thể nhận giá trị 1333 MB làm giá trị của bộ nhớ miễn phí không? Như tôi đã đề cập, cho đến nay tôi chỉ biết cách lấy giá trị 175 MB.

+2

Vì câu trả lời có thể là hệ điều hành cụ thể, bạn có thể muốn chỉ định (các) HĐH nào bạn cần hỗ trợ. Chỉ cần Linux? – NPE

+1

Vâng, mục tiêu là linux, nhưng tôi muốn nếu nó là một giải pháp đa nền tảng. Tôi không có cửa sổ máy ở bàn tay để kiểm tra, vì vậy tôi không biết làm cửa sổ cũng báo cáo bộ đệm ẩn/đệm bộ nhớ riêng. Các chuyên gia Windows được chào đón: D – bbaja42

+0

Từ những gì tôi đã thu thập [ở đây] (http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html), dựa trên hình ảnh hiển thị cửa sổ công việc quản lý, Windows cũng có tách bộ nhớ tổng số, bộ nhớ miễn phí và bộ nhớ đệm. – bbaja42

Trả lời

1

Nếu bạn đang cố gắng để có được thống kê bộ nhớ cho hệ điều hành riêng của mình (không JVM), bạn có thể sử dụng JNA hoặc JNI để thực hiện các lệnh gọi API gốc cụ thể cho nền tảng cho hệ điều hành.

1

Tôi không biết về bộ nhớ miễn phí trực tiếp, nhưng JVM duy trì đậu JMX đó, tôi tin rằng, có thông tin này và nhiều hơn nữa: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

+0

Như được hiển thị [ở đây] (http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#summary), JMX có thể cung cấp thông tin sau: kích thước bộ nhớ do JVM thực hiện, tổng số bộ nhớ trong hệ điều hành và bộ nhớ trống (không có bộ đệm và bộ đệm). Tất cả đều tốt. Nhưng vẫn không đề cập đến bộ nhớ dành cho bộ đệm và bộ đệm. Bộ nhớ đệm có thể nhanh chóng được khôi phục nếu cần. – bbaja42

+0

Nếu bạn đang cố gắng để có được chi tiết tốt chi tiết của bộ nhớ dành cho các lớp học cụ thể, gói, vv, tôi nghĩ rằng bạn đang thực sự cần một Profiler và không chỉ là một màn hình JMX. Trừ khi các lớp bạn quan tâm có MBeans riêng của họ cung cấp công cụ này cho JMX. –

+0

Dường như chúng ta đang đi lạc một chút. Tôi không cần bất kỳ bộ nhớ cụ thể dành cho lớp java hoặc gói. Không java cách, sử dụng lệnh hệ thống ('miễn phí'), tôi có thể đo bộ nhớ miễn phí cho toàn bộ hệ điều hành, đo lường như vậy cho thấy cả hai bộ nhớ miễn phí có và không có bộ đệm/cache. Tôi tự hỏi làm thế nào để làm điều đó với java. – bbaja42

1

Tôi tin rằng không thể sử dụng Java API để lấy số cahce/bộ đệm. Ngay cả những kẻ từ SIGAR sử dụng trình bao bọc JNI và các cuộc gọi hệ thống tự nhiên ...

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