2009-10-05 7 views
45

Tôi đang cố gắng tìm hiểu xem có cách nào để xác định các thuộc tính khởi động JVM từ bên trong một tiến trình java đang chạy hay không. Cụ thể là tôi đang cố gắng tìm ra các tham số như -Xmx (kích thước heap tối đa) và -XX: MaxPermSize được lưu trữ ở đâu. Tôi đang chạy jvm 1.6 của Sun.Đọc các tham số khởi động Java JVM (ví dụ -Xmx)

Nếu bạn đang tự hỏi tại sao tôi muốn thực hiện điều này, tôi có một số máy chủ web JVM có thể hoặc không được định cấu hình đúng và tôi muốn thêm mã này vào kiểm tra mã khởi động. Nó dễ dàng hơn nhiều cho tôi để kiểm tra trong một đoạn mã java được triển khai ở khắp mọi nơi hơn là tự tìm và kiểm tra tất cả các tệp khởi động jvm. Ngay bây giờ các tập tin cấu hình jvm cho tốt hơn hoặc tệ hơn không phải là một phần của quá trình xây dựng của chúng tôi hoặc kiểm tra vào kiểm soát nguồn.

Trả lời

52

Hãy thử:

import java.lang.management.ManagementFactory; 
import java.lang.management.RuntimeMXBean; 

import java.util.List; 

public void runtimeParameters() { 
    RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); 
    List<String> aList = bean.getInputArguments(); 

    for (int i = 0; i < aList.size(); i++) { 
    System.out.println(aList.get(i)); 
    } 
} 

Điều đó sẽ hiển thị tất cả các thông số JVM.

Lưu ý: chúng tôi không có tham số JVM trong VCS, nhưng trong cơ sở dữ liệu, được đọc bởi các trình khởi chạy của riêng chúng tôi trong các sản phẩm. Bằng cách đó, chúng tôi có thể thay đổi các giá trị đó từ xa mà không phải triển khai lại cài đặt tệp tham số JVM.


Bạn sẽ tìm thấy một TÓM TẮT tốt của nhiều JVM tools to use in this article (từ "Dustin's Software Development Cogitations and Speculations"), bao gồm Java Application Launcher liên kết đến:

kỹ thuật này có lợi thế của Platform MXBeans sẵn từ J2SE 5 (hỗ trợ MXBeans tùy chỉnh đã được bổ sung trong Java SE 6).

Hai nguồn thông tin hữu ích trên các thông số JVM sẵn khi sử dụng JVM của Sun là:

Cả hai tài nguyên này liệt kê và mô tả một số/đối số không được khuyến nghị dành cho nhà phát triển ngẫu nhiên X (-XX) khả dụng.

+0

trình như một say mê! Tôi rõ ràng không biết java.lang.management cũng như tôi nên. –

+0

nếu nó là Java 1.4 thì sao? –

9

Với Java 7 hay muộn nó dễ dàng như

java -XshowSettings:all