Có ai đã từng có một JMX JConsole từ xa để làm việc không?


120

Có vẻ như tôi chưa bao giờ làm điều này trong quá khứ. Hiện tại, tôi BIẾT nó không hoạt động.

Nhưng chúng tôi bắt đầu quy trình Java của mình:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Tôi có thể telnet đến cổng và "có gì đó ở đó" (nghĩa là, nếu tôi không bắt đầu quá trình, không có câu trả lời nào, nhưng nếu tôi làm, nó sẽ xảy ra), nhưng tôi không thể khiến JConsole hoạt động trong việc điền IP và cổng.

Có vẻ như nó phải đơn giản như vậy, nhưng không có lỗi, không có tiếng ồn, không có gì. Chỉ không hoạt động.

Bất cứ ai biết mẹo nóng cho điều này?


3
Nếu bạn đang sử dụng tomcat này có thể là giải pháp: stackoverflow.com/questions/1263991/...
Hajo Thelen

5
Bạn đã quên chấp nhận một cái gì đó ở đây @Will?
Màu xám,

Câu trả lời:


126

Tôi có một giải pháp cho điều này:

Nếu quy trình Java của bạn đang chạy trên Linux sau tường lửa và bạn muốn khởi động JConsole / Java VisualVM / Java Mission Control trên Windows trên máy cục bộ của mình để kết nối nó với Cổng JMX của quy trình Java của bạn .

Bạn cần truy cập vào máy linux của mình thông qua đăng nhập SSH. Tất cả Thông tin liên lạc sẽ được đào hầm qua kết nối SSH.

MẸO: Giải pháp này hoạt động bất kể có tường lửa hay không.

Bất lợi: Mỗi khi bạn khởi động lại quy trình java của mình, bạn sẽ cần thực hiện lại tất cả các bước từ 4 đến 9.


1. Bạn cần có bộ putty cho máy Windows của mình từ đây:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Ít nhất là putty.exe


2. Xác định một Cổng miễn phí trên máy Linux của bạn:

<jmx-remote-port>

Thí dụ:

jmx-remote-port = 15666      


3. Thêm đối số vào quy trình java trên máy linux

Điều này phải được thực hiện chính xác như thế này. Nếu nó được thực hiện như bên dưới, nó hoạt động đối với Máy linux phía sau tường lửa (Nó hoạt động là nguyên nhân của -Djava.rmi.server.hostname=localhostđối số).

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

Thí dụ:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main


4. Nhận Process-Id của Quy trình Java của bạn

ps -ef | grep <java-processname>

result ---> <process-id>

Thí dụ:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5. Tìm Cổng tùy ý để tải xuống sơ khai RMIServer

Quá trình java mở một Cổng TCP mới trên máy linux, nơi các RMI Server-Stubs sẽ có sẵn để tải xuống. Cổng này cũng cần có sẵn thông qua Đường hầm SSH để có kết nối với Máy ảo Java.

Với netstat -lp cổng này cũng có thể tìm thấy các lsof -igợi ý cổng nào đã được mở trong quá trình java.

LƯU Ý: Cổng này luôn thay đổi khi quá trình java được bắt đầu.

netstat -lp | grep <process-id>

tcp        0      0 *:<jmx-remote-port>     *:*     LISTEN      24321/java
tcp        0      0 *:<rmi-server-port>     *:*     LISTEN      24321/java


result ---> <rmi-server-port>

Thí dụ:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6. Kích hoạt hai SSH-Tunnels từ máy Windows của bạn với putty

Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local       
[x] Auto       

Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local       
[x] Auto

Thí dụ:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


Cài đặt để mở một đường hầm SSL qua Putty


7. Đăng nhập vào máy Linux của bạn bằng Putty khi đã bật SSH-Tunnel này.

Để mở phiên putty.

Khi bạn đã đăng nhập, Putty sẽ chuyển tất cả các Kết nối TCP đến máy linux qua cổng SSH 22.

Cổng JMX:

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer-Stub-Port:

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8. Khởi động JConsole / Java VisualVM / Java Mission Control để kết nối với Quy trình Java của bạn bằng URL sau

Điều này hoạt động, vì JConsole / Java VisualVM / Java Mission Control nghĩ rằng bạn kết nối với một Cổng trên máy Windows cục bộ của bạn. nhưng Putty gửi tất cả tải trọng đến cổng 15666 đến máy linux của bạn.

Trên máy linux, đầu tiên quá trình java đưa ra câu trả lời và gửi lại Cổng RMIServer. Trong ví dụ này 37123.

Sau đó, JConsole / Java VisualVM / Java Mission Control cho rằng nó kết nối với localhost: 37123 và putty sẽ gửi toàn bộ trọng tải tới máy linux

Quy trình java trả lời và kết nối được mở.

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

Thí dụ:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


Kết nối qua url dịch vụ jmx


9. THƯỞNG THỨC # 8-]


1
Chỉ một câu hỏi nhỏ ở đây - không thể thực hiện kết nối JMX mà không có rmi?
Kumar Vaibhav

5
Tôi có một gợi ý, rằng chúng ta có thể đặt rmi.port thành số cổng cố định, vì vậy chúng ta có thể đặt cổng tùy ý cho tải xuống sơ khai RMIServer. điều này sẽ hoạt động với thuộc tính Java "com.sun.management.jmxremote.rmi.port = <rmi-server-port>". Nó trông giống như một tính năng không có tài liệu trong Oracle Java VM.
sushicutta

1
Chắc chắn sẽ đánh bại việc phải thiết lập kho khóa và cửa hàng tin cậy
TekiusFanatikus

Cùng quá trình, nhưng tôi có đối tượng không có như vậy trong bảng
wener

2
@sushicutta bạn có thể thêm gợi ý này vào câu trả lời của mình không, nó hoạt động hoàn toàn tốt và có thể loại bỏ các bước từ 4 đến 6, vấn đề là cổng chuyển tiếp của bạn phải giống với cổng gốc và cả cổng jmx và rmi cũng phải giống nhau
tồi tàn

80

Thêm đã -Djava.rmi.server.hostname='<host ip>'giải quyết vấn đề này cho tôi.


2
Trong trường hợp của tôi, tôi phải thêm địa chỉ ip (-Djava.rmi.server.hostname = <ip>). tên máy chủ -i đã cho tôi hai địa chỉ ip và địa chỉ chính xác đứng thứ hai trong danh sách.
Georgy Bolyuba

4
không giải quyết được vấn đề cho tôi. kết nối windows-2-windows không phải là vấn đề đối với tôi NHƯNG khi tôi cố gắng kết nối từ JVM Jvisualvm.exe trên Windows để theo dõi dịch vụ java đang chạy trên SUSE với Oracle JDK 1.6.024, nó không kết nối được. Vì lý do này, tôi nghĩ rằng câu hỏi về con người này vẫn chưa được trả lời.
djangofan

Điều này đã giải quyết vấn đề cho tôi. Điều này cộng với bộ 3 (xác thực / cổng / ssl) thông thường và tôi có thể kết nối từ xa ngay bây giờ. Tuy nhiên, hộp đang lắng nghe trên nhiều giao diện ảo, có thể là lý do tại sao không chỉ định máy chủ lưu trữ làm nhầm lẫn jvm.
Nicholi

Cuối cùng đã giải quyết được sự cố kết nối jconsole trên máy tính xách tay osx của tôi. Cảm ơn.
rado

Đã làm cho tôi. Cảm ơn bạn!
Jeff

58

Đã thử với Java 8 và các phiên bản mới hơn

Giải pháp này cũng hoạt động tốt với tường lửa

1. Thêm cái này vào tập lệnh khởi động java của bạn trên máy chủ từ xa:

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

2. Thực hiện điều này trên máy tính của bạn.

  • Người dùng Windows :

    putty.exe -ssh user@remote-host -L 1616:remote-host:1616

  • Người dùng Linux và Mac :

    ssh user@remote-host -L 1616:remote-host:1616

3. Khởi động jconsoletrên máy tính của bạn

jconsole localhost:1616

4. Chúc bạn vui vẻ!

Tái bút: trong bước 2, sử dụng ssh-Lbạn chỉ định rằng cổng 1616 trên máy chủ cục bộ (máy khách) phải được chuyển tiếp đến phía từ xa. Đây là một đường hầm ssh và giúp tránh tường lửa hoặc các sự cố mạng khác nhau.


1
TUYỆT VỜI!! Bạn đã cố gắng trong hơn 6 giờ để jmx-remote vào phiên bản ActiveMQ trên java8. CUỐI CÙNG RỒI ĐÃ LÀM VIỆC !! Cảm ơn! :)
Rop

Cảm ơn, giống như bạn, tôi cũng đã vật lộn trong khoảng một ngày, và sau rất nhiều công việc, tôi chỉ nghĩ: "Tôi phải viết điều này cho SO !!"
freedev

2
Thực sự tệ khi Oracle không đề cập đến "com.sun.management.jmxremote.rmi.port", "java.rmi.server.hostname" docs.oracle.com/javase/8/docs/technotes/guides/management/… I đoán đó là vấn đề của tôi.
Rop

Bởi vì, AFAIK, vấn đề này không phải là về JMX, mà là cách RMI hoạt động. Ví dụ: sau trường hợp này, tôi gặp vấn đề tương tự với jmeter, sử dụng rmi trong triển khai máy khách / máy chủ của nó.
freedev

2
Nó hoạt động. Chỉ cần thêm kinh nghiệm của tôi với đường hầm: 1) có thể sử dụng "localhost" trong "-L 1616: localhost: 1616" 2) không thể thay đổi cổng nguồn, tức là điều này sẽ không hoạt động: "-L 9999: localhost: 1616"
gargii

19

Có thể bạn đang gặp sự cố với tường lửa. 'Vấn đề' là cổng bạn chỉ định không phải là cổng duy nhất được sử dụng, nó sử dụng 1 hoặc thậm chí có thể 2 cổng nữa cho RMI và những cổng đó có thể bị tường lửa chặn.

Một trong các cổng bổ sung sẽ không được biết trước nếu bạn sử dụng cấu hình RMI mặc định, vì vậy bạn phải mở một loạt các cổng - điều này có thể không thích thú với quản trị viên máy chủ.

Tuy nhiên, có một giải pháp không yêu cầu mở nhiều cổng, tôi đã làm cho nó hoạt động bằng cách sử dụng các đoạn mã nguồn kết hợp và các mẹo từ

http://forums.sun.com/thread.jspa?threadID=5267091 - liên kết không hoạt động nữa

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

Thậm chí có thể thiết lập một đường hầm ssh và vẫn làm cho nó hoạt động :-)


2
Tôi đã có thể làm việc xung quanh tường lửa chỉ bằng bí danh được mô tả trong simplegenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html cùng với việc đặt -Djava.rmi.server.hostname như được đề cập trong một câu trả lời khác ở đây.
Damien

Lưu ý cho độc giả trong tương lai: liên kết tới forums.sun.combị hỏng
CDspace

1
Lưu ý cho độc giả trong tương lai: liên kết đến blogs.oracle.combị hỏng.
Grimlock

17

Sau khi đưa Google-fu của tôi vào thử nghiệm trong vài ngày qua, cuối cùng tôi đã có thể làm cho điều này hoạt động sau khi biên soạn câu trả lời từ Stack Overflow và trang này http://help.boomi.com/atomsphere/GUID-F787998C- 53C8-4662-AA06-8B1D32F9D55B.html .

Đăng lại từ trang Dell Boomi:

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the <atom_installation_directory>\bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Một dòng mà tôi chưa thấy bất kỳ bìa câu trả lời Stack Overflow nào là

-Dcom.sun.management.jmxremote.rmi.port=5002

Trong trường hợp của tôi, tôi đang cố gắng truy xuất số liệu Kakfa, vì vậy tôi chỉ cần thay đổi tùy chọn ở trên để phù hợp với -Dcom.sun.management.jmxremote.portgiá trị. Vì vậy, không cần xác thực dưới bất kỳ hình thức nào, cấu hình tối thiểu trần sẽ giống như sau:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)

1
Thêm một cho "Google-fu"
kevinarpe

"com.sun.management.jmxremote.rmi.port" cũng là chìa khóa cho tôi. Xem thêm câu trả lời này: stackoverflow.com/a/22306586/123205
David

Tôi không cần "com.sun.management.jmxremote.local.only" vì vậy tôi không nghĩ rằng cấu hình của bạn là thực sự "trần tối thiểu"
David


7

Có thể bỏ qua các bước 4-7 của Sushicutta bằng cách thêm dòng sau vào bước 3:

-Dcom.sun.management.jmxremote.rmi.port=<same port as jmx-remote-port>

ví dụ: Thêm vào tham số khởi động:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

Để chuyển tiếp cổng, hãy kết nối bằng:

ssh -L 12345:localhost:12345 <username>@<host>

nếu máy chủ của bạn là một bước đệm, chỉ cần chuỗi cổng về phía trước bằng cách chạy các bước sau trên bước sau ở trên:

ssh -L 12345:localhost:12345 <username>@<host2>

Lưu ý rằng tên máy chủ = localhost là cần thiết để đảm bảo jmxremote đang báo cho kết nối rmi sử dụng đường hầm. Nếu không, nó có thể cố gắng kết nối directy và chạm vào tường lửa.


Phương pháp này giúp tôi: (1) Tôi thêm các thông số JMX nhỡ và ứng dụng khởi động lại (2) Sau đó chạy ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host> trên máy tính cục bộ (3) Sau đó, tôi kết nối với JMX từ xa sử dụng: jconsole <remote_host>:<JMX_port>
Rib47

6

LỜI KHUYÊN:

Cổng RMI được mở tại cổng tùy ý. Nếu bạn có tường lửa và không muốn mở cổng 1024-65535 (hoặc sử dụng vpn) thì bạn cần làm như sau.

Bạn cần sửa (như có một số đã biết) các cổng RMI Registry và JMX / RMI Server. Bạn thực hiện việc này bằng cách đặt một tệp jar (catalina-jmx-remote.jar là tệp bổ sung) trong lib-dir và định cấu hình một trình nghe đặc biệt trong máy chủ:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(Và tất nhiên là các cờ thông thường để kích hoạt JMX

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

Xem: Trình xử lý vòng đời từ xa JMX tại http://tomcat.apache.org/tomcat-6.0-doc/config/listutor.html

Sau đó, bạn có thể kết nối bằng URL khủng khiếp này:

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

Đã thử w / the extras jar ở trên và có thể thấy các cổng RMI đang lắng nghe như được chỉ định, nhưng các cổng ngẫu nhiên vẫn được RMI sử dụng sau khi kết nối với cổng JVM bằng VisualVM. Cách giải quyết: để ý các cổng có 'lsof -i' và mở các cổng có kết nối bị chặn.
Joseph Lust

5

Kiểm tra xem máy chủ của bạn có nằm sau tường lửa hay không. JMX dựa trên RMI, mở hai cổng khi khởi động. Một là cổng đăng ký, mặc định là 1099 và có thể được chỉ định bằng com.sun.management.jmxremote.porttùy chọn. Loại còn lại dành cho giao tiếp dữ liệu, và là ngẫu nhiên, đó là nguyên nhân gây ra vấn đề. Một tin tốt là, từ JDK6, cổng ngẫu nhiên này có thể được chỉ định bằng com.sun.management.jmxremote.rmi.porttùy chọn.

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

4

Bắt JMX thông qua Tường lửa thực sự rất khó. Vấn đề là RMI tiêu chuẩn sử dụng một cổng được chỉ định ngẫu nhiên thứ hai (bên cạnh sổ đăng ký RMI).

Chúng tôi có ba giải pháp hoạt động, nhưng mỗi trường hợp cần một giải pháp khác nhau:

  1. JMX qua SSH Tunnel với proxy Socks, sử dụng RMI tiêu chuẩn với SSH magic http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

  2. JMX MP (thay thế cho RMI tiêu chuẩn), chỉ sử dụng một cổng cố định, nhưng cần một jar đặc biệt trên máy chủ và máy khách http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/

  3. Khởi động mã biểu mẫu Máy chủ JMX, ở đó có thể sử dụng RMI tiêu chuẩn và sử dụng cổng thứ hai cố định: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055


Tất cả các câu trả lời khác nên một sự bổ sung với trang này
ruruskyi

2

Khi kiểm tra / gỡ lỗi / chẩn đoán các sự cố JMX từ xa , trước tiên, hãy luôn cố gắng kết nối trên cùng một máy chủ chứa MBeanServer (tức là máy chủ cục bộ), để loại trừ các sự cố cụ thể về mạng và không phải JMX khác.


2

Đã có một số câu trả lời tuyệt vời ở đây, nhưng có một cách tiếp cận đơn giản hơn một chút mà tôi nghĩ nó đáng được chia sẻ.

Cách tiếp cận của sushicutta là tốt, nhưng rất thủ công vì bạn phải lấy Cổng RMI mỗi lần. Rất may, chúng tôi có thể giải quyết vấn đề đó bằng cách sử dụng proxy SOCKS thay vì mở đường hầm cổng một cách rõ ràng. Nhược điểm của phương pháp này là ứng dụng JMX bạn chạy trên máy của mình cần có thể được cấu hình để sử dụng Proxy. Hầu hết các quy trình bạn có thể thực hiện việc này bằng cách thêm thuộc tính java, nhưng một số ứng dụng không hỗ trợ điều này.

Các bước:

  1. Thêm các tùy chọn JMX vào tập lệnh khởi động cho dịch vụ Java từ xa của bạn:

    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=8090
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    
  2. Thiết lập kết nối proxy SOCKS với máy từ xa của bạn:

    ssh -D 9696 user@remotemachine.com
    
  3. Định cấu hình ứng dụng giám sát Java cục bộ của bạn để sử dụng proxy SOCKS (localhost: 9696). Lưu ý: Đôi khi bạn có thể thực hiện việc này từ dòng lệnh, tức là:

    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9696
    

2

Điều sau đã làm việc cho tôi (mặc dù tôi nghĩ rằng cổng 2101 không thực sự đóng góp vào điều này):

-Dcom.sun.management.jmxremote.port=2100
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=2101
-Djava.rmi.server.hostname=<IP_ADDRESS>OR<HOSTNAME>

Tôi đang kết nối từ một máy từ xa đến một máy chủ có Docker đang chạy và quá trình này nằm bên trong vùng chứa. Ngoài ra, tôi đã dừng firewallD nhưng tôi không nghĩ đó là vấn đề vì tôi có thể telnet tới 2100 ngay cả khi tường lửa đang mở. Hy vọng nó giúp.


1

Tôi đang chạy JConsole / JVisualVm trên windows kết nối với tomcat chạy Linux Redhat ES3.

Việc vô hiệu hóa tính năng lọc gói bằng lệnh sau đã giải quyết được vấn đề cho tôi:

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

trong đó jconsole-host là tên máy chủ hoặc địa chỉ máy chủ lưu trữ trên đó JConsole chạy trên đó và jmxremote-port là số cổng được đặt cho com.sun.management.jmxremote.port để quản lý từ xa.


2
không phù hợp với tôi trên phiên bản SUSE Amazon EC2. tôi nghĩ rằng vấn đề nằm ở đâu đó.
djangofan

1

Tôi đang sử dụng boot2docker để chạy các vùng chứa docker với Tomcat bên trong và tôi gặp vấn đề tương tự, giải pháp là:

  • Thêm vào -Djava.rmi.server.hostname=192.168.59.103
  • Sử dụng cổng JMX cùng trong máy chủ và Docker container, ví dụ: docker run ... -p 9999:9999 .... Sử dụng các cổng khác nhau không hoạt động.

0

Bạn cũng cần đảm bảo rằng tên máy của bạn phân giải thành IP mà JMX đang ràng buộc; KHÔNG phải localhost hay 127.0.0.1. Đối với tôi, nó đã giúp đưa một mục vào máy chủ xác định rõ ràng điều này.


0

Bắt JMX thông qua tường lửa không khó chút nào. Có một điểm nhỏ. Bạn phải chuyển tiếp cả cổng được cấu hình JMX của bạn tức là. 9010 và một trong những cổng động mà nó nghe được trên máy của tôi, nó> 30000


0

Đây là các bước phù hợp với tôi (debian phía sau tường lửa ở phía máy chủ, đạt được qua VPN từ máy Mac cục bộ của tôi):

kiểm tra ip máy chủ

hostname -i

sử dụng tham số JVM:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=[jmx port]
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=[server ip from step 1]

chạy ứng dụng

tìm pid của tiến trình java đang chạy

kiểm tra tất cả các cổng được sử dụng bởi JMX / RMI

netstat -lp | grep [pid from step 4]

mở tất cả các cổng từ bước 5 trên tường lửa

Thì đấy.


0

Để đóng góp, đây là những gì tôi đã làm trên CentOS 6.4 cho Tomcat 6.

  1. Tắt dịch vụ iptables

    service iptables stop
    
  2. Thêm dòng sau vào tomcat6.conf

    CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8085 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[host_ip]"
    

Bằng cách này, tôi đã có thể kết nối từ một PC khác bằng JConsole.


0

Tôi đang cố gắng JMC chạy Máy ghi chuyến bay (JFR) để định cấu hình NiFi trên một máy chủ từ xa không cung cấp môi trường đồ họa để chạy JMC.

Dựa trên các câu trả lời khác được đưa ra ở đây và sau nhiều thử nghiệm và sai sót, đây là những gì tôi đang cung cấp cho JVM ( conf / bootstrap.conf ) khi tôi khởi chạy NiFi:

java.arg.90=-Dcom.sun.management.jmxremote=true
java.arg.91=-Dcom.sun.management.jmxremote.port=9098
java.arg.92=-Dcom.sun.management.jmxremote.rmi.port=9098
java.arg.93=-Dcom.sun.management.jmxremote.authenticate=false
java.arg.94=-Dcom.sun.management.jmxremote.ssl=false
java.arg.95=-Dcom.sun.management.jmxremote.local.only=false
java.arg.96=-Djava.rmi.server.hostname=10.10.10.92  (the IP address of my server running NiFi)

Tôi đã đặt cái này vào / etc / hosts , mặc dù tôi nghi ngờ nó cần:

10.10.10.92   localhost

Sau đó, khi khởi chạy JMC, tôi tạo một kết nối từ xa với các thuộc tính sau:

Host: 10.10.10.92
Port: 9098
User: (nothing)
Password: (ibid)

Tình cờ, nếu tôi nhấp vào URL dịch vụ JMX tùy chỉnh, tôi thấy:

service:jmx:rmi:///jndi/rmi://10.10.10.92:9098/jmxrmi

Điều này cuối cùng đã làm điều đó cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.