برنامه نویسی

مدیریت سیاهههای مربوط به PM2: جلوگیری از مشکلات عملکرد در برنامه های Node.js

اگر برنامه های Node.js را در تولید اجرا می کنید ، احتمالاً با PM2 روبرو شده اید ، مدیر فرآیند محبوب که به شما کمک می کند تا برنامه های شما به طور هموار اجرا شود. در حالی که PM2 ویژگی های بسیار خوبی را برای مدیریت و نظارت بر برنامه های شما ارائه می دهد ، یک مسئله بالقوه وجود دارد که بسیاری از توسعه دهندگان از آن غافل می شوند: رشد پرونده را وارد کنید.

در این مقاله ، ما بررسی خواهیم کرد که چگونه پرونده های بزرگ ورود به سیستم PM2 می توانند بر عملکرد برنامه شما تأثیر بگذارند و راه حل های عملی را برای مدیریت موثر این سیاههها ارائه دهیم.

مشکل: چگونه سیاهههای مربوط به PM2 بر عملکرد تأثیر می گذارند

هنگامی که PM2 برنامه های Node.js شما را مدیریت می کند ، پرونده های ورود به سیستم را برای ضبط خروجی استاندارد و جریان خطا ایجاد می کند. با گذشت زمان ، این سیاهههای مربوط می توانند بسیار بزرگ رشد کنند – گاهی اوقات به اندازه گیگابایت می رسند. یک پرونده ورود به سیستم 20 گیگابایتی در برنامه های شلوغ که ماهها بدون مدیریت مناسب ورود به سیستم کار می کنند غیر معمول نیست.

این پرونده های بزرگ ورود به سیستم می توانند چندین مشکل عملکرد ایجاد کنند:

  1. افزایش دیسک I/O: PM2 به طور مداوم برای ورود به پرونده ها می نویسد. هنگامی که این پرونده ها بسیار زیاد می شوند ، عملیات نوشتن با منابع منابع بیشتری پیدا می کنند و با برنامه شما برای دسترسی به دیسک رقابت می کنند.

  2. فشار حافظه: مدیریت پرونده های بسیار بزرگ نیاز به تخصیص حافظه اضافی دارد ، به طور بالقوه آنچه را که برای برنامه node.js شما در دسترس است ، کاهش می دهد.

  3. عملکرد سیستم فایل کندتر: عملیاتی که باید از طریق پرونده جستجو کنند با افزایش اندازه پرونده کندتر می شوند.

  4. عوارض پشتیبان: فایلهای بزرگ ورود به سیستم باعث می شود که پشتیبان گیری بیشتر وقت گیر و ذخیره سازی باشد.

بیایید به چندین رویکرد برای حل این مشکل ، از ساده ترین تا پیشرفته ترین نگاه کنیم.

راه حل 1: کوتاه ورود به سیستم دستی

سریعترین راه برای پرداختن به یک مسئله فوری با پرونده های بزرگ ورود به سیستم ، کوتاه کردن دستی آنها است. در اینجا چگونه:

# Truncate all PM2 logs
pm2 flush

# Truncate a specific application's logs
truncate -s 0 ~/.pm2/logs/your-app-name-out.log
truncate -s 0 ~/.pm2/logs/your-app-name-error.log
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در truncate فرمان بدون حذف خود پرونده ، اندازه پرونده را به صفر کاهش می دهد و به PM2 اجازه می دهد تا به همان فایل ادامه دهد.

راه حل 2: پاکسازی برنامه ریزی شده با Cron

برای جلوگیری از رشد پرونده های ورود به سیستم در وهله اول ، می توانید یک کار CRON را تنظیم کنید تا به طور منظم سیاهههای مربوطه را مدیریت کنید. در اینجا چندین رویکرد آورده شده است:

گزینه A: پرونده های ورود به سیستم کوتاه

# Add to crontab (crontab -e)
# Run at midnight every day
0 0 * * * truncate -s 0 ~/.pm2/logs/*.log
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گزینه B: پرونده های ورود به سیستم را حذف کنید

# Add to crontab (crontab -e)
# Run at midnight every day
0 0 * * * rm -f ~/.pm2/logs/*.log
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گزینه C: محتوای فهرست ورود به سیستم را پاک کنید

# Add to crontab (crontab -e)
# Run at midnight every day
0 0 * * * rm -rf ~/.pm2/logs/* && mkdir -p ~/.pm2/logs
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گزینه D: سیاهههای مربوط به قدیمی تر از X روز را حذف کنید

# Add to crontab (crontab -e)
# Delete logs older than 7 days
0 0 * * * find ~/.pm2/logs -type f -name "*.log" -mtime +7 -delete
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

راه حل 3: با استفاده از دستور Flush داخلی PM2 با Cron

PM2 یک flush فرمان که تمام سیاهههای مربوط به برنامه را پاک می کند:

# Add to crontab (crontab -e)
0 0 * * * pm2 flush
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این رویکرد ساده تر از کوتاه کردن دستی پرونده های خاص است و در تمام برنامه های مدیریت شده با PM2 شما کار می کند.

راه حل 4: ماژول Logrotate PM2 (توصیه شده)

ظریف ترین راه حل استفاده از ماژول رسمی چرخش ورود به سیستم PM2 است. این رویکرد بیشترین کنترل را به شما می دهد و بهترین شیوه ها را برای مدیریت ورود به سیستم دنبال می کند.

مرحله 1: ماژول را نصب کنید

pm2 install pm2-logrotate
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: تنظیمات چرخش را پیکربندی کنید

# Set maximum size before rotation
pm2 set pm2-logrotate:max_size 10M

# Keep only 10 rotated files
pm2 set pm2-logrotate:retain 10

# Compress rotated logs to save space
pm2 set pm2-logrotate:compress true

# Rotate logs daily at midnight
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'

# Use date-based suffixes for rotated logs
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از این تنظیمات ، سیاهههای مربوط به هنگام رسیدن به اندازه 10 مگابایت یا نیمه شب هر روز ، به طور خودکار می چرخند ، هر کدام از اول باشد. فقط 10 پرونده ورود به سیستم اخیر نگهداری می شوند و برای صرفه جویی در فضا فشرده می شوند.

راه حل 5: خدمات ورود به سیستم خارجی

برای نیازهای پیشرفته تر ، در نظر بگیرید که فراتر از ورود به سیستم محلی به طور کلی:

  1. از یک سرویس ورود به سیستم اختصاصی استفاده کنید مانند Loggly ، Papertrail یا Elk Stack
  2. راه حل ورود به سیستم سفارشی را اجرا کنید با استفاده از Winston یا Bunyan که سیاهههای مربوط به ذخیره سازی خارجی را ارسال می کند
  3. از ورود به سیستم ارکستراسیون کانتینر استفاده کنید مانند ورود به سیستم Kubernetes با Fluentd

تنظیم مدیریت ورود به سیستم برای مناطق مختلف زمانی

اگر سرور شما در یک منطقه زمانی متفاوت از زمان محلی شما اجرا می شود ، باید برنامه Cron خود را بر این اساس تنظیم کنید. به عنوان مثال ، اگر می خواهید سیاهههای مربوط به ساعت 6 صبح استاندارد هند (IST) بچرخند ، که UTC+5: 30 است ، از آنها استفاده می کنید:

# 6 AM IST = 00:30 UTC
# Add to crontab (crontab -e)
30 0 * * * pm2 flush
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا نحوه محاسبه این مورد برای مناطق زمانی دیگر آورده شده است:

  1. زمان محلی هدف خود را مشخص کنید (به عنوان مثال ، 6 صبح IST)
  2. جبران UTC را برای آن منطقه زمانی تعیین کنید (IST UTC+5: 30 است)
  3. افست را از زمان هدف خود کم کنید (6:00 – 5:30 = 00:30 UTC)
  4. از زمان UTC حاصل در برنامه Cron خود استفاده کنید

بهترین روشها

صرف نظر از اینکه کدام راه حل را انتخاب می کنید ، این بهترین روش ها را دنبال کنید:

  1. نظارت بر رشد ورود به سیستم: به طور مرتب اندازه پرونده های ورود به سیستم را با آن بررسی کنید du -sh ~/.pm2/logs/
  2. سیاهههای مربوط به پشتیبان گیری: قبل از اجرای هرگونه پاکسازی ، سیاهههای مربوط به بایگانی که حاوی اطلاعات ارزشمندی هستند
  3. راه حل خود را آزمایش کنید: تأیید کنید که برنامه های شما پس از پاکسازی ورود به سیستم به درستی کار می کنند
  4. رویکرد خود را مستند کنید: اطمینان حاصل کنید که تیم شما می داند که چگونه سیاههها مدیریت می شوند
  5. الزامات مربوط به انطباق را در نظر بگیرید: برخی از صنایع دارای نیازهای خاص برای حفظ ورود به سیستم هستند

پایان

پرونده های بزرگ ورود به سیستم PM2 می توانند بر عملکرد برنامه Node.js شما تأثیر بگذارند. با اجرای یکی از رویکردهای ذکر شده در این مقاله ، می توانید از این مشکلات جلوگیری کرده و از اجرای برنامه های خود به طور هموار اطمینان حاصل کنید.

برای اکثر محیط های تولید ، ماژول Logrotate PM2 (راه حل 4) بهترین تعادل سادگی و کنترل را ارائه می دهد. با این حال ، هر یک از این روشها به جلوگیری از مشکلات عملکرد مرتبط با پرونده های بزرگ ورود به سیستم کمک می کند.

به یاد داشته باشید که مدیریت ورود به سیستم مؤثر بخش مهمی در حفظ برنامه های تولید سالم است. صرف وقت برای تنظیم چرخش مناسب ، شما را از عیب یابی مشکلات عملکرد مرموز در جاده نجات می دهد.

برنامه نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا