2010-12-13 17 views
20

JDK 1.6 đi kèm với một công cụ tiện dụng gọi là VisualVM cho phép bạn kiểm tra và tương tác với việc chạy các quy trình Java. Một tính năng là nó tự động phát hiện các JVM đang chạy trên máy cục bộ. Hầu hết được liệt kê là "(pid xxxx)" nhưng một số có tên và biểu tượng, như chính VisualVM và một số khác như NetBeans (xem ảnh chụp màn hình trong ví dụ this dzone article).Làm cách nào để đặt tên cho VisualVM "<Unknown Application>"?

Làm cách nào để chèn tên và biểu tượng ứng dụng của tôi vào JVM để nó hiển thị đúng trong danh sách ứng dụng của VisualVM? Ứng dụng của tôi có cần chạy JRE 1.6 hoặc tôi có thể thực hiện việc này dưới 1,5 không?

+0

Đây là gợi ý tôi đã học bằng cách xem LocalVmManager trong OpenJDK: danh sách các máy ảo cục bộ được phát hiện bằng cách tìm trong $ TMP/hsperfdata_ $ USER /. Mỗi tập tin trong đó được đặt tên cho PID của VM. Chứa trong đó là dòng lệnh là "sun.rt.javaCommand" nhưng tệp cho quy trình VisualVM không chứa chuỗi "VisualVM" để nó không thể đến trực tiếp từ tệp đó. –

Trả lời

26

Tôi đã giải quyết một nửa câu hỏi của riêng mình qua câu trả lời NetBeans forum post. Thêm một dòng lệnh JVM arg của -Dvisualvm.display.name=FooBar làm cho VisualVM hiển thị ứng dụng là "FooBar". Nhưng tôi vẫn không thể tìm ra cách ảnh hưởng đến biểu tượng.

CẬP NHẬT: Than ôi, tôi nghĩ tôi đã tìm thấy câu trả lời cho biểu tượng. Các biểu tượng được mã hóa cứng vào VisualVM qua MainClassApplicationTypeFactory trong nguồn VisualVM, được gọi từ phương thức tĩnh ApplicationTypeFactory.getApplicationTypeFor (Application). Tôi không thể nhìn thấy bất kỳ cách nào để tiêm một biểu tượng mới vào VisualVM ngoại trừ bằng cách tạo một plugin VisualVM có thể đăng ký một nhà máy kiểu mới - plugin Glassfish thực hiện điều này thông qua GlassFishApplicationTypeFactory.initialize() chẳng hạn.

+0

Cảm ơn, Chris. Tôi đã tự hỏi rằng vào thứ Sáu. Không còn trò chơi đoán nữa! –

+1

Thêm lời khuyên cho người đọc trong tương lai: có vẻ như với tôi rằng bạn không thể có khoảng trống trong tên ứng dụng. Tức là, -Dvisualvm.display.name = Foo Bar và -Dvisualvm.display.name = "Foo Bar" không hoạt động. –

+0

kinda lame phải viết một plugin và đăng ký chỉ để có một đại diện trực quan phong nha của ứng dụng mà bạn muốn theo dõi. Có thể một tệp kê khai giống như tệp được tự động phát hiện bởi VisualVM sẽ đẹp ... hoặc chỉ sử dụng biểu tượng của ứng dụng ... bằng cách nào đó – Alex

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