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


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

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه