سلام به همه - این پنجمین پست از سری Quarkus ما است! (به هر حال، وبینار ما را تماشا کنید
В
اندازه گیری عملکرد اساس اساسی تقریباً هر ارتقاء است و گزارش استفاده از حافظه بخش مهمی از فرآیند تحلیل عملکرد است. امروز ما به ابزارهای اندازه گیری مربوطه نگاه خواهیم کرد که می توانند برای تعیین کمیت پیشرفت های به دست آمده توسط مدرن سازی برنامه های جاوا مورد استفاده قرار گیرند.
برای اطلاعات بیشتر در مورد اندازه گیری میزان مصرف حافظه، به آموزش کوارکوس با عنوان مراجعه کنید
در زیر به سادگی به شما نشان خواهیم داد که چگونه داده های استفاده از حافظه را برای سه نوع مختلف برنامه (JBoss EAP، بسته JAR و قابل اجرا) با جمع آوری داده ها در لینوکس با استفاده از ابزارهای pmap و ps مقایسه کنید.
JBoss EAP
ما یک نمونه از برنامه 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 مگابایت حافظه مصرف می کند.
بسته JAR
ما برنامه JAR را راه اندازی می کنیم (به بخش "اجرای helloworld بسته بندی شده در JAR" مراجعه کنید
$ java -jar ./target/helloworld-<version>-runner.jar
ما دوباره با استفاده از دستور pgrep به PID نگاه می کنیم (این بار از گزینه -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 مگابایت مصرف می کند.
فایل اجرایی
ما نسخه بومی را راه اندازی می کنیم (به بخش «اجرای فایل اجرایی helloworld بومی» مراجعه کنید
$ ./target/helloworld-<version>-runner
بیایید دوباره به PID آن نگاه کنیم:
$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner
و سپس از شناسه فرآیند حاصل (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 مگابایت حافظه را اشغال می کند.
مقایسه مصرف حافظه
بنابراین، ما اعداد زیر را برای استفاده از حافظه به دست آوردیم:
- JBoss EAP - 650 مگابایت.
- بسته JAR – 130 مگابایت.
- فایل اجرایی – 20 مگابایت.
بدیهی است که فایل اجرایی حافظه بسیار کمتری را اشغال می کند.
بیایید پست های 4 و 5 را خلاصه کنیم
در این پست و پست های قبلی، به مدرن سازی برنامه های جاوا با استفاده از فناوری های پشتیبانی شده در کوارکوس (CDI و Servlet 3) و همچنین راه های مختلف برای توسعه، ساخت و اجرای چنین برنامه هایی پرداختیم. ما نشان دادیم که چگونه دادههای استفاده از حافظه را برای ارزیابی پیشرفتهای بهدستآمده از چنین ارتقایی جمعآوری کنیم. این مقالهها به شما کمک میکنند بفهمید کوارکوس چگونه کار میکند و چرا مفید است - چه در مورد برنامه ساده helloworld در مثالهای ما صحبت کنید یا برنامههای بسیار پیچیدهتر در زندگی واقعی.
ما تا دو هفته دیگر با آخرین پست درباره کوارکوس باز خواهیم گشت - شما را آنجا می بینیم!
در آخرین پست خود، نحوه ترکیب AMQ Online و Quarkus را برای ساختن یک سیستم پیام رسانی مبتنی بر OpenShift مدرن با استفاده از دو فناوری پیام رسانی جدید نشان خواهیم داد. ادامه مطلب
منبع: www.habr.com