مرکز آموزش اولین دیتا

آموزش حل مشکل مصرف بالای CPU هاست در وردپرس

0

بالا رفتن مصرف بیش از حد CPU هاست در وردپرس یکی از مشکلاتی است که در بیشتر سایت‌های وردپرسی به وجود می آید. در صورتی که در استفاده از وردپرس با تجربه هستید و احتمالا هم از ابزار تست سرعت در وردپرس استفاده کردید حتما با این خطا مواجه شده اید. یا حتی ممکن است از طرف شرکت میزبانی وب که از آن هاست خریداری کرده اید، اخطاری مبنی بر مصرف بالای CPU در وردپرس دریافت کرده باشید. دلیل به وجود اومدن خطای مصرف بالای CPU در وردپرس توسط فایل admin-ajax.php بیشتر از سمت افزونه‌های شخص ثالث یا درخواست‌هایی مانند ذخیره خودکار پیش نویس در وردپرس که به صورت مرتب در پیشخوان وردپرس انجام میگیرد به وجود می آید. پس مهم است به این خطاها توجه کنید و هر زمان که با خطای مصرف بالای منابع CPU در هاست توسط وردپرس مواجه شدید و این خطا از سمت فایل admin-ajax هست آن را برطرف کنید.

آکادمی اولین دیتا در این مقاله به آموزش حل مشکل مصرف بالای CPU در وردپرس توسط فایل admin-ajax.php قرار دارد می پردازد که با استفاده از این راهکارها میتوانید به راحتی مشکل مصرف بالای cpu را در وردپرس برطرف کنید.

رفع مشکل مصرف بالای CPU در وردپرس توسط فایل admin-ajax

فایل admin-ajax.php چیست؟ فایل admin-ajax.php وردپرس یکی از فایل‌های هسته وردپرس می باشد که از نسخه ۳٫۶ وردپرس به آن اضافه شده است. هدف این فایل ایجاد ارتباط بین مرورگر و سرور است که با استفاده از ajax این ارتباط برقرار می‌شود. این ارتباط کاری که انجام میدهد این است که قابلیت‌های پیشرفته مثل بهبود ذخیره سازی خودکار کارها در وردپرس، ردیابی رونوشت‌ها، زمان تایم اوت ورود به وردپرس، مدیریت نشست‌ها در وردپرس و اطلاعیه‌های یک نوشته مثل زمانی که نوشته قفل شده و توسط فرد دیگر در حال ویرایش هست را به شما خواهد داد. هر کدام از این ویژگی های ذکر شده برای سایت‌هایی که چندین کاربر در اون فعالیت دارند به امری ضروری تبدیل شده است. به عنوان نمونه اگر همین حالت نمایش کاربران هنگام ویرایش یک نوشته نباشه ممکن است همزمان دو مدیر در حال ویرایش و تغییر روی یک نوشته باشند که باعث ایجاد مشکل در محتوای سایت و محصولات در وردپرس شود.

ایده انجام این کار به این شکل می باشد که از هر ۱۵ ثانیه درخواست‌های XHR به سرور ارسال میشوند و در نهایت با فرستان پاسخ‌ها به صورت callbacks نتیجه نمایش داده میشود. سپس سایر اجرا با هماهنگ سازی که بین آنها ایجاد میشود در مورد فعالیت‌های دیگر کاربران از این طریق اطلاع داده میشود. در نهایت همانطور که در بالا هم اشاره شد این کار باعث میشود تا ضمن اطلاع از اینکه یک کاربر در حال تغییر دادن یک نوشته، ابزارک و… می باشد قفل گذاری بر روی آن انجام بگیرد و باعث نشود همزمان دو کاربر در حال ایجاد تغییرات باشند.

با این اوصاف حتما فکر می‌کنید که این یک کار ساده است، اما چرا در ابزارهای تست سرعت در وردپرس که انجام میدهید با خطاهایی مواجه میشوید؟

همانطور که در تصویر بالا می‌بینید در ابزار تست سرعت سایت مثل pingdom معمولا دو نتیجه از این سناریو دریافت خواهیم کرد. یکی در بخش جلویی و دیگری در front-end و دیگری در back-end که مربوط به بخش مدیریت و کاربری سایت هستند.


مصرف بالای CPU توسط admin-ajax بخاطر افزونه‌ها

اولین و رایج ترین خطا که باعث به وجود اومدن خطای مصرف بالای CPU در وردپرس بخاطر فایل admin-ajax میشود از سمت افزونه‌های شخص ثالث نشات میگیرد. این موضوع بیشتر در front-end وردپرس رخ میدهد که مربوط به همان بخش کاربری سایت است و در تست سرعت سایت هم میبینیم. دلیل به وجود اومدن خطا از سمت افزونه‌ها هم بیشتر به این دلیل است که توسعه دهنده‌های وردپرس از قابلیت ajax یا توسط همین فایل برای افزونه‌های خود استفاده می‌کنند تا قابلیت‌هایی را به کاربران ارائه کنند. اما فقط به این دلیل که شما یک درخواست رو برای admin-ajax.php می‌بینید لزوما به این معنی نیست که سایت شما بخاطر این موضوع کند شده است. پس از اینکه صفحات لود شدند قابلیت Ajax وردپرس شروع به کار میکند و درخواست های خاصی را به صورت ناهماهنگ اجرا و دریافت میکند. پس اگر به درستی از این قابلیت توسط توسعه دهنده‌های وردپرس استفاده نشود باعث به وجود آمدن کندی در وردپرس میشود که نتیجه آن بالا رفتن مصرف منابع CPU خواهد بود.

در تصویر زیر نمونه‌ای از تشخیص مشکل admin-ajax را مشاهده می‌کنید که توسط سایت Gtmetrix بررسی شده، بخاطر اینکه بررسی با این سایت اجازه میدهد که داده‌های حقیقی و واقعی را به صورت واکنشگرا به دست آوریم. در صورتی که استفاده از pingdom این قابلیت را به ما نخواهد داد. پس اگر شما هم قصد تست و بررسی مشکل admin-ajax.php در وردپرس را دارید بهتر است از سایت gtmetrix برای این کار استفاده کنید. البته محدود به این دو سایت هم نیستید و میتوانید از Google Chrome Devtools یا WebPageTest هم استفاده کنید.

در اینجا نمونه تستی انجام گرفته که دلیل آن بخاطر استفاده از افزونه ویژوال کامپوزر می باشد و باعث به وجود آمدن خطای admin-ajax.php در وردپرس شده و همانطور که میبینید بر اساس گزارش Gtmetrix بیشتر از ۸ ثانیه در لود این فایل طول میکشه که این زمان برای لود خیلی زیاد هست و باعث کند شدن سایت خواهد شد.

در اینجا اگر شما بر روی درخواست POST admin-ajax.php کلیک کنید، میتوانید سه زبانه مختلف را مشاهده کنید که شامل Headers، Post، و Response هستند. برای این سایت، ما میتوانیم سرنخ مشکل را در برگه Response بدست آوریم. با بررسی بخشی از این درخواست توسط “vc_shortcodes-custom-css” شروع می‌کنیم.

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

حال که مشخص شد مشکل از کدام افزونه است در مرحله اول باید بررسی کنید و ببینید که این افزونه به آخرین نسخه آپدیت شده یا خیر؟ در صورتی که افزونه آپدیت نباشد به احتمال زیاد با آپدیت و بروزرسانی افزونه در وردپرس مشکل برطرف خواهد شد. اما در صورتی که افزونه آپدیت بود یا اینکه پس از آپدیت هنوز هم مشکل پا برجا بود بهتر است با ارسال گزارش به سازنده موضوع را به اطلاعشان برسانید تا با بررسی و رفع مشکل افزونه را آپدیت کنند.

رفع مشکل admin-ajax.php بخاطر افزونه هشدار وردپرس

مورد بعدی که بیشتر باعث به وجود اومدن خطای admin-ajax در وردپرس میشود مربوط به افزونه‌های ارسال هشدار در وردپرس می باشد. همانطور که در تصویر زیر میبینید با یک جهش نسبتا بزرگ در admin-ajax وردپرس روبه رو هستیم که در هنگام تست توسط سایت GTmetrix با آن مواجه شدیم.

همانطور که در نمونه قبلی هم انجام دادیم در اینجا هم اگر روی درخواست POST admin-ajax.php کلیک کنید خواهید دید که داده های پست “action = mtsnb_add_impression & bar_id = 88 & ab_variation = none” نمایش داده خواهند شد.

پست های مرتبط

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

پس همانطور که میبینید راه‌های خوبی برای فهمیدن اینکه مشکل admin-ajax.php وردپرس به چه دلیل است وجود دارد که در اینجا ما به استفاده از سایت GTmetrix و جستجوی خطا در گوگل بسنده کردیم. اگر شما یک توسعه دهنده هستید میتوانید از راه‌های دیگر هم استفاده کنید.

راه مطمئن برای تعیین منبع مشکل admin-ajax.php در وردپرس

یک راه ساده و پیش پا افتاده هم وجود دارد که معمولا برای یافتن خطا در وردپرس از این روش زیاد استفاده کردیم. در این روش کافیست در هر بار یکی از افزونه‌ها را غیرفعال کرده و تست سرعت روی سایتتان را انجام دهید، در نهایت پس از غیرفعال کردن افزونه‌ها در جایی با غیرفعال کردن یکی از افزونه‌ها میبینید که خطا برطرف میشود و مشخص میشود که مشکل از این افزونه است. این خطا معمولا به خوبی جواب میدهد و در ۹۹ درصد تست‌هایی که با این روش صورت گرفته به نتیجه خواهید رسید. البته میتوانید این کار را به صورت برعکس هم انجام دهید. یعنی همه افزونه‌ها را غیرفعال کنید و این بار یکی یکی هر افزونه را فعال کرده و در هر بار فعال سازی افزونه یک بار تست سرعت هم انجام دهید، اگر دیدید که خطای admin-ajax با فعال کردن یکی از افزونه‌ها صورت گرفت مشخص خواهد شد که مشکل از اینجاست.


 مصرف بالای CPU در پیشخوان وردپرس توسط admin-ajax.php

دومین مسئله‌ای که باعث به وجود آمدن این مشکل میشود زمانی می باشد که Heartbeat API وردپرس برای اینکه بتواند با استفاده از Ajax توسط مرورگر داده‌هایی را ارسال و دریافت کند با این خطا مواجه شده و باعث به وجود آمدن مصرف بیش از حد CPU در پیشخوان وردپرس خواهد شد. هر درخواست آجاکس که در این حالت در وردپرس بارگذاری میشود در حالتی است که همه داده‌ها به صورت کش شده هم هستند. معمولا این نوع خطاها را در تست سرعت بخاطر اینکه در پیشخوان وردپرس به وجود می آید نمیبینید. این مشکل بیشتر در هاست‌های اشتراکی که چندین وبسایت برروی یک سرور قرار دارند به وجود می آید. پیشنهادی که برای کاهش این نوع خطا در پیشخوان وردپرس داریم این است که:

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

همانطور که در بالا هم اشاره شد وردپرس برای بررسی درخواست‌ها به صورت آجاکس در هر ۱۵ ثانیه از طریق مرورگر درخواستی را به سرور ارسال میکند، حالا اگر تغییراتی اعمال شده باشد پاسخ ارسال میشود. این حالت را اگر زمانی در نظر بگیرید که چندین تب باز کردید و یا اینکه تب ها همگی مربوط به صفحه ویرایش نوشته هستند، باعث به وجود اومدن فاجعه در وردپرس خواهد شد. حالا این فاجعه زمانی بدتر خواهد شد که در یک سایت بزرگ و  پربازدید که چندین نویسنده در آن فعالیت دارند همزمان در حال نوشتن و تولید محتوا باشند. در این صورت به نظر شما چه اتفاقی خواهد افتاد؟ مشخص است که این درخواست‌ها همینطور در حال تکثیر شدن و بیشتر شدن خواهند بود. طبق یک بررسی که روی سایت DARTDrones انجام گرفته در حالتی که در مدت ۲۴ ساعت از یک روز که فقط ۲٫۰۰۰ بازدیدکننده یکتا در این سایت بود هنگام کار با سایت بیش از ۴٫۱۰۰ درخواست ارسال و دریافت شده بود. این میزان بهینه نمی باشد.

رفع مشکل مصرف بالای CPU در وردپرس توسط فایل admin-ajax.php

برای اینکه این درخواست‌ها را کمتر کنید میتوانید از روش‌هایی مثل غیرفعال کردن رونوشت خودکار در وردپرس، افزایش زمان ذخیره خودکار نوشته به عنوان پیش نویس و… استفاده کنید. همچنین یک راه ساده هم برای این کار وجود دارد که با استفاده از افزونه میتوانید این کار را انجام دهید.

افزونه کاهش تعداد درخواست‌های admin-ajax در وردپرس

افزونه‌ Heartbeat Control برای کاهش میزان درخواست‌های admin-ajax در وردپرس می باشد  این افزونه در مخزن وردپرس به ثبت رسیده و تاکنون هم موفق شده بیش از ۸۰٫۰۰۰ نصب فعال و کسب امتیاز ۴٫۶ را ازآن خود کند که با استفاده کردن از افزونه‌ Heartbeat Control میتوانید اقدام به مدیریت درخواست‌ها و وظایفی در وردپرس که باعث کاهش کارهای admin-ajax در وردپرس خواهد شد بکنید. برای استفاده از این افزونه ابتدا روی دکمه زیر کلیک کنید تا به صفحه افزونه در مخزن وردپرس هدایت شوید و سپس با استفاده از راهنمای نصب افزونه در وردپرس اقدام به نصب و فعال سازی افزونه کنید.

دانلود افزونه Heartbeat Control

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

control heartbeat locations: این گزینه را بر روی حالت Allow only on post edit pages قرار دهید تا این کار صرفا در صفحه ویرایش نوشته و برگه که بیشتر مورد استفاده قرار میگیرد انجام شود.

override heartbeat frequency: این گزینه را هم پیشنهاد می‌کنیم برروی حالت ۶۰ ثانیه قرار دیهد تا درخواست‌های API ارسالی از هر ۶۰ ثانیه انجام بگیرند. دقت کرده باشید در قسمت اول مقاله گفته شد که درخواست‌ها در حالت عادی از هر ۱۵ ثانیه بررسی می‌شوند که با افزایش اون به ۶۰ ثانیه میتوانید مدت زمان را بیشتر کرده و مصرف CPU که توسط admin-ajax.php زیاد شده را مدیریت کرده و کاهش دهید.

در صورتی که از نسخه تجاری و پولی این افزونه هم استفاده کنید میتوانید از قابلیت هایی مانند غیرفعال کردن لینک‌های RSD در وردپرس، حذف لینک‌های کوتاه، غیرفعال کردن فید وردپرس، حذف لینک‌های فید وردپرس، غیرفعال کردن پینگ بک در وردپرس و… استفاده کنید که در تصویر بالا قابل مشاهده هستند.

امیدوارم این آموزش از آکادمی اولین دیتا هم مورد توجه و پسند شما قرار گرفته باشد و با استفاده از آن توانسته باشید خطای مصرف cpu در وردپرس به دلیل فایل admin-ajax.php را در وردپرس برطرف کنید.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد .

Captcha loading...