~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴
1. معرفی
گزارشهای تشخیصی Node.js اطلاعاتی جامع دربارهٔ وضعیت پردازش در زمان وقوع خطا یا بهدرخواست توسعهدهنده ارائه میدهند. این گزارشها شامل جزئیات سیستمعامل، نسخهٔ Node.js، مصرف CPU و حافظه، و وضعیت event loop هستند.
2. نحوهٔ تولید گزارش
- با استفاده از فلگهای خط فرمان مانند
--report-uncaught-exceptionیا--report-on-fatalerror. - با ارسال سیگنال (پیشفرض SIGUSR2).
- بهصورت برنامهنویسی با
process.report.writeReport()یاprocess.report.getReport().
3. محتوای گزارش
- header: شامل نسخهٔ گزارش، زمان، PID، نسخهٔ Node.js، و اطلاعات سیستم.
- javascriptStack: پشتهٔ جاوااسکریپت هنگام وقوع خطا.
- nativeStack: پشتهٔ بومی (C++/V8).
- javascriptHeap: آمار حافظهٔ Heap و فضایهای مختلف V8.
- resourceUsage: مصرف CPU، حافظه، و خطاهای صفحه.
- libuv: وضعیت handleهای libuv مانند async، timer، tcp.
- environmentVariables: متغیرهای محیطی پردازش.
- userLimits: محدودیتهای سیستم برای کاربر.
- sharedObjects: کتابخانههای مشترک بارگذاریشده.
4. مثال ساده
try {
process.chdir('/non-existent-path');
} catch (err) {
process.report.writeReport(err);
}
5. نسخههای گزارش
- Version 5: تغییر واحدهای اندازهگیری حافظه به بایت.
- Version 4: افزودن کلیدهای ipv4 و ipv6 به endpointها.
- Version 3: افزودن کلیدهای مصرف حافظه به resourceUsage.
- Version 2: پشتیبانی از Worker Threads.
- Version 1: نسخهٔ اولیهٔ گزارش.
6. پیکربندی
ویژگیهای process.report امکان تنظیم رفتار گزارشدهی را فراهم میکنند:
reportOnFatalError: تولید گزارش هنگام خطاهای بحرانی.reportOnSignal: تولید گزارش هنگام دریافت سیگنال.reportOnUncaughtException: تولید گزارش هنگام خطاهای کشفنشده.signal: تعیین سیگنال برای تولید گزارش.filenameوdirectory: مسیر و نام فایل گزارش.excludeNetworkوexcludeEnv: حذف اطلاعات شبکه یا متغیرهای محیطی.
7. تعامل با Worker Threads
هر Worker میتواند گزارش تولید کند و گزارش اصلی شامل اطلاعات همهٔ Workerهای فرزند خواهد بود. این قابلیت برای برنامههای چندریسمانی حیاتی است.
نتیجهگیری
گزارشهای تشخیصی Node.js ابزاری قدرتمند برای تحلیل خطاها و مشکلات در محیطهای توسعه و تولید هستند. با ارائهٔ اطلاعات جامع دربارهٔ پشتهها، حافظه، منابع، و سیستمعامل، این گزارشها به توسعهدهندگان کمک میکنند تا مشکلات را سریعتر شناسایی و رفع کنند.
نوشته و پژوهش شده توسط دکتر شاهین صیامی