اگر سایت وردپرسیتان کند شده و پنل هاست مرتب مصرف بالای CPU را نشان میدهد، معمولاً یک عامل واحد در کار نیست. افزونه یا قالب سنگین، دیتابیس شلوغ و ترافیک بات هرکدام میتوانند بخشی از توان پردازنده را درگیر کنند و وقتی چند مورد همزمان اتفاق بیفتد، سایت به سقف منابع هاست نزدیک میشود؛ درنتیجه، میتواند موجب کندی صفحات یا حتی محدودشدن موقت سایت شود. برای کاهش مصرف بالای CPU، اول باید ببینید پردازنده دقیقاً کجا درگیر میشود و بعد سراغ راهکاری بروید که همان منبع فشار را هدف میگیرد. در ادامۀ این مطلب از بلاگ مبین هاست علاوه بر بررسی دلایل مصرف بالای CPU، به معرفی 15 روش برای کاهش مصرف CPU در وردپرس میپردازیم.
علت مصرف بالای CPU در وردپرس چیست؟
برای کمکردن مصرف CPU، ابتدا باید مشخص شود چه چیزی پردازنده هاست را درگیر کرده است. معمولاً یکی از چهار مورد زیر یا ترکیبی از آنها پشت این مشکل قرار دارد:
1) افزونهها و قالبهای سنگین
بعضی افزونهها، بهویژه صفحهسازها و افزونههای چندمنظوره، برای اجرای قابلیتهایشان درخواستهای زیادی به دیتابیس میفرستند؛ حتی زمانی که همۀ آن قابلیتها در صفحه استفاده نمیشوند. قالبهای شلوغ هم میتوانند همین اثر را داشته باشند. هر ویجت، اسلایدر یا قابلیت اضافه، پردازش بیشتری در زمان بارگذاری صفحه ایجاد میکند.
2) دیتابیس نامرتب و کوئریهای سنگین
وردپرس برای ساخت هر صفحه چندین کوئری به دیتابیس میفرستد. اگر جدولها پر از دادههای اضافی مثل Revisionهای قدیمی و دیدگاههای اسپم باشند، همین کوئریها هم دیرتر اجرا میشوند و پردازنده بیشتر درگیر میشود. نبود ایندکس مناسب در جدولهای پرتکرار نیز میتواند این فشار را بیشتر کند.
3) ترافیک غیرمجاز و حملات
گاهی افزایش ناگهانی مصرف CPU (یا افزایش سرعت CPU) از بازدیدکنندۀ واقعی نیست و درخواستهای مکرر به صفحۀ ورود وردپرس یا XML-RPC میتوانند در مدت کوتاهی منابع زیادی مصرف کنند. بهطور مثال رباتهایی که رمزهای مختلف را امتحان میکنند، تعداد زیادی درخواست بیفایده به سرور میفرستند و بخشی از توان پردازندهای را میگیرند که باید صرف کاربران واقعی شود.
4) منابع هاست نامتناسب با نیاز سایت
گاهی هم خود وردپرس مشکل اصلی نیست؛ اگر پلن هاست برای میزان بازدید و پردازش فعلی سایت کافی نباشد، حتی بعد از بهینهسازی هم دیر یا زود به سقف منابع آن پلن میرسید.
چطور بفهمیم کدام بخش وردپرس CPU زیاد مصرف میکند؟
قبل از اعمال تغییرات، بهتر است مشخص کنید فشار اصلی از کدام بخش میآید. ابزارهای جدول زیر کمک میکنند مصرف منابع را از سطح هاست، سرور یا خود وردپرس بررسی کنید.
| ابزار | چه چیزی نشان میدهد | مناسب برای |
| بخش مصرف منابع در پنل هاست | مصرف لحظهای و سابقۀ مصرف CPU و رم هاست | کاربران هاست اشتراکی و سیپنل |
| دستورهای top و htop از راه SSH | فرایندهایی مثل php-fpm و mysqld که بیشترین CPU را مصرف میکنند | کاربران سرور مجازی و اختصاصی |
| افزونۀ Query Monitor | کوئریهای کند دیتابیس و بخشهایی که زمان اجرای بیشتری دارند | مدیران سایت بدون دسترسی SSH |
اگر در گزارش پنل هاست، mysqld بیشترین مصرف را دارد، بهتر است دیتابیس و کوئریها را بررسی کنید. بالا بودن مصرف php-fpm هم معمولاً نشانۀ خوبی برای بررسی افزونهها، قالب و پردازشهای PHP است.
۱۵ روش برای کاهش مصرف بالای CPU در وردپرس
راهکار مناسب برای کاهش مصرف CPU به علت مشکل بستگی دارد. جدول زیر ۱۵ روش رایج برای کاهش مصرف بالای CPU را از نظر میزان اثر و سختی اجرا کنار هم قرار میدهد:
| ردیف | روش | تأثیر بر CPU | سطح دشواری اجرا |
| ۱ | بهروزرسانی PHP | بالا | آسان |
| ۲ | فعالسازی کش صفحه و آبجکت | بالا | متوسط |
| ۳ | انتخاب قالب سبک | متوسط | متوسط |
| ۴ | حذف افزونههای غیرضروری | بالا | آسان |
| ۵ | بهینهسازی دیتابیس | بالا | متوسط |
| ۶ | بهینهسازی پردازشهای داخلی | متوسط | متوسط |
| ۷ | استفاده از CDN | متوسط | آسان |
| ۸ | فشردهسازی تصاویر | متوسط | آسان |
| ۹ | محدود کردن Revisions | کم | آسان |
| ۱۰ | مقابله با ترافیک بات | بالا | متوسط |
| ۱۱ | کرون واقعی سرور | متوسط | سخت |
| ۱۲ | OPcache و وبسرور بهینه | بالا | سخت |
| ۱۳ | غیرفعال کردن پینگبک | کم | آسان |
| ۱۴ | مانیتورینگ مستمر | پیشگیرانه | آسان |
| ۱۵ | ارتقا به سرور مجازی | بالا | آسان |
در ادامۀ این بخش، هر یک از 15 مورد بالا را بهصورت جداگانه توضیح میدهیم.
۱) بهروزرسانی PHP به نسخه پایدار جدید
نسخههای قدیمی PHP، مانند ۷.۴ و پایینتر، دیگر پشتیبانی امنیتی ندارند و از نظر کارایی هم با نسخههای جدیدتر قابل مقایسه نیستند. از طرفی، نسخههای تازهتر معمولاً همان کد را با سربار کمتری اجرا میکنند. بااینحال، قبل از ارتقا سازگاری قالب و افزونهها را بررسی کنید؛ چون بعضی افزونههای قدیمی ممکن است با نسخۀ جدید PHP مشکل داشته باشند. توجه داشته باشید که در بیشتر پنلهای هاست، تغییر نسخۀ PHP از بخش تنظیمات قابل انجام است.
۲) فعالسازی کش صفحه و آبجکت (Caching)
وقتی کش فعال نیست، وردپرس برای هر بازدید باید صفحه را دوباره با اجرای کد PHP و کوئریهای دیتابیس بسازد. کش صفحه یک نسخۀ آماده از HTML نگه میدارد و کش آبجکت هم نتیجۀ بعضی کوئریهای تکراری را در حافظه ذخیره میکند. استفادۀ درست از کش، بهخصوص در کنار Redis یا Memcached، میتواند بخش زیادی از پردازشهای تکراری را حذف کند.
۳) انتخاب قالب سبک و استاندارد
قالبهای چندمنظوره معمولاً قابلیتها و کدهای بیشتری همراه خود دارند. اگر بخش زیادی از این امکانات در سایت استفاده نشود، همچنان ممکن است بخشی از کدهای مربوط به آنها بارگذاری یا اجرا شود. قالب سبکتر، با امکانات متناسب با نیاز واقعی سایت، معمولاً سربار کمتری ایجاد میکند و برای سایتهای محتوایی یا فروشگاههای معمولی انتخاب بهتری است.
۴) حذف افزونههای غیرضروری و سنگین
افزونههایی که دیگر استفاده نمیشوند یا چند قابلیت مشابه را همزمان ارائه میکنند، ارزش نگهداشتن ندارند. هر افزونۀ فعال میتواند کد، درخواست یا کوئری تازهای به فرایند بارگذاری سایت اضافه کند. فهرست افزونهها را دورهای بررسی کنید و موارد غیرضروری یا سنگین را کنار بگذارید.
هشدار: پیش از حذف یا غیرفعال کردن افزونهها، از سایت و دیتابیس بکاپ کامل بگیرید؛ چون بعضی افزونهها به بخشهای دیگر سایت وابستهاند و حذف ناگهانی آنها ممکن است عملکرد بخشی از سایت را مختل کند.
۵) بهینهسازی دیتابیس وردپرس
با گذشت زمان، دیتابیس وردپرس پر از دادههایی میشود که دیگر کاربردی ندارند؛ از Transientهای منقضیشده و دیدگاههای اسپم گرفته تا Revisionهای قدیمی. پاکسازی دورهای این دادهها و بررسی ایندکس جدولهای پرتکرار میتواند حجم کار کوئریها را کمتر کند. اگر میخواهید این بخش را دقیقتر بررسی کنید، راهنمای بهینهسازی دیتابیس وردپرس مبینهاست مراحل این کار را توضیح میدهد.
۶) بهینهسازی پردازشهای داخلی وردپرس
وردپرس چند پردازش پسزمینه دارد که بدون دخالت مستقیم کاربر اجرا میشوند. یکی از مهمترین آنها Heartbeat API است که در فاصلههای زمانی مشخص بین مرورگر و سرور درخواست ردوبدل میکند. روی هاستهای محدود یا سایتهای پرترافیک، تعداد زیاد این درخواستها میتواند فشار اضافی ایجاد کند (در راهنمای بهینهسازی پردازشهای داخلی وردپرس روشهای کنترل فاصله و تعداد این درخواستها توضیح داده شده است).
نکتۀ کاربردی: اگر Heartbeat API فشار زیادی ایجاد میکند، بهجای غیرفعالکردن کامل آن میتوانید فاصلۀ ارسال درخواستها را بیشتر کنید؛ برای نمونه، بازۀ ۶۰ ثانیهای فشار کمتری ایجاد میکند و در عین حال قابلیتهایی مثل ذخیرۀ خودکار ویرایشگر را حفظ میکند.
۷) استفاده از CDN برای کمکردن بار سرور اصلی
CDN فایلهای ثابت سایت، مثل تصاویر، CSS و JavaScript را از سرورهای نزدیکتر به کاربر تحویل میدهد؛ در نتیجه بخشی از درخواستها مستقیماً به هاست اصلی نمیرسند و منابع سرور بیشتر برای پردازشهای خود وردپرس باقی میماند.
۸) فشردهسازی و بهینهسازی تصاویر
تصاویر حجیم فقط روی پهنای باند و سرعت صفحه اثر نمیگذارند و تولید اندازههای مختلف تصویر و پردازش فایلهای بزرگ هنگام آپلود هم میتواند منابع سرور را درگیر کند. فشردهسازی تصاویر و استفاده از فرمتهایی مانند WebP حجم فایلها را پایین میآورد و بار کلی سایت را سبکتر میکند.
۹) محدود کردن Revisions پستها
وردپرس با هر بار ذخیره یا ویرایش نوشته میتواند نسخهای از آن را بهعنوان Revision نگه دارد. در سایتهایی که محتوا زیاد ویرایش میشود، تعداد این نسخهها بهمرور بالا میرود و دیتابیس حجیمتر میشود. محدود کردن Revisions به چند نسخه، مثلاً سه یا پنج مورد، حجم دادههای اضافی را کنترل میکند و امکان بازگشت به نسخههای قبلی را هم از بین نمیبرد.
۱۰) مقابله با ترافیک بات و حملات Brute Force
محدود کردن تلاشهای ورود ناموفق، مسدودکردن آیپیهای مشکوک و غیرفعالکردن XML-RPC در صورت بینیازی، میتواند تعداد زیادی درخواست اضافی را حذف کند. فایروال برنامه یا قوانین مناسب در فایل .htaccess هم میتوانند بخشی از این درخواستها را پیش از رسیدن به PHP متوقف کنند.
۱۱) جایگزینی WP-Cron با کرون واقعی سرور
WP-Cron برخلاف کرون واقعی، معمولاً با بازدید کاربران فعال میشود و بررسی میکند آیا کاری برای اجرا وجود دارد یا نه. در سایتهای پرترافیک، این بررسی میتواند بارها تکرار شود. البته شما میتوانید WP-Cron را غیرفعال کنید و بهجای آن یک Cron Job واقعی در سطح سرور بسازید تا برای مثال، هر ۱۵ دقیقه اجرا شود.
۱۲) فعالسازی OPcache و استفاده از وبسرور بهینه
OPcache نسخۀ کامپایلشدۀ کدهای PHP را در حافظه نگه میدارد تا سرور مجبور نباشد در هر درخواست همۀ کدها را دوباره از ابتدا تفسیر کند. فعال بودن آن در بسیاری از سایتهای وردپرسی به کاهش سربار PHP کمک میکند. انتخاب وبسروری متناسب با حجم و نوع ترافیک سایت، مانند Nginx یا LiteSpeed، هم میتواند روی مصرف منابع اثر بگذارد.
۱۳) غیرفعال کردن پینگبک و XML-RPC غیرضروری
پینگبک وردپرس برای اطلاعرسانی میان وبلاگها ساخته شده است، اما اگر از آن استفاده نمیکنید، باز ماندن این قابلیت ضرورتی ندارد. XML-RPC هم برای بعضی سرویسها و اپلیکیشنهای متصل به وردپرس لازم است. اگر سایت شما به آن وابسته نیست، غیرفعالکردنش سطح حمله و تعداد درخواستهای غیرضروری را کمتر میکند.
۱۴) بررسی دورهای مصرف منابع
مصرف منابع ثابت نمیماند و نصب یک افزونه، تغییر قالب یا اضافهشدن یک قابلیت تازه ممکن است دوباره فشار روی CPU را بالا ببرد. گزارشهای پنل هاست و ابزارهایی مثل Query Monitor را هر از گاهی بررسی کنید تا تغییرات غیرعادی را زودتر پیدا کنید.
۱۵) ارتقا به سرور مجازی با منابع اختصاصی
اگر بعد از بررسی افزونهها، دیتابیس، کش و ترافیک هنوز مصرف CPU مرتب به سقف میرسد، ممکن است منابع پلن فعلی برای سایت کافی نباشد. در هاست اشتراکی بخشی از منابع سرور میان چند سایت تقسیم میشود و در مقابل، سرور مجازی با منابع اختصاصی منابع مشخصتری در اختیار سایت قرار میدهد و فضای بیشتری برای مدیریت بار پردازشی فراهم میکند.
جمعبندی
برای کاهش مصرف بالای CPU در وردپرس معمولاً نمیتوان یک راهحل ثابت برای همه سایتها در نظر گرفت. افزونه یا قالب سنگین، دیتابیس شلوغ، پردازشهای پسزمینه و ترافیک ناخواسته هرکدام میتوانند بخشی از مشکل باشند. بهتر است بهجای تغییر چند تنظیم بهصورت تصادفی، ابتدا گزارش مصرف منابع را بررسی کنید و بعد راهکار متناسب با همان عامل را اجرا کنید. اگر سایت بعد از این بهینهسازیها همچنان به سقف CPU میرسد، احتمالاً منابع پلن فعلی با نیاز واقعی آن هماهنگ نیست. در این شرایط، بررسی گزینههای هاست وردپرس مبینهاست میتواند برای انتخاب پلن متناسب با حجم سایت کمککننده باشد.
سؤالات متداول
چطور بفهمیم کدام افزونه CPU زیادی مصرف میکند؟
برای شروع میتوانید Query Monitor را بهصورت موقت نصب کنید و کوئریهای کند و درخواستهای مرتبط با افزونهها را بررسی کنید. اگر به پنل هاست دسترسی دارید، گزارش مصرف منابع هم کمک میکند ببینید در زمان افزایش مصرف CPU کدام فرایندها بیشتر درگیر بودهاند.
آیا افزایش رم مشکل مصرف بالای CPU وردپرس را حل میکند؟
نه لزوماً. رم و CPU دو منبع متفاوتاند. اگر فشار پردازنده از کوئریهای سنگین یا کد ناکارآمد یک افزونه باشد، افزایش رم علت اصلی را برطرف نمیکند. بنابراین بهتر است ابتدا منبع مصرف بالای CPU را پیدا کنید و بعد دربارۀ ارتقای منابع تصمیم بگیرید.
کش سایت چقدر به کاهش مصرف بالای CPU کمک میکند؟
کش میتواند بخش زیادی از پردازشهای تکراری را حذف کند. با کش صفحه، سرور لازم نیست برای هر بازدید دوباره HTML را از صفر بسازد و کش آبجکت هم اجرای دوبارۀ بعضی کوئریها را کاهش میدهد. میزان اثر آن به نوع سایت، ترافیک و تنظیمات کش بستگی دارد.
مصرف بالای CPU چه تأثیری روی سئوی سایت دارد؟
مصرف بالای CPU میتواند زمان پاسخگویی سرور را بیشتر کند و صفحات را کندتر در اختیار کاربر بگذارد. اگر فشار منابع شدید باشد، حتی احتمال قطعی موقت سایت هم وجود دارد. کندی و دسترسپذیری ضعیف هر دو میتوانند تجربۀ کاربر و عملکرد سئوی سایت را تحت تأثیر قرار دهند.
آیا سرور اختصاصی بهتر از سرور مجازی برای وردپرس پرمصرف است؟
این موضوع به حجم ترافیک و نوع پردازش سایت بستگی دارد. برای بسیاری از سایتهای وردپرسی پرمصرف، یک سرور مجازی با منابع مناسب کافی است. سرور اختصاصی بیشتر زمانی منطقی میشود که چند سایت پرترافیک روی یک زیرساخت اجرا شوند یا کنترل بیشتری روی منابع و سختافزار لازم باشد.




