# پروفایلینگ > https://docs.errora.org/products/profiling پروفایلینگ در حین کار، پشتهٔ فراخوانی پروسه‌تان را نمونه‌برداری می‌کند تا ببینید زمان واقعاً کجا می‌رود — همان‌جا که ردیابی گفته بود کند است. ارورا هر دو شکل پروفایل را می‌پذیرد: - **پروفایل تراکنشی** (نسخهٔ ۱) — محدود به یک تراکنش. - **قطعه‌های پروفایل پیوسته** (نسخهٔ ۲) — جریان مداوم، بدون وابستگی به تراکنش. ## راه‌اندازی پروفایلینگ سوار بر ردیابی است، پس `traces_sample_rate` باید ناصفر باشد. ```python sentry_sdk.init( dsn="…", traces_sample_rate=0.2, profiles_sample_rate=1.0, # کسری *از تراکنش‌های نمونه‌برداری‌شده* ) ``` ```javascript // Node.js import { nodeProfilingIntegration } from "@sentry/profiling-node"; Sentry.init({ dsn: "…", tracesSampleRate: 0.2, profilesSampleRate: 1.0, integrations: [nodeProfilingIntegration()], }); ``` ```php # فایل .env لاراول SENTRY_TRACES_SAMPLE_RATE=0.2 SENTRY_PROFILES_SAMPLE_RATE=1.0 ``` مقدار `profiles_sample_rate` در `traces_sample_rate` ضرب می‌شود: `0.2 × 1.0` یعنی ۲۰٪ درخواست‌ها ترِیس می‌شوند و همهٔ همان‌ها پروفایل می‌شوند. ## خواندن یک پروفایل صفحهٔ **پروفایلینگ** پروفایل‌ها را با تراکنش، مدت، تعداد نمونه، محیط و نسخه فهرست می‌کند. با باز کردن یکی: - **فلیم‌گراف** — عرض نشان‌دهندهٔ *زمان* است، نه تعداد نمونه. هر نمونه با فاصله تا نمونهٔ بعدی **روی همان نخ** وزن می‌گیرد، پس نخی که اتفاقاً دو برابر بیشتر نمونه‌برداری شده، دو برابر کندتر به نظر نمی‌رسد. فاصله‌ها کران‌دار می‌شوند تا یک پروفایلر متوقف‌شده نمودار را قبضه نکند. - **زمان خودی هر تابع** — زمانی که داخل خود تابع صرف شده، بدون توابع فراخوانده‌شده. - **نخ‌ها** — جابه‌جایی میان آن‌ها. **کندترین توابع** برای کل پروژه نمای مستقل خودش را دارد؛ رتبه‌بندی از پیش محاسبه و ذخیره می‌شود، پس گرفتنش یک کوئری ایندکس‌دار است نه پویش همهٔ پروفایل‌ها. ## API ```text 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` نیاز دارد) یا پلتفرم پروفایلر ندارد | | پروفایل هست ولی فلیم‌گراف خالی است | تراکنش کوتاه‌تر از آن بوده که نمونه‌ای جمع شود — نقطهٔ سنگین‌تری را پروفایل کنید | | همه‌چیز `` است | فریم‌های نیتیو بدون نماد؛ بیلد همراه با سیمبل منتشر کنید یا لایهٔ مفسری را پروفایل کنید | | هزینه بالا می‌رود | `profiles_sample_rate` را کم کنید؛ در نرخ نمونه‌برداری ترِیس ضرب می‌شود |