پرش به مطلب اصلی

پروفایلینگ

پروفایلینگ در حین کار، پشتهٔ فراخوانی پروسه‌تان را نمونه‌برداری می‌کند تا ببینید زمان واقعاً کجا می‌رود — همان‌جا که ردیابی گفته بود کند است.

ارورا هر دو شکل پروفایل را می‌پذیرد:

  • پروفایل تراکنشی (نسخهٔ ۱) — محدود به یک تراکنش.
  • قطعه‌های پروفایل پیوسته (نسخهٔ ۲) — جریان مداوم، بدون وابستگی به تراکنش.

راه‌اندازی​

پروفایلینگ سوار بر ردیابی است، پس traces_sample_rate باید ناصفر باشد.

sentry_sdk.init(
dsn="…",
traces_sample_rate=0.2,
profiles_sample_rate=1.0, # کسری *از تراکنش‌های نمونه‌برداری‌شده*
)
// Node.js
import { nodeProfilingIntegration } from "@sentry/profiling-node";

Sentry.init({
dsn: "…",
tracesSampleRate: 0.2,
profilesSampleRate: 1.0,
integrations: [nodeProfilingIntegration()],
});
# فایل .env لاراول
SENTRY_TRACES_SAMPLE_RATE=0.2
SENTRY_PROFILES_SAMPLE_RATE=1.0

مقدار profiles_sample_rate در traces_sample_rate ضرب می‌شود: 0.2 × 1.0 یعنی ۲۰٪ درخواست‌ها ترِیس می‌شوند و همهٔ همان‌ها پروفایل می‌شوند.

خواندن یک پروفایل​

صفحهٔ پروفایلینگ پروفایل‌ها را با تراکنش، مدت، تعداد نمونه، محیط و نسخه فهرست می‌کند. با باز کردن یکی:

  • فلیم‌گراف — عرض نشان‌دهندهٔ زمان است، نه تعداد نمونه. هر نمونه با فاصله تا نمونهٔ بعدی روی همان نخ وزن می‌گیرد، پس نخی که اتفاقاً دو برابر بیشتر نمونه‌برداری شده، دو برابر کندتر به نظر نمی‌رسد. فاصله‌ها کران‌دار می‌شوند تا یک پروفایلر متوقف‌شده نمودار را قبضه نکند.
  • زمان خودی هر تابع — زمانی که داخل خود تابع صرف شده، بدون توابع فراخوانده‌شده.
  • نخ‌ها — جابه‌جایی میان آن‌ها.

کندترین توابع برای کل پروژه نمای مستقل خودش را دارد؛ رتبه‌بندی از پیش محاسبه و ذخیره می‌شود، پس گرفتنش یک کوئری ایندکس‌دار است نه پویش همهٔ پروفایل‌ها.

API​

GET /api/v1/projects/{project_id}/profiles?stats_period=24h&limit=&offset=
GET /api/v1/projects/{project_id}/profiles/overview
GET /api/v1/projects/{project_id}/profiles/functions
GET /api/v1/projects/{project_id}/profiles/{profile_id}
GET /api/v1/projects/{project_id}/profiles/{profile_id}/flamegraph

هزینه​

پروفایل‌ها زیر سرویس پروفایلینگ و به ازای هر پروفایل محاسبه می‌شوند. حجیم‌ترین دادهٔ ارسالی SDK هم هستند، پس بعد از پیدا کردن مسیرهای داغ، profiles_sample_rate را در تولید پایین نگه دارید — یا فقط هنگام بررسی یک مشکل موقتاً بالا ببرید.

عیب‌یابی​

نشانهعلت / راه‌حل
هیچ پروفایلی نمی‌آیدtraces_sample_rate صفر است، بستهٔ پروفایلینگ نصب نیست (Node به @sentry/profiling-node نیاز دارد) یا پلتفرم پروفایلر ندارد
پروفایل هست ولی فلیم‌گراف خالی استتراکنش کوتاه‌تر از آن بوده که نمونه‌ای جمع شود — نقطهٔ سنگین‌تری را پروفایل کنید
همه‌چیز <unknown> استفریم‌های نیتیو بدون نماد؛ بیلد همراه با سیمبل منتشر کنید یا لایهٔ مفسری را پروفایل کنید
هزینه بالا می‌رودprofiles_sample_rate را کم کنید؛ در نرخ نمونه‌برداری ترِیس ضرب می‌شود