Monitoring Java Virtual Machine

จากบทความ Java Virtual Machine Memory Management ทำให้เราพอทราบได้แล้วว่าการทำงานของ GC ใน Virtual Machine ทำงานอย่างไรทีนี้ เราก็มาดูของ จริงกันว่าโปรแกรม java ของเรามันใช้งานไปเท่าไหร่ มีอะไรเกิดขึ้นบ้างระหว่างการทำงานของมัน โดยผมเลือกใช้เจ้า jvmstat ดาวโหลดได้จาก http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-jvm-419420.html#jvmstat-3_0-mr-oth-JPR มาทำการ ตรวจสอบดูว่า Virtual Machine ของเราใช้ memory ไปเท่าไหร่แล้ว ซึ่งเจ้าโปรแกรมตัวนี้จะแสดงผลออกมาเป็นแบบกราฟให้เราได้ชมกัน

ตัวอย่างของผมจะใช้เครื่อง Mac OS X และผมจะทำการ Monitoring JVM ของ Tomcat นะครับ โดนก่อนอื่นเลยสำหรับ คนที่ใช้ Mac ต้องทำ symbolic link ของ jar ไฟล์ที่ยังไม่ครบก่อนนะครับ สำหรับ OS อื่นๆให้ข้ามตรงนี้ไปเลยครับ

ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Classes/classes.jar /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/tools.jar

สำหรับ Mac OS X นั้นไฟล์นี้จะอยู่ผิดที่ผิดทางไปหน่อยต้องจัดการให้มันมาอยู่ในที่ที่ควรจะเป็น

จากนั้นทำการ set Home โดย set ตามนี้ครับ ถ้าไม่ใช่ Mac ให้ set ไปที่ path ของ java ของคุณนะครับ

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
export JVMSTAT_JAVA_HOME=$JAVA_HOME

ที่นี้เราก็พร้อมสำหรับการทดสอบกันแล้ว โดยเริ่มจาก ทำการเปิด Tomcat ก่อนโดย

path-to-tomcat/apache-tomcat-7.0.33/bin/startup.sh

ถ้า Tomcat รันอย่างถูกต้องเราจะสามารถเปิดเว็บที่ localhost:8080 ได้ครับ
จากนั้นทำการหาโปรเซส id ของ Windows ให้ดูที่ Task manager ได้เลยครับโปรเซสชื่อ java.exe
สำหรับสาย Unix/Linux ให้ใช้คำสั่ง

ps -ef | grep java

  501   878     1   0  1:00AM ttys000    0:04.05 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java -Djava.util.logging.config.file=/Users/san/Develop/apache-tomcat-7.0.33/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/Users/san/Develop/apache-tomcat-7.0.33/endorsed -classpath /Users/san/Develop/apache-tomcat-7.0.33/bin/bootstrap.jar:/Users/san/Develop/apache-tomcat-7.0.33/bin/tomcat-juli.jar -Dcatalina.base=/Users/san/Develop/apache-tomcat-7.0.33 -Dcatalina.home=/Users/san/Develop/apache-tomcat-7.0.33 -Djava.io.tmpdir=/Users/san/Develop/apache-tomcat-7.0.33/temp org.apache.catalina.startup.Bootstrap start
  501  1091   856   0  1:38AM ttys000    0:00.00 grep java

จะเห็นว่าผมได้ผลลัพธ์มาสองอันให้เลือกอันที่มี detail ไปที่ tomcat ครับจะมี process id เป็น 878 ซึ่งอีกอันที่เป็น process id 1091 เป็นอันที่เราสั่งรันเมื่อกี้
แต่เดี๋ยวก่อนเรามีวิธีที่ง่ายกว่ามานำเสนอ java นั้นจะมี tool ตัวหนึ่งชื่อ jps มาให้ซึ่งสามารถใช้งานได้ตามตัวอย่างด้านล่างเลยครับ

$JAVA_HOME/bin/jps

1097 Jps
878 Bootstrap

จากผลลัพธ์ที่ได้จะมีสองอันคือ Jps กับ Bootstrap ซึ่ง tomcat นั้นใช้ Bootstrap ในการรัน(ตอนเราสั่ง startup.sh มันจะบอกครับให้ดูที่ log ที่มันพ่นออกมา) เป็นอันว่า process id ของผมที่จะใช้คือ 878

ที่นี้เรามา monitoring กันโดยใช้คำสั่ง

path-to-jvmstat/jvmstat/bin/visualgc 878

มันก็จะเด้งหน้า

Screen Shot 2556-01-04 at 1.48.48 AM

ซึ่งให้ไปดูคำอธิบายของบทความ Java Virtual Machine Memory Management ประกอบนะครับ ซึ่งภาพที่ผมได้วาดไว้จะเหมือนกันกราฟที่ได้จาก jvmstat ครับ



me on google plus+Jirawong Wongdokpuang

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s