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 มันทำงาน
แล้วใส่ค่าลงไปใน socks ตามภาพแล้ว
2. กลับมา add jmx connection ไปยัง 192.168.33.10 port 4000 อีกครั้ง
คราวนี้จะเชื่อมได้แล้ว
ถ้า google เรื่องทำนองนี้ ก็จะเจอหลาย link ของฝรั่ง จะมีอันนี้แหละมั้งที่เป็นภาษาไทย สงสัยหรืออยากแนะนำอะไร hangs out chat มาได้ครับ