async-profiler - مرتجل JVM منخفض العلى
async-profiler هي أداة تحليل العينات منخفضة العلى للجنة الافتراضية لجافا. أدوات جافا التقليدية فقط عينة في نقاط الأمان، والتي تميل النتائج نحو أي رمز يتفق أن يجلس بالقرب من نقطة أمان ويمكن أن يخفي المسار الساخن الحقيقي. async-profiler يستخدم AsyncGetCallTrace بالإضافة إلى أحداث perf للعينة في أي مكان، بما في ذلك الرمز الأصلي وإطارات kernel، مما يعطي صورة أكثر صدقًا. ملفات تعريف CPU والتخصيصات والقفل contention وغيرها، وتصدير مخططات اللهب أو JFR.
التثبيت
| الطريقة | كيف |
|---|
| تحميل | احصل على tarball الإفراج لمنصتك |
| استخراج | tar xzf async-profiler-*.tar.gz |
| تشغيل | ./bin/asprof <pid> (أحدث) أو ./profiler.sh <pid> |
| الأذونات | قد تحتاج إلى sysctl kernel.perf_event_paranoid=1 و kernel.kptr_restrict=0 |
| التحقق | ./bin/asprof --version |
التحليل الأساسي
| الأمر | الوصف |
|---|
asprof -d 30 -f out.html <pid> | ملف تعريف 30 ثانية → مخطط اللهب |
asprof -e alloc -d 30 -f alloc.html <pid> | تخصيص ملف التعريف |
asprof -e lock -d 30 -f lock.html <pid> | تأمين contention |
asprof -e wall -d 30 -f wall.html <pid> | ساعة الحائط (تشمل الانتظار) |
asprof start <pid> / asprof stop -f out.html <pid> | بدء/إيقاف يدوي |
jps | البحث عن pid JVM |
أنواع الأحداث
| الحدث | المقاييس |
|---|
cpu | وقت CPU (افتراضي) |
alloc | تخصيصات الكومة حسب المكدس |
lock | قفل/مراقب contention |
wall | ساعة الحائط بما في ذلك وقت محظور |
itimer | الرجوع عندما يكون perf غير متاح |
cache-misses, page-faults | أحداث perf الأجهزة/البرمجيات |
# أين تقضي التطبيق فعلاً وقت الساعة الحائط (شمل انتظار IO)؟
./bin/asprof -e wall -t -d 30 -f wall.html <pid>
تنسيقات الإخراج
| العلم | ينتج |
|---|
-f out.html | مخطط اللهب التفاعلي |
-o collapsed | المكاده المطوية (لأدوات FlameGraph) |
-o tree | شجرة استدعاء |
-o flat | قائمة الطريقة الساخنة المسطحة |
-f out.jfr | تسجيل JFR (مفتوح في JMC) |
-t | انقسام حسب الموضوع |
الإطلاق مع الوكيل
# ملف التعريف من بدء JVM (يلتقط الاحماء)
java -agentpath:/path/libasyncProfiler.so=start,event=cpu,file=profile.html \
-jar app.jar
| خيار الوكيل | الغرض |
|---|
start | ابدأ على الفور |
event=cpu|alloc|lock | ما يجب أخذ عينة منه |
file=NAME | مسار الإخراج |
interval=10ms | فترة أخذ العينات |
jfr | بث تنسيق JFR |
قراءة مخطط اللهب
| الميزة | المعنى |
|---|
| العرض | حصة العينات (الوقت) — أوسع أكثر سخونة |
| الارتفاع | عمق المكدس، وليس الكلفة |
| الألوان | جافا (أخضر)، أصلي (أصفر-ish)، kernel (برتقالي) |
| انقر | تكبير في شجرة فرعية |
| بحث | تسليط الضوء على الإطارات المطابقة |
ابحث عن الهضاب العريضة — إطار واحد يستهلك حصة أفقية كبيرة هو البقعة الساخنة الخاصة بك. يتم مزج إطارات جافا/أصلي/kernel هي بالضبط ما تخفيه محللات الانحياز نقطة الأمان.
سير العمل الشائع
# 1) البقع الساخنة CPU في الخدمة الجارية
./bin/asprof -d 60 -f cpu.html $(jps | grep MyApp | cut -d' ' -f1)
# 2) مطاردة ضغط القمامة — من يخصص الأكثر؟
./bin/asprof -e alloc -d 60 -f alloc.html <pid>
# 3) الخيوط تبدو خاملة لكن الكمون مرتفع → ساعة الحائط
./bin/asprof -e wall -t -d 30 -f wall.html <pid>
# 4) Contention على مورد مشترك
./bin/asprof -e lock -d 30 -f lock.html <pid>
async-profiler مقابل البدائل
| الجانب | async-profiler | JFR | VisualVM |
|---|
| انحياز نقطة الأمان | تم تجنبه | مخفض | حاضر |
| إطارات أصلي/kernel | نعم | محدود | لا |
| العلى | جداً منخفض | منخفض | أعلى |
| تخصيص ملف التعريف | نعم | نعم | أساسي |
| الأفضل لـ | نقاط ساخنة JVM دقيقة | تسجيل مستمر مدمج | فحص GUI سريع |
نظير JVM إلى perf + FlameGraph للرمز الأصلي.
الموارد