مانیتورینگ عملکرد سیستم در لینوکس یکی از مهمترین وظایف مدیران سرور و متخصصان DevOps است. در راهنمای آموزش Sysstat در لینوکس، یاد میگیریم چگونه مصرف CPU، حافظه، دیسک و پردازشها را بهصورت حرفهای بررسی کنیم. زمانی که سرور با کندی، مصرف بالای CPU، فشار روی دیسک یا مشکلات I/O مواجه میشود، تشخیص دقیق منبع مشکل بدون ابزار مناسب تقریبا غیرممکن خواهد بود.
بسیاری از کاربران لینوکس تنها از دستوراتی مانند top یا htop استفاده میکنند، اما این ابزارها فقط وضعیت لحظهای سیستم را نمایش میدهند و برای تحلیل حرفهای عملکرد سرور کافی نیستند. ابزارهای Sysstat مانند iostat، pidstat، mpstat و sar اطلاعات بسیار دقیقتری از وضعیت واقعی سیستم ارائه میدهند و برای عیبیابی حرفهای سرورها ضروری هستند.
در این مطلب بهصورت کامل با ابزارهای Sysstat در لینوکس آشنا میشویم و یاد میگیریم چگونه به صورت حرفهای عملکرد سرور را مانیتور کنیم.
Sysstat چیست و چرا اهمیت دارد؟
Sysstat مجموعهای از ابزارهای مانیتورینگ لینوکس است که اطلاعات دقیقی درباره عملکرد سیستم جمعآوری و تحلیل میکند.
این ابزارها میتوانند موارد زیر را بررسی کنند:
- مصرف CPU
- وضعیت دیسک و I/O
- پردازشهای سنگین
- مصرف حافظه
- وضعیت شبکه
- Load Average
- صف پردازشها
- فعالیت تاریخی سیستم
برخلاف ابزارهایی مثل top که فقط وضعیت فعلی را نمایش میدهند، Sysstat امکان تحلیل بازههای زمانی مختلف را نیز فراهم میکند. این ویژگی هنگام بررسی مشکلات مقطعی سرور بسیار ارزشمند است.
نصب Sysstat در لینوکس
در بسیاری از توزیعهای لینوکس، Sysstat بهصورت پیشفرض نصب نیست و باید آن را نصب کنید.
نصب در Debian و Ubuntu
sudo apt install sysstat
نصب در RHEL و CentOS
sudo dnf install sysstat
نصب در Arch Linux
sudo pacman -S sysstat
بررسی نسخه نصبشده
mpstat -V
نمونه خروجی:
sysstat version 12.6.1
نسخههای جدیدتر معمولا امکانات بیشتری برای مانیتورینگ دارند.
ابزار mpstat برای بررسی CPU
ابزار mpstat برای مشاهده وضعیت CPU و هستههای پردازنده استفاده میشود.
این ابزار مخصوص زمانی است که میخواهید بفهمید فشار پردازشی روی کدام Core قرار دارد.
مشاهده وضعیت کلی CPU
mpstat
خروجی شامل اطلاعاتی شبیه به تصویر زیر خواهد بود.

ستون iowait% اولین بخشی است که باید بررسی شود، زیرا هر مقداری که بهصورت مداوم بالاتر از ۱۰ تا ۱۵ درصد باشد، نشان میدهد سیستم در انتظار عملیات خواندن یا نوشتن روی دیسک متوقف شده است و افزایش منابع CPU کمکی به رفع مشکل نخواهد کرد.
همچنین ستون soft% مدتزمان صرفشده در پردازش وقفههای نرمافزاری را نمایش میدهد. افزایش ناگهانی این مقدار معمولا نشاندهنده اشباع شدن رابط شبکه است، نه وجود مشکل در توان پردازشی سیستم.
اگر مقدار idle% پایین باشد یعنی CPU درگیر پردازش است.
مشاهده وضعیت تمام هستهها
mpstat -P ALL 1
این دستور هر یک ثانیه وضعیت تمام Coreها را نمایش میدهد.
نمونه خروجی:

اگر یک هسته فشار بسیار بیشتری نسبت به بقیه داشته باشد، احتمالا یک پردازش Single Thread عامل مشکل است.
در این خروجی مشاهده میشود که تمامی هستههای پردازنده در بازه زمانی بررسیشده تقریبا بهطور کامل در وضعیت Idle قرار دارند و مقدار idle% روی ۱۰۰ درصد ثبت شده است. این موضوع نشان میدهد که در حال حاضر هیچ فشار پردازشی قابلتوجهی روی سیستم وجود ندارد و CPU عملا بدون بار کاری فعال است.
همچنین مقادیر usr، %sys% و iowait% برای تمام هستهها صفر هستند، بنابراین نه پردازش سنگینی در حال اجراست، نه سیستم درگیر عملیات I/O دیسک است و نه وقفههای سیستمی فشار خاصی ایجاد کردهاند.
بهطور کلی این خروجی بیانگر یک سیستم کاملا پایدار، بدون بار پردازشی و با منابع آزاد کافی است.
بررسی حرفهای پردازشها با pidstat
ابزار pidstat برای مانیتورینگ پردازشها استفاده میشود.
برخلاف top که فقط وضعیت فعلی را نشان میدهد، pidstat میتواند تغییرات مصرف منابع را در بازه زمانی تحلیل کند.
مشاهده مصرف CPU پردازشها
pidstat 1
این دستور هر یک ثانیه وضعیت پردازشها را نمایش میدهد.

خروجی pidstat نشان میدهد که در بازه زمانی بررسیشده، هیچ پردازش سنگین یا غیرعادی روی سیستم در حال اجرا نبوده است و میزان مصرف CPU تقریبا در پایینترین حالت ممکن قرار دارد. تنها پردازشهایی که مصرف جزئی CPU داشتهاند، خود ابزار pidstat و پردازش کرنلی rcu_preempt هستند که هرکدام تنها حدود ۱ درصد از CPU را مصرف کردهاند. همچنین مقدار wait% برابر صفر است که نشان میدهد پردازشها در انتظار منابعی مانند دیسک یا I/O نبودهاند. در مجموع، این خروجی بیانگر یک سیستم پایدار، کمبار و بدون گلوگاه پردازشی یا I/O است.
بررسی مصرف حافظه
pidstat -r 1

خروجی pidstat -r نشان میدهد که در زمان بررسی، هیچ پردازشی مصرف قابلتوجهی از حافظه نداشته است و وضعیت RAM سیستم کاملا پایدار بوده است. تنها پردازش فعال ثبتشده، خود ابزار pidstat است که تنها حدود ۳ مگابایت حافظه RSS مصرف میکند و سهم آن از حافظه سیستم فقط ۰.۰۸% است. همچنین مقدار majflt/s برابر صفر است، به این معنا که هیچ Page Fault سنگینی رخ نداده و سیستم نیازی به بارگذاری صفحات حافظه از دیسک نداشته است. مقدار بسیار پایین minflt/s نیز نشاندهنده دسترسی عادی و سبک به حافظه است. در مجموع، این خروجی نشان میدهد که سیستم تحت فشار حافظه قرار ندارد و عملکرد RAM در وضعیت کاملا نرمال قرار دارد.
بررسی I/O پردازشها
pidstat -d 1

این بخش بسیار مهم است چون مشخص میکند کدام Process باعث فشار روی دیسک شده است.
در این خروجی pidstat -d مشاهده میشود که در لحظه بررسی، یک فرآیند با نام bash (با PID 20469) باعث ایجاد بار قابلتوجه روی دیسک شده است. این پردازش حدود ۱,۰۴۸,۵۷۶ KB/s (معادل تقریبا 1GB/s) عملیات نوشتن روی دیسک انجام داده که مقدار بسیار بالایی برای I/O محسوب میشود. در همین زمان مقدار kB_rd/s صفر است، بنابراین فعالیت اصلی مربوط به نوشتن بوده و نه خواندن داده. همچنین مقدار iodelay صفر گزارش شده که نشان میدهد در این لحظه تاخیر یا صف انتظار قابلتوجهی در سطح I/O ثبت نشده است. در مجموع، این خروجی نشاندهنده ایجاد یک فشار سنگین و لحظهای روی دیسک توسط یک فرآیند نوشتاری است.
مانیتور کردن یک پردازش خاص
pidstat -p 20469 1

در این مثال فقط Process با PID برابر ۲۰۴۶۹ بررسی میشود.
خروجی pidstat -p 20469 1 نشان میدهد که فرآیند bash در بازه زمانی بررسیشده هیچگونه مصرف قابلتوجهی از CPU نداشته است. مقادیر usr% و system% در تمام نمونهها صفر بودهاند و در نتیجه CPU% نیز کاملا صفر گزارش شده است. همچنین مقدار wait% برابر صفر است که نشان میدهد این پردازش در هیچ لحظهای منتظر منابع CPU یا I/O نبوده است. در مجموع، این خروجی بیانگر یک فرآیند کاملا بیکار (idle) است که در حال حاضر هیچ بار پردازشی روی سیستم ایجاد نمیکند و روی یک هسته مشخص بدون فعالیت در حال قرار دارد.
آموزش کامل iostat برای بررسی دیسک و I/O
یکی از مهمترین ابزارهای Sysstat دستور iostat است.
زمانی که سرور کند میشود، در بسیاری از موارد مشکل از Disk I/O است نه CPU.
اجرای iostat
iostat
مانیتورینگ حرفهای دیسک
iostat -xz 1
این دستور اطلاعات بسیار مهمی نمایش میدهد.

اگر util% نزدیک ۱۰۰ باشد یعنی دیسک اشباع شده است.
خروجی iostat -xz 1 نشان میدهد که در بازه زمانی اول، سیستم دارای فعالیت I/O نسبتا سبک تا متوسط روی دیسک vda بوده است. در این بخش، هم عملیات خواندن (r/s) و هم نوشتن (w/s) مشاهده میشود و مقدار wkB/s نسبت به خواندن بالاتر است که نشاندهنده غالب بودن عملیات نوشتاری است. مقدار iowait% در سطح کلی سیستم بسیار پایین (۰.۰۴%) است که نشان میدهد CPU تقریبا هیچ زمانی را در انتظار دیسک سپری نکرده و گلوگاه I/O وجود ندارد. همچنین مقدار util% برای دیسکها پایین است که نشان میدهد دیسک در حالت اشباع قرار ندارد و ظرفیت پردازش I/O هنوز کاملا آزاد است.
در نمونه دوم خروجی، سیستم به حالت کاملا Idle وارد شده و تمام مقادیر CPU از جمله user، %system% و iowait% به صفر رسیدهاند و تنها idle% برابر ۱۰۰% است. همچنین هیچ فعالیت خواندن یا نوشتن روی دیسکها ثبت نشده که نشان میدهد در این لحظه سیستم کاملا بدون بار کاری I/O در حال اجراست.
مفهوم await
این عدد نشان میدهد درخواستهای I/O چقدر منتظر میمانند.
مثلا:
await = 150ms
عدد بالایی محسوب میشود و معمولا نشاندهنده فشار زیاد روی Storage است.
تشخیص Bottleneck دیسک
اگر این دو مورد همزمان بالا باشند:
%iowait
%util
تقریبا مطمئن هستید مشکل از دیسک است.
آموزش کامل sar در لینوکس
ابزار sar مهمترین بخش Sysstat محسوب میشود.
مزیت اصلی sar این است که اطلاعات را ذخیره میکند و امکان تحلیل تاریخی میدهد.
یعنی میتوانید ببینید مثلا ساعت ۳ صبح چه اتفاقی روی سرور افتاده است.
فعالسازی سرویس sysstat
در Debian و Ubuntu:
sudo systemctl enable sysstat sudo systemctl start sysstat
بررسی مصرف CPU با sar
sar -u 1 5
این دستور هر یک ثانیه و در ۵ مرحله وضعیت CPU را نمایش میدهد.

بررسی RAM
sar -r 1 5
بررسی Load Average
sar -q 1 5
این دستور موارد مهمی مثل Load Average، Run Queue و Process Blocking را نمایش میدهد که به کمک آنها میتوان وضعیت کلی بار پردازشی سیستم، میزان صف انتظار پردازنده و تعداد پردازشهای در حالت انتظار یا مسدود را بررسی و تحلیل کرد.
اگر runq-sz از تعداد CPU بیشتر باشد یعنی پردازنده تحت فشار است.
بررسی وضعیت شبکه
sar -n DEV 1 5
این دستور میزان مصرف و فعالیت کارت شبکه را بهصورت لحظهای نمایش میدهد و برای مانیتورینگ ترافیک ورودی و خروجی شبکه بسیار کاربردی است. در خروجی این دستور، ستونهای مهمی مانند rxkB/s و txkB/s وجود دارند که به ترتیب مقدار داده دریافتی و ارسالشده از هر اینترفیس شبکه را بر حسب کیلوبایت بر ثانیه نشان میدهند. بررسی این مقادیر کمک میکند تا بتوان الگوهای ترافیکی سیستم را تحلیل کرده و در صورت وجود ترافیک غیرعادی، افزایش ناگهانی مصرف پهنای باند یا فعالیت مشکوک شبکه را شناسایی کرد.
بررسی دیسک با sar
sar -d 1 5
این دستور وضعیت عملکرد دیسکها را بهصورت لحظهای نمایش میدهد و از نظر کاربردی شباهت زیادی به iostat دارد. با استفاده از این خروجی میتوان میزان فعالیت خواندن و نوشتن، زمان پاسخدهی و فشار وارد بر هر دیسک را بررسی کرد. یکی از مهمترین ستونها در این گزارش، util% است که میزان درگیری یا اشباع بودن دیسک را نشان میدهد، بهطوری که مقادیر نزدیک به ۱۰۰٪ بیانگر استفاده کامل از ظرفیت دیسک و احتمال ایجاد گلوگاه در I/O هستند. این اطلاعات برای تحلیل مشکلات کندی سیستم و شناسایی محدودیتهای ذخیرهسازی بسیار کاربردی است.
بررسی تاریخی عملکرد سرور
یکی از مهمترین قابلیتهای sar بررسی دادههای ذخیرهشده قبلی است.
فایلهای لاگ معمولا در مسیر زیر ذخیره میشوند:
/var/log/sa/
مشاهده گزارش دیروز
sar -u -f /var/log/sa/sa20
عدد ۲۰ نشاندهنده روز ماه است.
تفاوت ابزارهای Sysstat
هر ابزار وظیفه خاصی دارد و باید در جای درست استفاده شود.
برای تحلیل CPU و هستهها
mpstat
برای بررسی پردازشها
pidstat
برای تحلیل دیسک و I/O
iostat
برای مانیتورینگ کلی و تاریخی سیستم
sar
ترکیب این ابزارها دید بسیار دقیقی از وضعیت واقعی سرور ارائه میدهد.
چرا Sysstat از top حرفهایتر است
ابزار top تنها یک تصویر لحظهای از وضعیت سیستم ارائه میدهد، در حالی که مجموعه ابزارهای Sysstat امکان تحلیل دادهها در بازههای زمانی مختلف را فراهم میکنند. این ابزارها علاوه بر ارائه اطلاعات دقیقتر، قابلیت بررسی روندهای گذشته را هم دارند و برای مانیتورینگ محیطهای پروداکشن بسیار مناسب هستند. همچنین امکان تحلیل تخصصی I/O، CPU و سایر منابع سیستم را فراهم میکنند، این ابزارها کمک میکنند علت اصلی مشکلات سیستم راحتتر شناسایی شود. به همین دلیل Sysstat یکی از ابزارهای پرکاربرد در دیتاسنترها و زیرساختهای سازمانی به شمار میآید.
- تحلیل تاریخی دارد
- اطلاعات دقیقتر ارائه میدهد
- مناسب مانیتورینگ Production است
- قابلیت بررسی تخصصی I/O دارد
- برای تحلیل علل ریشهای (Root cause analysis-RCA) بسیار کاربردی است
جمعبندی
ابزارهای Sysstat یکی از مهمترین ابزارهای مانیتورینگ لینوکس محسوب میشوند که یادگیری آنها برای هر مدیر سرور ضروری است.
اگر فقط از top استفاده میکنید، بخش بزرگی از اطلاعات واقعی سیستم را از دست میدهید. ابزارهایی مانند iostat، pidstat، mpstat و sar میتوانند گلوگاه (Bottleneck) واقعی سرور را مشخص نموده و فرآیند عیبیابی را بسیار سریعتر کنند. برای مانیتورینگ حرفهای لینوکس، یادگیری Sysstat یک مهارت کلیدی و ضروری است.