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

تشخیص دلایل پر شدن CPU
قبل از اقدام برای بهینه سازی و مدیریت مصرف CPU، اولین گام شناسایی دلایل این مشکل است. برای شناسایی منابع پرمصرف و فرآیندهای در حال اجرا می توان از ابزارهای مختلفی استفاده کرد که اطلاعات دقیق تری در اختیار ما قرار می دهند برای کاهش مصرف CPU.
-
استفاده از دستور
topدستور
topیکی از ابزارهای پیش فرض و قدرتمند در لینوکس است که به طور لحظه ای اطلاعات مربوط به مصرف منابع سیستم را به شما نمایش می دهد. این ابزار به ویژه برای شناسایی فرآیندهایی که بیشترین منابع CPU را مصرف می کنند مفید است. همچنین، این ابزار اطلاعاتی مانند میزان مصرف حافظه، مدت زمان اجرای هر فرآیند، و وضعیت پردازش ها را نمایش می دهد.برای اجرای دستورtopکافی است وارد ترمینال شوید و دستور زیر را تایپ کنید:top
در این پنجره، می توانید با فشردن کلیدهای مختلف، اطلاعات دقیق تری از مصرف منابع بدست آورید.
-
استفاده از
htopابزار
htopنسخه پیشرفته تر و گرافیکی تر دستورtopاست که استفاده راحت تری دارد. این ابزار به شما این امکان را می دهد که فرآیندها را به طور گرافیکی مشاهده کرده و با استفاده از کلیدهای جهت دار فرآیندهای مختلف را مدیریت کنید. این ابزار به ویژه برای شناسایی منابع پرمصرف CPU بسیار مفید است.نصب و اجرایhtop:sudo apt install htop htop
-
دستور
psابزار
psیکی دیگر از ابزارهای مفید برای مشاهده فرآیندهای در حال اجرا و مصرف منابع است. این ابزار به شما امکان می دهد که با استفاده از پارامترهای مختلف، اطلاعات دقیقی از وضعیت سیستم دریافت کنید. برای مشاهده فرآیندهای پرمصرف CPU، می توانید دستور زیر را اجرا کنید:ps aux --sort=-%cpu | head -n 6
این دستور به شما پنج فرآیند اول که بیشترین مصرف CPU را دارند، نشان می دهد.
متوقف کردن برنامه ها
پس از شناسایی فرآیندهای پرمصرف، ممکن است نیاز به توقف یا محدود کردن آن ها برای بهبود عملکرد سرور داشته باشیم. متوقف کردن فرآیندهای بی مورد یا پرمصرف می تواند بار سیستم را کاهش داده و عملکرد بهتری را برای سایر خدمات فراهم کند.
-
یافتن شناسه فرآیند (PID)
برای متوقف کردن یک فرآیند، ابتدا باید شناسه فرآیند (PID) آن را پیدا کنید. این کار با استفاده از دستور
psانجام می شود:ps aux | grep [نام فرآیند]
-
متوقف کردن یک فرآیند
بعد از شناسایی PID، برای متوقف کردن فرآیند، از دستور
killاستفاده کنید:kill [PID]
اگر فرآیند متوقف نشد، از گزینه
-9برای اتمام فوری فرآیند استفاده کنید:kill -9 [PID]
-
کنترل اولویت فرآیندها
یکی از روش های دیگر برای مدیریت فرآیندها، استفاده از ابزارهای
niceوreniceبرای تنظیم اولویت اجرای فرآیندها است. این ابزارها به شما این امکان را می دهند که اولویت پردازشی یک فرآیند را کاهش دهید.- برای اجرای یک فرآیند با اولویت پایین تر از دستور
niceاستفاده کنید:nice -n 10 [دستور فرآیند]
- برای تغییر اولویت یک فرآیند در حال اجرا از دستور
reniceاستفاده کنید:renice -n 10 -p [PID]
- برای اجرای یک فرآیند با اولویت پایین تر از دستور
بهینه سازی سرور مجازی
برای جلوگیری از پر شدن CPU و کاهش مصرف CPU ، می توان از چندین تکنیک و ابزار مختلف استفاده کرد:
-
استفاده از حافظه مجازی (SWAP)
حافظه SWAP به عنوان یک حافظه موقت برای زمانی که RAM سرور پر می شود، عمل می کند. اگر سرور شما به حافظه زیادی نیاز دارد، استفاده از SWAP می تواند به جلوگیری از پر شدن CPU و کاهش بار آن کمک کند.برای ایجاد فایل SWAP:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
-
بهینه سازی وب سرورها (Nginx/Apache)
- تنظیمات KeepAlive: فعال سازی این گزینه برای کاهش تعداد اتصالات به سرور مفید است.
- کش کردن و فشرده سازی: فعال کردن کش و فشرده سازی برای وب سرورها به کاهش مصرف CPU کمک می کند. برای Nginx، می توانید از فشرده سازی gzip استفاده کنید:
gzip on;
-
بهینه سازی دیتابیس ها (MySQL/PostgreSQL)
- ایندکس گذاری: در دیتابیس ها، ایندکس گذاری مناسب می تواند جستجوهای سریع تری را فراهم کند و به مصرف کمتر CPU منجر شود.
- تنظیمات کش: استفاده از کش برای ذخیره سازی داده های موقت و کاهش درخواست های به پایگاه داده.
جلوگیری از DDoS با استفاده از iptables
حملات DDoS یکی از عوامل عمده پر شدن CPU در سرورها هستند. برای جلوگیری از این حملات، می توان از ابزار iptables استفاده کرد.
-
محدود کردن تعداد اتصال ها از یک IP
با استفاده از iptables، می توان تعداد اتصالات از یک IP خاص را محدود کرد:
sudo iptables -A INPUT -p tcp --syn --dport 80 -m limit --limit 1/s -j ACCEPT sudo iptables -A INPUT -p tcp --syn --dport 80 -j DROP
-
محدود کردن تعداد درخواست ها از یک IP
برای جلوگیری از حملات بر اساس تعداد زیاد درخواست ها از یک IP:
sudo iptables -A INPUT -p tcp --dport 80 -m recent --update --hitcount 100 --seconds 60 --name DEFAULT -j DROP
نتیجه گیری
با استفاده از ابزارهای مختلف مانند top، htop، ps و iptables، می توان به راحتی فرآیندهای پرمصرف را شناسایی، مدیریت، و بهینه سازی کرد. تنظیمات حافظه SWAP، بهینه سازی وب سرورها و دیتابیس ها، و محدود کردن اتصال های ناشناخته از IP ها، همگی تکنیک هایی هستند که به کاهش مصرف CPU و جلوگیری از پر شدن آن کمک می کنند. این اقدامات به شما کمک خواهند کرد تا سرور خود را به طور بهینه مدیریت کرده و از عملکرد پایدار آن اطمینان حاصل کنید.