آموزش لینوکس

بررسی مصرف RAM و CPU در لینوکس: چطور درست و دقیق آن را ببینیم؟

بررسی مصرف RAM و CPU در لینوکس با ابزارهای استانداردی مثل top، htop، free، ps و vmstat انجام می‌شود. نکته مهم فقط دیدن اعداد نیست، بلکه تفسیر درست آن‌ها برای تشخیص فرایندهای پرمصرف، فشار حافظه و تفاوت مشکل CPU با I/O است.

بررسی مصرف RAM و CPU در لینوکس با top و free و htop

بررسی مصرف RAM و CPU در لینوکس یکی از اولین کارهایی است که هنگام کند شدن سیستم، پاسخ‌گویی ضعیف یک سرویس یا کارکرد مداوم فن باید انجام دهید. با این حال، فقط اجرای چند فرمان کافی نیست؛ مهم‌تر از آن، تفسیر درست خروجی است. برای مثال، پر بودن نسبی حافظه همیشه به معنی کمبود RAM نیست و بالا بودن مصرف CPU هم لزوماً نشان نمی‌دهد که ریشه مشکل فقط پردازنده است.

بررسی مصرف RAM و CPU در لینوکس با top و free و htop

در این مقاله توضیح می‌دهیم چطور با ابزارهای رایج لینوکس برای بررسی مصرف RAM و CPU در لینوکس کار کنیم، خروجی آن‌ها را درست بخوانیم، فرایندهای پرمصرف را پیدا کنیم و در عیب‌یابی روزمره به جمع‌بندی نادرست نرسیم. تمرکز روی ابزارهایی است که در بیشتر توزیع‌ها در دسترس‌اند یا به‌سادگی نصب می‌شوند.

بررسی مصرف RAM و CPU در لینوکس از کجا شروع می‌شود؟

پیش از آن‌که روی یک فرایند خاص متمرکز شوید، بهتر است یک تصویر کلی از وضعیت سیستم داشته باشید. برای این کار معمولاً سه ابزار پایه کافی هستند: uptime، free و top.

uptime
free -h
top

فرمان uptime علاوه بر زمان روشن بودن سیستم، مقدار load average را هم نشان می‌دهد. این عدد معادل مستقیم «درصد CPU» نیست، بلکه نشان می‌دهد چند کار در صف اجرا یا در انتظار منابع بوده‌اند. اگر بدون توجه به تعداد هسته‌ها آن را تفسیر کنید، ممکن است وضعیت را بدتر یا بهتر از واقعیت ببینید.

فرمان free -h وضعیت حافظه را در قالبی خوانا نمایش می‌دهد. در لینوکس، بخشی از RAM برای بافر و کش فایل‌سیستم استفاده می‌شود؛ بنابراین بالا بودن حافظه استفاده‌شده همیشه نشانه بحران نیست. معمولاً مقدار available برای درک فضای واقعاً در دسترس مفیدتر از نگاه صرف به used است.

مصرف CPU را با top چطور بخوانیم؟

top یکی از رایج‌ترین ابزارها برای مشاهده زنده مصرف منابع است. در بالای خروجی آن معمولاً خلاصه‌ای از وضعیت CPU، حافظه و تعداد فرایندها دیده می‌شود و پایین‌تر، فهرست فرایندها قرار دارد.

top

در بخش CPU معمولاً با فیلدهایی مانند us، sy، id و گاهی wa روبه‌رو می‌شوید:

  • us: زمان صرف‌شده برای اجرای کدهای سطح کاربر
  • sy: زمان صرف‌شده در هسته سیستم‌عامل
  • id: زمان بیکاری CPU
  • wa: زمان انتظار برای عملیات ورودی/خروجی

اگر wa بالا باشد، الزاماً مشکل از پردازنده نیست. ممکن است فرایندها منتظر دیسک یا حتی منابع ورودی/خروجی دیگر باشند. این نکته در سرورهایی که پایگاه داده، نسخه پشتیبان یا عملیات فشرده‌سازی اجرا می‌کنند بسیار مهم است.

برای مرتب‌سازی فرایندها بر اساس مصرف CPU در top معمولاً کافی است داخل برنامه کلید P را بزنید. برای مرتب‌سازی بر اساس مصرف حافظه نیز کلید M کاربرد دارد. اگر فقط می‌خواهید چند فرایند اول را سریع ببینید، همین ابزار اغلب کافی است.

نمایش مصرف هر هسته

در سیستم‌های چند‌هسته‌ای، دیدن میانگین کل CPU همیشه کافی نیست. ممکن است یک فرایند تک‌نخی فقط یک هسته را کاملاً درگیر کرده باشد، در حالی که میانگین کل مصرف پایین به نظر برسد. در top معمولاً با فشردن کلید 1 می‌توانید مصرف هسته‌ها را جداگانه ببینید.

htop: وقتی خوانایی مهم‌تر است

اگر روی سیستم شما htop نصب باشد، کار با آن معمولاً راحت‌تر از top است. این ابزار نمایی خواناتر، پیمایش ساده‌تر و امکان جست‌وجوی بهتر میان فرایندها را فراهم می‌کند.

htop

در htop می‌توانید:

  • فرایندها را بر اساس CPU یا RAM مرتب کنید
  • درخت فرایندها را ببینید تا ارتباط پردازه والد و فرزند مشخص شود
  • یک فرایند خاص را جست‌وجو کنید
  • با دقت بیشتری ببینید کدام کاربر یا سرویس مصرف بالاتری دارد

این ابزار برای شناسایی سریع برنامه‌هایی که در پس‌زمینه منابع را مصرف می‌کنند بسیار مناسب است، اما همچنان باید خروجی را درست تفسیر کرد. در بررسی مصرف RAM و CPU در لینوکس باید توجه داشت که یک پردازه با مصرف CPU بالا لزوماً معیوب نیست؛ شاید همان کاری را انجام می‌دهد که از آن انتظار دارید، مانند رمزنگاری، فشرده‌سازی یا پردازش ویدئو.

بررسی مصرف RAM و CPU در لینوکس با تمرکز بر حافظه

یکی از رایج‌ترین خطاها در لینوکس این است که کاربر فقط به عدد used نگاه می‌کند و نتیجه می‌گیرد RAM رو به اتمام است. در عمل، هسته لینوکس از حافظه آزاد برای کش استفاده می‌کند تا دسترسی به فایل‌ها سریع‌تر شود. این حافظه در صورت نیاز برنامه‌ها آزاد می‌شود.

free -h

به‌جای تمرکز صرف بر used، بهتر است به available توجه کنید. اگر این مقدار هنوز مناسب است، پر بودن نسبی RAM الزاماً مشکل نیست. در مقابل، اگر حافظه در دسترس پایین آمده و هم‌زمان سیستم وارد استفاده شدید از swap شده، باید علت را دقیق‌تر بررسی کنید.

بررسی swap

استفاده از swap همیشه بد نیست، اما افزایش شدید آن همراه با کندی سیستم می‌تواند نشانه فشار حافظه باشد. برای مشاهده وضعیت swap:

free -h
swapon --show

اگر فرایندی نشتی حافظه داشته باشد یا بار کاری از ظرفیت RAM بیشتر شود، ممکن است سیستم به‌جای RAM شروع به اتکا به swap کند. در بررسی مصرف RAM و CPU در لینوکس این وضعیت مهم است، چون پاسخ‌گویی سرویس‌ها افت می‌کند و حتی بار CPU هم ممکن است گمراه‌کننده به نظر برسد، زیرا بخشی از زمان صرف انتظار برای جابه‌جایی حافظه می‌شود.

کدام فرایند بیشترین RAM یا CPU را مصرف می‌کند؟

گاهی لازم نیست کل خروجی تعاملی top را ببینید و فقط می‌خواهید چند فرایند پرمصرف را سریع پیدا کنید. برای این کار می‌توان از ps استفاده کرد.

ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head

خروجی اول فرایندها را بر پایه مصرف CPU و خروجی دوم بر پایه مصرف حافظه مرتب می‌کند. این روش در بررسی مصرف RAM و CPU در لینوکس برای اسکریپت‌نویسی، ثبت وضعیت و بازبینی سریع بسیار مفید است.

اگر شناسه فرایند را دارید و می‌خواهید وضعیت همان پردازه را ببینید:

ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd

این فرمان برای بررسی دقیق یک سرویس خاص، مثلاً پردازه یک وب‌سرور یا برنامه پس‌زمینه، بسیار کاربردی است.

وقتی مشکل لحظه‌ای است: نمونه‌برداری دوره‌ای

بعضی مشکلات فقط در چند ثانیه رخ می‌دهند و در مشاهده دستی دیده نمی‌شوند. در چنین شرایطی ابزارهایی که نمونه‌برداری دوره‌ای انجام می‌دهند مفیدتر هستند. یکی از ساده‌ترین گزینه‌ها vmstat است.

vmstat 1

این فرمان هر یک ثانیه یک نمونه از وضعیت سیستم نمایش می‌دهد. در خروجی آن می‌توانید هم‌زمان نشانه‌هایی از مصرف CPU، فرایندهای آماده اجرا، فعالیت swap و ورودی/خروجی را ببینید. اگر در بازه‌های کوتاه جهش مصرف رخ می‌دهد، vmstat درک بهتری از الگوی مشکل می‌دهد.

مصرف حافظه یک فرایند را دقیق‌تر چطور ببینیم؟

عدد مصرف حافظه در خروجی‌های عمومی همیشه تمام واقعیت را نشان نمی‌دهد، چون بعضی بخش‌ها میان چند فرایند مشترک هستند. برای بررسی دقیق‌تر یک پردازه می‌توان از اطلاعات موجود در /proc استفاده کرد.

cat /proc/1234/status

در این فایل فیلدهایی مانند VmRSS و VmSize دیده می‌شوند. به‌طور خلاصه:

  • VmRSS: مقدار حافظه‌ای که واقعاً در RAM برای فرایند مقیم است
  • VmSize: اندازه کل فضای مجازی فرایند

بزرگ بودن VmSize لزوماً به این معنی نیست که همان مقدار RAM واقعاً اشغال شده است. در عیب‌یابی برنامه‌هایی با مصرف حافظه بالا، این تفاوت اهمیت زیادی دارد.

نمونه عملی: تشخیص کندی یک سرویس

فرض کنید یک سرویس وب روی لینوکس کند شده است. یک رویکرد منطقی می‌تواند این باشد:

  • با uptime و top ببینید فشار کلی روی سیستم چقدر است
  • اگر CPU بالا است، فرایندهای بالای فهرست را شناسایی کنید
  • اگر حافظه کم است، با free -h و بررسی swap ببینید سیستم دچار فشار حافظه شده یا نه
  • با ps aux --sort=-%mem یا ps aux --sort=-%cpu فرایند مشکوک را پیدا کنید
  • در صورت نیاز، با cat /proc/PID/status جزئیات حافظه را بررسی کنید

این روند کمک می‌کند بین سه حالت متفاوت تفاوت بگذارید: پردازش سنگین واقعی، انتظار برای I/O و کمبود حافظه. در بررسی مصرف RAM و CPU در لینوکس بدون این تفکیک، ممکن است به‌اشتباه CPU را مقصر بدانید، در حالی که مشکل اصلی دیسک یا نشتی حافظه است.

نکات امنیتی هنگام بررسی و متوقف‌کردن فرایندها

بررسی مصرف منابع معمولاً بی‌خطر است، اما وقتی قصد توقف یا دست‌کاری فرایندها را دارید باید محتاط باشید:

  • پیش از ارسال سیگنال به یک پردازه، مطمئن شوید متعلق به سرویس حیاتی سیستم نیست
  • فرایندهایی را که با root اجرا می‌شوند بدون شناخت کافی متوقف نکنید
  • از اجرای ابزارهای ناشناس با دسترسی ریشه فقط برای مانیتورینگ خودداری کنید
  • در سرورهای چندکاربره، خروجی فرمان‌ها ممکن است نام برنامه‌ها یا آرگومان‌های حساس را نشان دهد؛ در اشتراک‌گذاری گزارش‌ها آن‌ها را بازبینی کنید
  • اگر از sudo استفاده می‌کنید، فقط همان فرمان لازم را با سطح دسترسی بالا اجرا کنید

برای توقف نرم‌تر یک فرایند معمولاً ابتدا از سیگنال پایان عادی استفاده می‌شود و فقط اگر پاسخ نداد سراغ توقف اجباری می‌روند.

kill 1234
kill -9 1234

استفاده از kill -9 باید آخرین گزینه باشد، چون به برنامه فرصت پاک‌سازی یا بستن درست فایل‌ها را نمی‌دهد.

اشتباه‌های رایج در تفسیر مصرف RAM و CPU

  • پر بودن RAM را با کمبود حافظه یکی دانستن
  • نسبت دادن هر کندی به CPU بدون بررسی I/O و swap
  • قضاوت بر اساس یک لحظه کوتاه به‌جای مشاهده روند
  • بی‌توجهی به تعداد هسته‌ها هنگام تفسیر بار CPU
  • متوقف کردن فرایند پرمصرف بدون فهمیدن نقش آن در سرویس

جمع‌بندی

برای بررسی مصرف RAM و CPU در لینوکس لازم نیست از ابتدا سراغ ابزارهای پیچیده بروید. ترکیب top یا htop برای مشاهده زنده، free -h برای تحلیل حافظه، ps برای یافتن فرایندهای پرمصرف و vmstat برای نمونه‌برداری دوره‌ای، در بیشتر سناریوهای عملی کافی است.

نکته اصلی این است که اعداد را در زمینه درست بخوانید: CPU بالا همیشه مشکل نیست، RAM پر همیشه بد نیست و کندی سیستم هم همیشه از پردازنده نمی‌آید. اگر همین چند ابزار ساده را برای بررسی مصرف RAM و CPU در لینوکس درست به کار بگیرید، هم عیب‌یابی سریع‌تر می‌شود و هم احتمال تصمیم اشتباه پایین می‌آید.

دیدگاه‌ها

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

نشانی ایمیل شما منتشر نمی‌شود. دیدگاه‌ها پس از بررسی نمایش داده می‌شوند.