گزارش‌های تشخیصی در Node.js

گزارش‌های تشخیصی در Node.js یک خلاصهٔ JSON از وضعیت پردازش فراهم می‌کنند که شامل اطلاعاتی دربارهٔ پشتهٔ جاوااسکریپت و بومی، حافظهٔ Heap، مصرف منابع، نسخه‌های کامپوننت‌ها، و محدودیت‌های سیستم است. این گزارش‌ها برای توسعه، تست، و محیط‌های تولید طراحی شده‌اند تا به شناسایی و رفع مشکلات کمک کنند. گزارش‌ها می‌توانند به‌صورت خودکار در شرایط خاص (مانند خطاهای کشف‌نشده یا خطاهای بحرانی) یا به‌صورت دستی از طریق API تولید شوند.

process.report.writeReport()process.report.getReport()--report-uncaught-exception / --report-on-fatalerror / --report-on-signal

~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 ابزاری قدرتمند برای تحلیل خطاها و مشکلات در محیط‌های توسعه و تولید هستند. با ارائهٔ اطلاعات جامع دربارهٔ پشته‌ها، حافظه، منابع، و سیستم‌عامل، این گزارش‌ها به توسعه‌دهندگان کمک می‌کنند تا مشکلات را سریع‌تر شناسایی و رفع کنند.


نوشته و پژوهش شده توسط دکتر شاهین صیامی