จัดการ Tomcat ด้วย VisualVM
VisualVM เป็นเครื่องมือที่ใช้ในการจัดการ java application server ตัวหนึ่ง ซึ่งมีความสามารถในการ monitor การใช้ resource ใน jvm ต่าง ๆ ไม่ว่าจะเป็นการใช้งาน CPU Heap Thread สามารถสั่งให้ garbage collector ทำงานได้ สามารถ dump heap ออกมาก็ได้ วิธีทำก็ง่ายนิดเดียว แค่
1. เปิด option “jmxremote” จากตัว tomcat (JBoss ก็ใช้ได้นะ)
2. เสร็จแล้วก็ติดตั้งโปรแกรม VisualVM
3. จากนั้นก็ add remote host เข้าไป
แค่นี้ก็ใช้ได้แล้ว
มาเริ่มที่ config ตัว tomcat ให้เปิด option “jmxremote” ก่อน
ให้ไปแก้ไขที่ file $CATALINA_HOME/bin/setenv.sh (หากไม่มีให้ทำการสร้างขึ้นมาใหม่ แล้วอย่าลืมเปลี่ยน mode ให้เป็น 755 ด้วยล่ะ)
โดยให้ใส่บรรทัดนี้เข้าไป
CATALINA_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=<port number> -Dcom.sun.management.jmxremote.rmi.port=<port number> -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<tomcat server ip address>"
port number คือหมายเลขของ port ที่เราจะให้ VisualVM remote มา โดยจะให้ทั้ง
jmxremote.port และ jmxremote.rmi.port เป็นหมายเลขเดียวกัน
tomcat server ip address คือหมายเลข ip address ของเครื่องที่เป็น tomcat server
ตัวอย่างนี้จะใช้ port “12345” และ ip ของ tomcat server คือ “35.247.177.92” ดังนั้นจะได้ค่า config ที่จะใส่ใน setenv.sh เป็น
CATALINA_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.rmi.port=12345 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=35.247.177.92"
เสร็จแล้วก็ทำการ start tomcat ขึ้นมาใหม่ ก็จะเห็นว่ามี port 12345 ขึ้นมารอให้เราเข้าไปใช้งาน
หลังจากเสร็จในส่วนของ tomcat แล้วคราวนี้เราก็มาทำในส่วนของ VisualVM โดยให้ไปที่ https://github.com/oracle/graal/releases แล้ว download version ที่ตรงกับเครื่องที่เราใช้มา ผมใช้ Windows ก็ download ตัวนี้
หลังจาก download เสร็จแล้วก็ทำการ extract zip file ไปไว้ที่เครื่อง (ผมลงไว้ที่ drive c ) จากนั้นก็เข้าไปที่ directory bin แล้ว double click ที่โปรแกรม “jvisualvm”
พอโปรแกรม run ขึ้นมาแล้วจะได้หน้าจอดังนี้
เป็นอันว่าโปรแกรมเราพร้อมใช้งานแล้ว
ที่เห็น “VisualVM” ภายใต้ Local คือ JVM ที่เราใช้ในการ run โปรแกรม jvisualvm ซึ่งทำงานอยู่ในเครื่องเราเอง
เอาล่ะ ถึงเวลามาเพิ่ม tomcat server เข้าไปแล้ว
ให้ทำการ click ขวา แล้ว click ที่ “Add Remote Host…”
ใส่ ip ของ tomcat server เข้าไปแล้ว click ok
จะเห็นว่าภายใต้ Remote จะมีเครื่อง tomcat server เราเพิ่มขึ้นมาแล้ว
คราวนี้เวลาจะ remote เข้าไปจัดการ tomcat server เราก็ click ขวาที่เครื่องที่เราต้องการ แล้ว click “Add JMX Connection…”
ในช่อง Connection ให้ใส่เลข ip ของ tomcat server ตามด้วยเครื่องหมาย “:” (ตัวโปรแกรมจะขึ้นให้เองอยู่แล้ว) แล้วใส่เลข port ของ jxmremote ของตัว tomcat ที่เราทำการ config เอาไว้ลงไป
ส่วนของ “Do not require SSL connection” เรา check ไว้ให้ไม่ต้องใช้ SSL เพราะใน config เรากำหนดไว้ว่าไม่ต้องใช้ SSL สำหรับ jmxremote เสร็จแล้วก็กด ok ได้เลย
เราก็จะได้ jmxremote connection ที่เชื่อมไปที่ tomcat server ขึ้นมา โดยที่ตัวเลขหลัง pid คือเลขที่ process id ของ tomcat ที่ฝั่ง server
เมื่อ double click ที่ jmxremote connection ตัว VisualVM ก็จะทำการเชื่อมต่อไปที่ tomcat server และแสดงหน้าจอดังนี้
เรียบร้อย… คราวนี้อยากจัดการอะไรก็ tomcat server เราก็ทำต่อได้เลยครับ 😄