สวัสดีทุกคน นี่เป็นโพสต์ที่ห้าในซีรี่ส์ Quarkus ของเรา! (ยังไงก็ตาม โปรดดูการสัมมนาผ่านเว็บของเรา
В
การวัดประสิทธิภาพเป็นพื้นฐานพื้นฐานของการอัพเกรดเกือบทั้งหมด และการรายงานการใช้หน่วยความจำเป็นส่วนสำคัญของกระบวนการวิเคราะห์ประสิทธิภาพ วันนี้เราจะมาดูเครื่องมือวัดที่เกี่ยวข้องซึ่งสามารถใช้เพื่อวัดปริมาณการปรับปรุงที่ทำได้โดยการปรับปรุงแอปพลิเคชัน Java ให้ทันสมัย
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการวัดการใช้หน่วยความจำ โปรดดูบทช่วยสอน Quarkus ที่ชื่อ
ด้านล่างนี้ เราจะแสดงวิธีเปรียบเทียบข้อมูลการใช้งานหน่วยความจำสำหรับแอปพลิเคชันสามประเภทที่แตกต่างกัน (JBoss EAP, แพ็คเกจ JAR และโปรแกรมปฏิบัติการ) โดยการรวบรวมข้อมูลบน Linux โดยใช้ยูทิลิตี้ pmap และ ps
เจบอส อีเอพี
เราเปิดตัวอินสแตนซ์ของแอปพลิเคชัน JBoss EAP (ดูหัวข้อ “การปรับใช้ helloworld” ใน
$ pgrep -lf jboss
7268 java
หมายเหตุ ตัวเลือก –a ช่วยให้คุณสามารถแยกบรรทัดคำสั่งทั้งหมดได้ (เช่น: $ pgrep -af jboss)
ตอนนี้เราใช้ PID 7268 ในคำสั่ง ps และ pmap
เช่นนี้
$ ps -o pid,rss,command -p 7268
PID RSS COMMAND
7268 665348 java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferI
และเช่นนี้
$ pmap -x 7268
7268: java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standa
Address Kbytes RSS Dirty Mode Mapping
00000000ae800000 1348608 435704 435704 rw--- [ anon ]
0000000100d00000 1035264 0 0 ----- [ anon ]
000055e4d2c2f000 4 4 0 r---- java
000055e4d2c30000 4 4 0 r-x-- java
000055e4d2c31000 4 0 0 r---- java
000055e4d2c32000 4 4 4 r---- java
000055e4d2c33000 4 4 4 rw--- java
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 3263224 672772 643024
เราดูค่า RSS และพบว่า JBoss EAP ใช้หน่วยความจำประมาณ 650 MB
แพ็คเกจจาร์
เราเปิดตัวแอปพลิเคชัน JAR (ดูหัวข้อ “เรียกใช้แพ็คเกจ helloworld ใน JAR” ใน
$ java -jar ./target/helloworld-<version>-runner.jar
เราดู PID อีกครั้งโดยใช้คำสั่ง pgrep (คราวนี้เราใช้ตัวเลือก -a ที่อธิบายไว้ข้างต้น):
$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar
เราเรียกใช้ ps และ pmap เพื่อวัดการใช้หน่วยความจำ แต่ตอนนี้สำหรับกระบวนการ 6408
เช่นนี้
$ ps -o pid,rss,command -p 6408
PID RSS COMMAND
6408 125732 java -jar ./target/helloworld-quarkus-runner.jar
และเช่นนี้
$ pmap -x 6408
6408: java -jar ./target/helloworld-quarkus-runner.jar
Address Kbytes RSS Dirty Mode Mapping
00000005d3200000 337408 0 0 rw--- [ anon ]
00000005e7b80000 5046272 0 0 ----- [ anon ]
000000071bb80000 168448 57576 57576 rw--- [ anon ]
0000000726000000 2523136 0 0 ----- [ anon ]
00000007c0000000 2176 2088 2088 rw--- [ anon ]
00000007c0220000 1046400 0 0 ----- [ anon ]
00005645b85d6000 4 4 0 r---- java
00005645b85d7000 4 4 0 r-x-- java
00005645b85d8000 4 0 0 r---- java
00005645b85d9000 4 4 4 r---- java
00005645b85da000 4 4 4 rw--- java
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 12421844 133784 115692
เราดู RSS อีกครั้งและพบว่าแพ็คเกจ JAR กินพื้นที่ประมาณ 130 MB
ไฟล์ปฏิบัติการได้
เราเปิดตัวเนทีฟ (ดูหัวข้อ “การรันไฟล์ปฏิบัติการ Helloworld เนทิฟ” ใน
$ ./target/helloworld-<version>-runner
ลองดูที่ PID ของมันอีกครั้ง:
$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner
จากนั้นเราใช้ ID กระบวนการผลลัพธ์ (6948) ในคำสั่ง ps และ pmap
เช่นนี้
$ ps -o pid,rss,command -p 6948
PID RSS COMMAND
6948 19084 ./target/helloworld-quarkus-runner
И вот так:
$ pmap -x 6948
6948: ./target/helloworld-quarkus-runner
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 12 12 0 r---- helloworld-quarkus-runner
0000000000403000 10736 8368 0 r-x-- helloworld-quarkus-runner
0000000000e7f000 7812 6144 0 r---- helloworld-quarkus-runner
0000000001620000 2024 1448 308 rw--- helloworld-quarkus-runner
000000000181a000 4 4 4 r---- helloworld-quarkus-runner
000000000181b000 16 16 12 rw--- helloworld-quarkus-runner
0000000001e10000 1740 156 156 rw--- [ anon ]
[...]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 1456800 20592 2684
เราดู RSS และเห็นว่าไฟล์ปฏิบัติการใช้หน่วยความจำประมาณ 20 MB
การเปรียบเทียบการใช้หน่วยความจำ
ดังนั้นเราจึงได้ตัวเลขต่อไปนี้สำหรับการใช้หน่วยความจำ:
- JBoss EAP - 650 เมกะไบต์
- แพ็คเกจ JAR – 130 MB
- ไฟล์ปฏิบัติการ – 20 MB
แน่นอนว่าไฟล์ปฏิบัติการนั้นใช้หน่วยความจำน้อยกว่ามาก
มาสรุปโพสต์ที่ 4 และ 5 กันดีกว่า
ในโพสต์นี้และโพสต์ก่อนหน้า เราได้ดูที่การปรับปรุงแอปพลิเคชัน Java ให้ทันสมัยโดยใช้เทคโนโลยีที่รองรับใน Quarkus (CDI และ Servlet 3) รวมถึงวิธีต่างๆ ในการพัฒนา สร้าง และรันแอปพลิเคชันดังกล่าว เราได้แสดงวิธีการรวบรวมข้อมูลการใช้งานหน่วยความจำเพื่อประเมินการปรับปรุงที่ได้จากการอัพเกรดดังกล่าว บทความเหล่านี้ช่วยให้คุณเข้าใจวิธีการทำงานของ Quarkus และเหตุใดจึงมีประโยชน์ ไม่ว่าคุณจะพูดถึงโปรแกรม helloworld ง่ายๆ ในตัวอย่างของเราหรือแอปพลิเคชันในชีวิตจริงที่ซับซ้อนกว่านี้มากก็ตาม
เราจะกลับมาในอีกสองสัปดาห์พร้อมโพสต์สุดท้ายเกี่ยวกับ Quarkus - เจอกันที่นั่น!
ในโพสต์สุดท้ายของเรา เราจะแสดงวิธีรวม AMQ Online และ Quarkus เพื่อสร้างระบบการรับส่งข้อความแบบ OpenShift ที่ทันสมัยโดยใช้เทคโนโลยีการรับส่งข้อความใหม่สองแบบ อ่านต่อ
ที่มา: will.com