Quarkus: การปรับปรุงแอปพลิเคชันให้ทันสมัยโดยใช้ Helloworld เป็นตัวอย่างจาก JBoss EAP Quickstart (ต่อ)

สวัสดีทุกคน นี่เป็นโพสต์ที่ห้าในซีรี่ส์ Quarkus ของเรา! (ยังไงก็ตาม โปรดดูการสัมมนาผ่านเว็บของเรา “นี่คือ Quarkus – เฟรมเวิร์ก Java ดั้งเดิมของ Kubernetes”. เราจะแสดงวิธีเริ่มต้นจากศูนย์หรือถ่ายโอนโซลูชันสำเร็จรูป)

Quarkus: การปรับปรุงแอปพลิเคชันให้ทันสมัยโดยใช้ Helloworld เป็นตัวอย่างจาก JBoss EAP Quickstart (ต่อ)

В โพสต์ก่อนหน้า เราดูที่การปรับปรุงแอปพลิเคชัน Java ให้ทันสมัยโดยใช้เทคโนโลยีที่รองรับ Quarkus (CDI และ Servlet 3) โดยใช้โปรแกรม helloworld จากพื้นที่เก็บข้อมูลเป็นตัวอย่าง การเริ่มต้นอย่างรวดเร็วของแพลตฟอร์มแอปพลิเคชัน Red Hat JBoss Enterprise (JBoss EAP). วันนี้เราจะพูดถึงหัวข้อของการปรับปรุงให้ทันสมัยต่อไปและหารือเกี่ยวกับปัญหาการใช้หน่วยความจำ

การวัดประสิทธิภาพเป็นพื้นฐานพื้นฐานของการอัพเกรดเกือบทั้งหมด และการรายงานการใช้หน่วยความจำเป็นส่วนสำคัญของกระบวนการวิเคราะห์ประสิทธิภาพ วันนี้เราจะมาดูเครื่องมือวัดที่เกี่ยวข้องซึ่งสามารถใช้เพื่อวัดปริมาณการปรับปรุงที่ทำได้โดยการปรับปรุงแอปพลิเคชัน Java ให้ทันสมัย

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการวัดการใช้หน่วยความจำ โปรดดูบทช่วยสอน Quarkus ที่ชื่อ การวัดประสิทธิภาพ—เราจะวัดการใช้หน่วยความจำได้อย่างไร?

ด้านล่างนี้ เราจะแสดงวิธีเปรียบเทียบข้อมูลการใช้งานหน่วยความจำสำหรับแอปพลิเคชันสามประเภทที่แตกต่างกัน (JBoss EAP, แพ็คเกจ JAR และโปรแกรมปฏิบัติการ) โดยการรวบรวมข้อมูลบน Linux โดยใช้ยูทิลิตี้ pmap และ ps

เจบอส อีเอพี

เราเปิดตัวอินสแตนซ์ของแอปพลิเคชัน JBoss EAP (ดูหัวข้อ “การปรับใช้ helloworld” ใน โพสต์ก่อนหน้า) จากนั้นค้นหากระบวนการ PID (ในตัวอย่างของเราคือ 7268) โดยใช้คำสั่งต่อไปนี้:

$ 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

เพิ่มความคิดเห็น