در این آموزش از مرکز آموزش میهن هاستینگ قصد دارم به معرفی راهکارهای مختلفی که برای حل مشکل مصرف بالای CPU در وردپرس توسط فایل admin-ajax.php قرار داره بپردازم که با استفاده از این راهکارها میتونید به راحتی مشکل مصرف بالای cpu را در وردپرس برطرف کنید
رفع مشکل مصرف بالای CPU در وردپرس توسط فایل admin-ajax
حالا ممکنه این سوال براتون پیش بیاد که اصلا فایل admin-ajax.php چیست؟ فایل admin-ajax.php وردپرس یکی از فایلهای هسته وردپرس هست که از نسخه 3.6 وردپرس به اون اضافه شده. هدف این فایل ایجاد ارتباط بین مرورگر و سرور هست که با استفاده از ajax این ارتباط برقرار میشود. این ارتباط کاری که انجام میده اینه که قابلیتهای پیشرفته مثل بهبود ذخیره سازی خودکار کارها در وردپرس، ردیابی رونوشتها، زمان تایم اوت ورود به وردپرس، مدیریت نشستها در وردپرس و اطلاعیههای یک نوشته مثل زمانی که نوشته قفل شده و توسط فرد دیگر در حال ویرایش هست را به شما خواهد داد. هر کدوم از این ویژگی های ذکر شده برای سایتهایی که چندین کاربر در اون فعالیت دارند به امری ضروری تبدیل شده است. به عنوان نمونه اگر همین حالت نمایش کاربران هنگام ویرایش یک نوشته نباشه ممکنه همزمان دو مدیر در حال ویرایش و تغییر روی یک نوشته باشند که باعث ایجاد مشکل در محتوای سایت و محصولات در وردپرس بشه.
ایده انجام این کار به این شکل هست که از هر 15 ثانیه درخواستهای XHR به سرور ارسال میشن و در نهایت با فرستان پاسخها به صورت callbacks نتیجه نمایش داده میشه. سپس سایر اجرا با هماهنگ سازی که بینشون ایجاد میشه در مورد فعالیتهای دیگر کاربران از این طریق اطلاع داده میشه. در نهایت همونطور که در بالا هم اشاره شد این کار باعث میشه تا ضمن اطلاع از اینکه یک کاربر در حال تغییر دادن یک نوشته، ابزارک و… هست قفل گذاری روی اون انجام بگیره و باعث نشه همزمان دو کاربر در حال ایجاد تغییرات باشند.
با این اوصاف حتما فکر میکنید که این یک کار ساده است، اما چرا در ابزارهای تست سرعت در وردپرس که انجام میدین با خطاهایی مواجه میشید؟
همونطور که در تصویر بالا میبینید در ابزار تست سرعت سایت مثل pingdom معمولا دو نتیجه از این سناریو دریافت خواهیم کرد. یکی در بخش جلویی و دیگری در front-end و دیگری در back-end که مربوط به بخش مدیریت و کاربری سایت هستند.
1. مصرف بالای 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 بیشتر از 8 ثانیه در لود این فایل طول میکشه که این زمان برای لود خیلی زیاد هست و باعث کند شدن سایت خواهد شد.
در اینجا اگر شما روی درخواست 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 در وردپرس
یک راه ساده و پیش پا افتاده هم وجود داره که معمولا برای یافتن خطا در وردپرس از این روش زیاد استفاده کردیم. در این روش کافیه در هر بار یکی از افزونهها را غیرفعال کرده و تست سرعت روی سایتتون رو انجام بدین، در نهایت بعد از غیرفعال کردن افزونهها در جایی با غیرفعال کردن یکی از افزونهها میبینید که خطا برطرف میشه و مشخص میشه که مشکل از این افزونه هست. این خطا معمولا به خوبی جواب میده و در 99 درصد تستهایی که با این روش صورت گرفته به نتیجه خواهید رسید. البته میتونید این کار رو به صورت برعکس هم انجام بدین. یعنی همه افزونهها رو غیرفعال کنید و این بار یکی یکی هر افزونه را فعال کرده و در هر بار فعال سازی افزونه یک بار تست سرعت هم انجام بدین، اگر دیدین که خطای admin-ajax با فعال کردن یکی از افزونهها صورت گرفت مشخص خواهد شد که مشکل از اینجاست.
2. مصرف بالای CPU در پیشخوان وردپرس توسط admin-ajax.php
دومین مسئلهای که باعث به وجود اومدن این مشکل میشه زمانی هست که Heartbeat API وردپرس برای اینکه بتونه با استفاده از Ajax توسط مرورگر دادههایی رو ارسال و دریافت بکنه با این خطا مواجه شده و باعث به وجود اومدن مصرف بیش از حد CPU در پیشخوان وردپرس خواهد شد. هر درخواست آجاکس که در این حالت در وردپرس بارگذاری میشه در حالتی هست که همه دادهها به صورت کش شده هم هستند. معمولا این نوع خطاها را در تست سرعت بخاطر اینکه در پیشخوان وردپرس به وجود میاد نمیبینید. این مشکل بیشتر در هاستهای اشتراکی که چندین وبسایت روی یک سرور قرار دارند به وجود میاد. پیشنهادی که برای کاهش این نوع خطا در پیشخوان وردپرس دارم این هست که:
از باز کردن چندین صفحه پیشخوان وردپرس در تبهای مرورگر دوری کنید. چرا که این کار باعث میشه هر صفحه از سایت که در یک تب باز شده مدام مشغول دریافت اطلاعات آجاکس در وردپرس بشه که ضمن بالا بردن مصرف منابع هاست، باعث کند شدن مرورگر و سیستم شما هم خواهد شد.
همچنین سعی کنید قابلیت ذخیره خودکار در وردپرس رو مدیریت کرده و بازه زمانی که یک نوشته به صورت خودکار در حالت پیش نویس ذخیره میشه را بیشتر کنید. برای این منظور میتونید از مقاله نحوه غیرفعال کردن بروزرسانی خودکار در وردپرس استفاده کنید.