چرا VPS با وجود CPU پایین کند است؟ بررسی CPU Steal، I/O Wait و Load
لینوکس هاستینگ

چرا VPS با وجود CPU پایین کند است؟ بررسی CPU Steal، I/O Wait و Load

فهرست مطالب

چرا با اینکه CPU سرور مجازی فقط ۱۰٪ است، سایت شما کند است؟ عیب‌یابی سه معیار پنهان

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

در این مقاله به سه معیار کلیدی می‌پردازیم که اغلب نادیده گرفته می‌شوند: CPU Steal Time، I/O Wait و Load Average. یاد می‌گیرید هرکدام دقیقاً چه معنایی دارند، چطور آن‌ها را اندازه‌گیری کنید و مهم‌تر از همه، چطور بفهمید کدام‌یک مقصر اصلی کندی سرور شماست.

چرا فقط نگاه کردن به درصد مصرف CPU کافی نیست؟

وقتی دستور top یا htop را اجرا می‌کنید، عددی که معمولاً بیشتر از همه به آن توجه می‌شود، ستون %CPU یا درصد کلی مصرف پردازنده است. این عدد نشان می‌دهد چه مقدار از زمان پردازنده صرف اجرای واقعی دستورات شده. اما این عدد هیچ اطلاعاتی درباره این نمی‌دهد که پردازنده چه مقدار زمان را صرف منتظر ماندن کرده؛ منتظر دیسک، منتظر شبکه، یا حتی (در سرورهای مجازی) منتظر نوبت گرفتن از هایپروایزر میزبان.

⚠️ نکته مهم: دقیقاً همین «زمان‌های انتظار» هستند که در سرورهای مجازی معمولاً باعث کندی محسوس می‌شوند، بدون اینکه در نگاه اول در عدد ساده CPU Usage خودشان را نشان بدهند.

معیار اول: Load Average — سرور چقدر شلوغ است؟

Load Average دقیقاً چه چیزی را نشان می‌دهد؟

Load Average میانگین تعداد پردازش‌هایی است که در یک بازه زمانی مشخص، یا در حال اجرا روی پردازنده بوده‌اند یا منتظر گرفتن نوبت (چه برای CPU و چه برای I/O) بوده‌اند. برای دیدن آن کافی است دستور زیر را اجرا کنید:

uptime

خروجی چیزی شبیه این خواهد بود:

14:32:10 up 10 days, 3:14, 2 users, load average: 4.21, 3.85, 2.10

سه عددی که می‌بینید، به‌ترتیب میانگین لود در ۱، ۵ و ۱۵ دقیقه گذشته هستند.

چطور بفهمیم این عدد بالاست یا نه؟

نکته‌ای که خیلی از کاربران تازه‌کار اشتباه می‌کنند این است که فکر می‌کنند عدد لود باید همیشه زیر ۱ باشد. اما این عدد باید نسبت به تعداد هسته‌های پردازنده سرور شما تفسیر شود. برای دیدن تعداد هسته‌ها:

nproc

🔹 قاعده کلی: اگر Load Average برابر یا کمتر از تعداد هسته‌های سرور باشد، سرور در وضعیت قابل‌قبولی است.

🔹 مثال: لود ۴ روی یک سرور ۴ هسته‌ای یعنی پردازنده تقریباً به‌طور کامل مشغول است اما هنوز صف انتظار طولانی ایجاد نشده؛ در حالی که همین عدد ۴ روی یک سرور تک‌هسته‌ای، یعنی به‌طور میانگین سه پردازش دیگر هم منتظر نوبت هستند و این می‌تواند باعث کندی محسوس شود.

معیار دوم: CPU Steal Time — چقدر از منابع شما دزدیده می‌شود؟

CPU Steal Time چیست؟

اینجا می‌رسیم به یکی از مفاهیمی که مخصوص محیط‌های مجازی‌سازی‌شده مثل VPS است و در سرورهای فیزیکل اختصاصی اصلاً معنا ندارد. CPU Steal Time (نمایش داده‌شده به‌صورت %st) درصدی از زمان است که ماشین مجازی شما آماده اجرای یک دستور بوده، اما هایپروایزر میزبان (Hypervisor) به‌جای دادن نوبت به شما، آن زمان پردازنده را به یکی دیگر از ماشین‌های مجازی روی همان سرور فیزیکی اختصاص داده است.

⚠️ به زبان ساده‌تر: وقتی Steal Time بالا می‌رود، یعنی سرور فیزیکی میزبان شما یا بیش از حد شلوغ است (اصطلاحاً Overselling شده) یا یکی از «همسایه‌های پرسروصدا» (Noisy Neighbor) روی همان هاست، منابع پردازنده مشترک را زیاد مصرف می‌کند و نوبت شما دیرتر می‌رسد.

چطور CPU Steal را چک کنیم؟

ساده‌ترین راه، اجرای دستور top و نگاه کردن به خط CPU است:

top

در خروجی، دنبال خطی شبیه این بگردید:

%Cpu(s): 8.2 us, 2.1 sy, 0.0 ni, 85.0 id, 0.5 wa, 0.0 hi, 0.0 si, 4.2 st

عدد آخر (st) همان CPU Steal Time است. برای دیدن جزئیات دقیق‌تر و به‌تفکیک هر هسته، دستور زیر مفیدتر است:

mpstat -P ALL 1

اگر دستور mpstat روی سرورتان نصب نیست، آن را با بسته sysstat نصب کنید:

apt install sysstat -y      # اوبونتو/دبیان
yum install sysstat -y      # CentOS/RHEL

چه عددی برای Steal Time نگران‌کننده است؟

⚠️ به‌طورکلی، اگر Steal Time به‌طور مداوم (نه فقط برای چند ثانیه) بالای ۵ تا ۱۰ درصد باشد، این نشانه‌ای جدی است که هاست فیزیکی میزبان شما بیش از ظرفیت واقعی‌اش منابع فروخته یا بین کاربران تقسیم کرده. متأسفانه این مشکلی است که از داخل خود سرور مجازی‌تان قابل رفع نیست؛ چون به تنظیمات و مدیریت سرور فیزیکی میزبان مربوط می‌شود، نه به تنظیمات داخل سیستم‌عامل شما.

🚀 سرور مجازی با منابع اختصاصی؛ بدون Steal Time، بدون کندی

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

🔹 پلن‌های متنوع با CPU و RAM اختصاصی برای هر نیاز
🔹 دیسک NVMe پرسرعت برای رفع کامل I/O Wait
🔹 پهنای باند نامحدود و آپ‌تایم ۹۹.۹٪
🔹 پشتیبانی ۲۴/۷ توسط تیم فنی متخصص

تماس با پشتیبانی: 91302467-021 | ایرانیکاسرور

معیار سوم: I/O Wait — گلوگاه دیسک را پیدا کنید

I/O Wait چیست؟

I/O Wait (نمایش داده‌شده به‌صورت %wa) درصدی از زمان است که پردازنده کاملاً بیکار بوده، اما نه به این دلیل که کاری برای انجام دادن نداشته، بلکه چون منتظر تکمیل شدن یک عملیات ورودی/خروجی (معمولاً خواندن یا نوشتن روی دیسک) بوده است. وقتی I/O Wait بالا می‌رود، معمولاً یعنی دیسک سرور (یا دیسک اشتراکی روی هاست فیزیکی) نمی‌تواند به‌اندازه کافی سریع به درخواست‌های خواندن و نوشتن پاسخ بدهد.

چطور I/O Wait را چک کنیم؟

در همان خروجی دستور top که بالاتر دیدیم، عدد wa دقیقاً همین معیار است. برای بررسی روند آن در طول زمان، دستور vmstat گزینه بهتری است:

vmstat 1 10

این دستور هر ۱ ثانیه یک‌بار و در مجموع ۱۰ بار، وضعیت سیستم را نمایش می‌دهد. در ستون wa (زیر بخش cpu)، اگر عددی مداوم بالای ۱۰ تا ۲۰ درصد ببینید، احتمالاً دیسک گلوگاه اصلی سرور شماست.

پیدا کردن اینکه دقیقاً کدام پردازش مقصر I/O بالاست

برای پیدا کردن اینکه کدام برنامه بیشترین فشار I/O را ایجاد کرده، ابزار iotop بسیار کاربردی است:

apt install iotop -y   # نصب در اوبونتو/دبیان
iotop -o

گزینه -o فقط پردازش‌هایی که واقعاً در حال انجام I/O هستند را نمایش می‌دهد، که کار پیدا کردن مقصر اصلی را خیلی ساده‌تر می‌کند. همچنین دستور iostat هم آمار دقیقی از میزان استفاده از هر دیسک به شما می‌دهد:

iostat -x 1 5

پردازش‌های در حالت D (Uninterruptible Sleep)

یک نشانه دیگر از مشکل I/O، دیدن پردازش‌هایی در حالت D در خروجی ps است؛ این حالت یعنی پردازش منتظر پاسخ دیسک است و حتی نمی‌توان آن را متوقف (Kill) کرد تا این انتظار تمام شود. برای پیدا کردن این پردازش‌ها:

ps aux | awk '$8 ~ /D/ {print}'

اگر به‌طور مداوم چند پردازش در این حالت می‌بینید، این تأییدی قوی بر وجود مشکل I/O Wait است.

چطور این سه معیار را با هم تفسیر کنیم؟

این سه معیار معمولاً به‌تنهایی معنای کاملی ندارند و باید در کنار هم دیده شوند. جدول زیر چند سناریوی رایج را نشان می‌دهد:

وضعیت مشاهده‌شده تفسیر محتمل
CPU پایین + Load بالا + Steal بالا هاست فیزیکی میزبان اورسل شده یا همسایه‌ای پرمصرف روی همان سرور دارید
CPU پایین + Load بالا + I/O Wait بالا دیسک سرور کند است یا دیسک اشتراکی هاست شلوغ است
CPU بالا + Load بالا + Steal و I/O Wait پایین مشکل واقعاً از پردازش‌های خود شماست (اپلیکیشن، دیتابیس و غیره پرمصرف است)
Load بالا اما CPU، Steal و I/O Wait همه پایین معمولاً به تعداد بالای پردازش‌های منتظر شبکه یا قفل‌های نرم‌افزاری (مثل قفل دیتابیس) مربوط است

راه‌حل‌ها بر اساس علت پیدا شده

اگر مشکل CPU Steal بالا بود

از آنجایی که این مشکل به منابع هاست فیزیکی مربوط است، بهترین کار تماس با پشتیبانی ارائه‌دهنده هاستینگ و اشتراک‌گذاری همین آمار (خروجی mpstat یا top) با آن‌هاست. ارائه‌دهندگان معتبر معمولاً امکان مهاجرت سرور شما به یک هاست فیزیکی کم‌ترافیک‌تر را دارند. اگر این مشکل بارها تکرار شد، شاید وقت آن رسیده باشد که به یک پلن با منابع تضمین‌شده‌تر (Dedicated vCPU) یا ارائه‌دهنده دیگری با سیاست فروش محافظه‌کارانه‌تر مهاجرت کنید.

اگر مشکل I/O Wait بالا بود

اول بررسی کنید آیا خود اپلیکیشن شما (مثلاً یک دیتابیس با کوئری‌های سنگین، یا لاگ‌نویسی بیش‌ازحد) باعث این فشار شده یا خیر. اگر مشکل از سمت خودتان نیست، این هم می‌تواند نشانه‌ای از دیسک اشتراکی شلوغ روی هاست فیزیکی باشد؛ در این حالت هم گزینه‌های شما شامل تماس با پشتیبانی، یا مهاجرت به پلنی با دیسک NVMe اختصاصی‌تر است، که معمولاً کارایی به‌مراتب بهتری نسبت به دیسک‌های HDD یا SSD اشتراکی قدیمی‌تر دارد.

اگر مشکل واقعاً از Load بالای ناشی از پردازش‌های خودتان بود

اینجا دیگر مشکل به هاست مربوط نیست و باید سراغ بهینه‌سازی اپلیکیشن، افزایش منابع سرور (آپگرید CPU/RAM)، یا توزیع بار بین چند سرور بروید.

بررسی سریع فضای سواپ هم فراموش نشود

گاهی کندی سرور به دلیل کمبود RAM و استفاده زیاد از فضای Swap (که روی دیسک است، نه حافظه) اتفاق می‌افتد که خودش می‌تواند I/O Wait را هم بالا ببرد. برای بررسی:

free -h
vmstat 1 5

در خروجی vmstat، اگر ستون‌های si (Swap In) و so (Swap Out) اعداد غیرصفر و مداوم نشان دادند، یعنی سرور شما به‌طور فعال در حال استفاده از Swap است که معمولاً نشانه کمبود RAM است.

🛠 مشکل خاصی دارید؟ ما کنار شما هستیم

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

تماس با پشتیبانی: 91302467-021 | ایرانیکاسرور

جمع‌بندی

کند بودن یک VPS با وجود مصرف پایین CPU، معمایی نیست که حل‌نشدنی باشد؛ فقط باید به‌جای تکیه صرف بر یک عدد ساده، سه معیار Load Average، CPU Steal و I/O Wait را کنار هم بررسی کنید. هرکدام از این‌ها داستان متفاوتی از سلامت سرور شما تعریف می‌کند: Load به شما می‌گوید سرور چقدر شلوغ است، Steal به شما می‌گوید آیا هاست فیزیکی میزبان منابع کافی به شما می‌دهد یا نه، و I/O Wait به شما می‌گوید آیا دیسک گلوگاه اصلی است. با این سه ابزار در دست، دیگر لازم نیست حدس بزنید؛ می‌توانید دقیقاً نشان دهید مشکل کجاست و آن را با ارائه‌دهنده هاستینگ‌تان مطرح کنید یا خودتان برطرف کنید. اگر هم به سروری با منابع اختصاصی و بدون Steal Time نیاز داشتید، ایرانیکاسرور با پلن‌های متنوع و پشتیبانی ۲۴/۷ در کنار شماست.

سوالات متداول

آیا CPU Steal بالا همیشه به معنای مشکل از سمت ارائه‌دهنده هاستینگ است؟

تقریباً همیشه بله. Steal Time فقط در محیط‌های مجازی‌سازی‌شده معنا دارد و مربوط به نحوه تخصیص منابع پردازنده توسط هایپروایزر سرور فیزیکی میزبان است؛ چیزی که از داخل سیستم‌عامل VPS شما قابل تنظیم نیست.

چرا با اینکه CPU من ۱۰ درصد است، سایتم کند بارگذاری می‌شود؟

احتمالاً مشکل شما از جنس CPU نیست. یکی از دو حالت CPU Steal بالا (اورسل بودن هاست فیزیکی) یا I/O Wait بالا (کندی دیسک) را با دستورات این مقاله بررسی کنید تا علت واقعی مشخص شود.

چه عددی برای Load Average طبیعی محسوب می‌شود؟

این عدد باید نسبت به تعداد هسته‌های سرور سنجیده شود. اگر Load Average مساوی یا کمتر از تعداد هسته‌ها باشد، سرور در وضعیت قابل‌قبولی قرار دارد.

آیا می‌توان I/O Wait بالا را همیشه با آپگرید سرور حل کرد؟

نه لزوماً. اگر منبع مشکل کوئری‌های سنگین دیتابیس یا لاگ‌نویسی بیش‌ازحد خود اپلیکیشن باشد، آپگرید سرور فقط مشکل را موقتاً پنهان می‌کند. بهتر است ابتدا با iotop منبع دقیق فشار I/O را پیدا کنید.

چطور بفهمم مشکل از Swap است یا نه؟

دستور free -h را اجرا کنید. اگر مقدار Used در بخش Swap بالا بود، یا در خروجی vmstat 1 5 ستون‌های si و so اعداد مداوم غیرصفر داشتند، یعنی سرور شما درگیر Swap است و نیاز به RAM بیشتر دارید.





🎯 چالش آموزشی
مباحثی که در این مقاله یاد گرفتید را در عمل پیاده‌سازی کنید و نتیجه را با ما به اشتراک بگذارید.
شروع چالش

💬 دیدگاه‌ها 0

هنوز دیدگاهی ثبت نشده است. اولین نفری باشید که نظر می‌دهید!

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