2011-02-01 10 views
12

Tôi đang thử truy vấn JVM từ xa bằng jps bằng cách sử dụng jstatd, để cuối cùng theo dõi nó bằng VisualVM.jps không thể kết nối với một jstatd từ xa

tôi đã jstatd chạy với chính sách bảo mật sau:

grant codebase "file:${java.home}/../lib/tools.jar" { 

    permission java.security.AllPermission; 
}; 

jstatd đang chạy trên một phiên bản 64-bit Linux hộp với một phiên bản 1.6.0_10 HotSpot vm. Lệnh jstatd là:

jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true 

Tôi đang cố chạy jps từ máy tính Windows 7. Do hạn chế tường lửa, tôi đường hầm dữ liệu RMI qua một đường hầm SSH để máy tính Windows của tôi như vậy mà các dòng JPS lệnh là:

.\jps.exe -m -l rmi://localhost 

Khi tôi chạy JPS, tôi thấy các nỗ lực kết nối lại trong nhật ký jstatd, mà trông như thế này:

Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall 
FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja va.lang.String)] 

nhưng trên JPS bên tôi nhận được lỗi sau:

Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is: 
    java.net.ConnectException: Connection refused: connect 

Dựa trên những nỗ lực kết nối được liệt kê trong bản ghi jstatd, tôi nghĩ JPS thực sự là tái đau máy chủ, nhưng vì một số lý do là bị chặn. Có một số chính sách an ninh tôi đã thiết lập hoặc một số thiết lập khác ở đâu đó tôi có thể thay đổi để tôi có thể nhận được jps để kéo số liệu thống kê từ jstatd từ xa?

+0

Có thể là tôi chưa đặt thuộc tính jmxremote trong ứng dụng tôi muốn theo dõi, như được mô tả ở đây: http://stackoverflow.com/questions/726643/get-heap-dump-từ-một-xa-ứng dụng-in-java-sử dụng-jvisualvm – afrosteve

Trả lời

13

Tôi đoán là bạn chỉ chuyển tiếp cổng đăng ký RMI (1099), nhưng bạn cũng cần mở một cổng khác.

Kiểm tra các cổng ở phía xa

# netstat -nap | grep jstatd 

tcp  0  0 :::1099  :::*  LISTEN  453/jstatd   
tcp  0  0 :::58204 :::*  LISTEN  453/jstatd   

Trong trường hợp này bạn sẽ cần để chuyển tiếp cổng 58.204 cũng như 1099

+0

Không, điều đó không giúp được gì. Tôi đường hầm đến cổng khác, 45998 trong trường hợp của tôi, nhưng jps vẫn không thể kết nối. – afrosteve

+1

Đường hầm không giúp được gì, nhưng mở thêm nhiều cổng. Bạn đa đung. Cảm ơn. – afrosteve

+0

@afrosteve: bạn có thể giải thích những cổng nào khác bạn đã mở và bạn đã mở đường hầm nào? –

0

Đây là cách bạn có thể dễ dàng làm được điều này.

  1. Launch ejstatd trong máy chủ từ xa của bạn theo cách này (thực hiện từ thư mục ejstatd): mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
  2. Mở những cổng 3 trên máy chủ từ xa của bạn và làm cho họ có sẵn cho máy tính cục bộ của bạn: 2000, 20012002
  3. Trên máy tính địa phương của bạn, bạn sẽ có thể sử dụng thay thế jps<remotehost> với tên máy chủ từ xa của bạn: jps -m -l rmi://<remotehost>:2000

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của mã nguồn mở công cụ