วันศุกร์, กุมภาพันธ์ 13, 2558

วิธีใช้ Java VisualVM monitor server บน cloud โดยใช้ JMX ผ่าน SSH tunnels


   Java VisualVM หรือ jvisualvm เป็นเครืองมือที่มากับ Oracle JDK เอาไว้ monitor JVM ทำ Profiling java application ของเราได้ ที่สำคัญฟรี 

รายละเอียด Oracle Java VisualVM

   ถ้าเรา monitor ในเครื่องเราเอง มันก็จะเห็น process java ที่เรารันอยู่ในเครื่องเลย ถ้าดูในภาพ จะอยู่ใต้กิ่ง Local ทีนี้หากเราต้องการ monitor อะไรที่มันไม่ได้อยู่ในเครื่องเราล่ะ แบบไปรันอยู่ใน cloud server หรือ server เฉยๆ ก็ได้ เราจะใช้ connection แบบ jmx ในการเชื่อมต่อเข้าไป 


ทำได้โดยการเพิ่ม jvm option เข้าไปเวลาเราจะรัน java command เดิมๆของเรา เช่น 
`
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=4000 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=my-server-ip -jar my-server.jar 
`
    เวลาเราจะใช้ jvisualvm เข้าไป monitor เราก้อเพิ่ม server ที่เราต้องการเข้าไปใต้กิ่ง Remote แล้วเพิ่ม JMX connection (Add JMX Connection...)  

    เช่น server ผมอยู่ที่ 192.168.33.10 (คนละ IP กับเครื่องผม น่ะนะ) ก็ใส่ตามภาพ 192.168.33.10:4000 ใช้ port ตามที่กำหนดไว้ใน command line ในตอนแรก


    แต่ network เค้าไม่เปิดให้ใช้ port 4000 จะทำไง? พวก server พวกนี้เค้าก็จะไม่เปิด port ให้เยอะแยะ มั่วซั่ว อย่างน้อยเราจะใช้ ssh/puTTY เข้าไปได้ ค้นๆ ไปก็เจอ ว่าเราใช้ ssh tunnel มาช่วยตรงนี้ได้ 

1.
สร้าง sock proxy หรือ ssh tunnel ได้โดยคำสั่งแบบนี้  

$ssh -v -N -D 9999 -p 2225 vagrant@172.16.0.129

9999 เป็น port ที่คุณจะใช้เป็น proxy port 
2225 เป็น ssh port ที่ server ผมเปิดให้ใช้ 
172.16.0.129 เป็น server ที่ไม่สามารถจะใช้ port  4000 ได้ตรงๆ 

หลังจากใส่ password เข้า server ได้แล้ว เราจะต้องเปิด terminal ทิ้งเอาไว้เพื่อให้ proxy มันทำงาน 

  1. ที่ jvisualvm เราจะต้องมาใส่ proxy ให้มัน หากใช้ OSX ให้เปิดผ่านเมนู Preferences> Proxy
แล้วใส่ค่าลงไปใน socks ตามภาพแล้ว 

  2. กลับมา add jmx connection ไปยัง 192.168.33.10 port 4000 อีกครั้ง 
คราวนี้จะเชื่อมได้แล้ว

  ถ้า google เรื่องทำนองนี้ ก็จะเจอหลาย link ของฝรั่ง จะมีอันนี้แหละมั้งที่เป็นภาษาไทย สงสัยหรืออยากแนะนำอะไร hangs out chat มาได้ครับ 

ไม่มีความคิดเห็น :