
اگر در گزارش مصرف منابع هاست وردپرس یا ابزارهایی مثل GTmetrix، Query Monitor، New Relic و CloudLinux مرتباً با فایل admin-ajax.php مواجه می شوید، به احتمال زیاد سایت وردپرسی شما درگیر مصرف بالای CPU و Process های PHP شده است. این مشکل معمولاً در سایت های ووکامرسی، سایت های پرترافیک یا وب سایت هایی که افزونه های سنگین دارند بیشتر دیده می شود و اگر به درستی مدیریت نشود می تواند باعث کندی شدید سایت، افزایش لود سرور و حتی Suspend شدن سرویس و یا لیمیت شدن منابع هاست شود.
فایل admin-ajax.php در وردپرس چه کاری انجام می دهد؟
وردپرس برای اجرای درخواست های Ajax از فایل زیر استفاده می کند:
/wp-admin/admin-ajax.php
Ajax باعث می شود بخشی از سایت بدون رفرش کامل صفحه بروزرسانی شود. برای مثال زمانی که کاربر محصولی را به سبد خرید اضافه می کند، یک فرم بدون رفرش ارسال می شود یا جستجوی زنده در سایت انجام می شود، معمولاً درخواست به همین فایل ارسال خواهد شد.
مشکل اصلی اینجاست که هر بار درخواست Ajax اجرا می شود، وردپرس باید هسته، افزونه ها و تعداد زیادی Hook را دوباره Load کند. بنابراین اگر تعداد این درخواست ها زیاد شود، مصرف CPU به شدت افزایش پیدا می کند.
چرا admin-ajax.php باعث مصرف بالای CPU می شود؟
خود فایل admin-ajax.php مشکل خاصی ندارد و درواقع بخشی از ساختار طبیعی وردپرس است. اما زمانی که افزونه ها یا کاربران تعداد زیادی درخواست Ajax تولید کنند، فشار سنگینی روی سرور وارد می شود.
یکی از مهم ترین عوامل، Heartbeat API وردپرس است. این سیستم برای ذخیره خودکار نوشته ها، بررسی آنلاین بودن کاربران و بروزرسانی بخش های مختلف پنل مدیریت استفاده می شود و به صورت پیش فرض هر چند ثانیه یک بار درخواست Ajax ارسال می کند. اگر چند کاربر همزمان وارد پنل وردپرس باشند، همین موضوع می تواند تعداد زیادی Process PHP ایجاد کند.
در کنار Heartbeat، افزونه های سنگین نیز نقش بسیار مهمی در افزایش مصرف منابع دارند. افزونه هایی مثل WooCommerce، Elementor، افزونه های آمارگیر، چت آنلاین، جستجوی Ajax و سیستم های اعلان معمولاً دائماً درخواست های پس زمینه ارسال می کنند. بعضی از این افزونه ها حتی زمانی که کاربر فعالیت خاصی انجام نمی دهد نیز همچنان درخواست Ajax تولید می کنند.
گاهی نیز مشکل از ربات ها و حملات خارجی است. بسیاری از بات ها فایل admin-ajax.php را هدف قرار می دهند چون این فایل عمومی و همیشه فعال است. در نتیجه هزاران درخواست POST به سرور ارسال می شود و CPU به شدت درگیر می شود.
نشانه های مصرف بالای admin-ajax.php
معمولاً وقتی این مشکل در سایت وجود داشته باشد، علائم مشخصی مشاهده می شود. پنل مدیریت وردپرس کند می شود، صفحات سایت با تاخیر باز می شوند، مصرف CPU در CloudLinux بالا می رود و تعداد Process های PHP افزایش پیدا می کند. در بعضی مواقع نیز خطاهای ۵۰۲ و ۵۰۴ نمایش داده می شوند.
اگر از ابزارهایی مثل GTmetrix یا Chrome DevTools استفاده کنید، معمولاً تعداد زیادی درخواست به admin-ajax.php مشاهده خواهید کرد که زمان پاسخ دهی بالایی دارند.
روش های حل مشکل مصرف بالای admin-ajax.php در وردپرس
۱. پیدا کردن افزونه یا بخش مشکل ساز

مهم ترین مرحله در حل این مشکل، پیدا کردن منبع اصلی درخواست های Ajax است. بسیاری از مدیران سایت بدون بررسی دقیق شروع به غیرفعال کردن افزونه ها می کنند، درحالی که با چند دقیقه بررسی می توان عامل اصلی را شناسایی کرد.
بهترین روش، استفاده از بخش Network مرورگر Chrome است. کافی است کلید F12 را بزنید و وارد تب Network شوید و سپس تیک گزینه XHR را بزنید. بعد از رفرش صفحه اگر درخواست های زیادی به admin-ajax.php مشاهده کردید، روی آن ها کلیک کنید. در بخش Payload معمولاً پارامتری به نام action وجود دارد که مشخص می کند کدام افزونه یا بخش وردپرس درخواست را ارسال کرده است.
برای مثال:
action=heartbeat
یا:
action=wc_ajax
این مقادیر کمک می کنند سریعاً متوجه شوید مشکل از Heartbeat وردپرس است یا از ووکامرس و افزونه های دیگر.
در کنار این روش، افزونه Query Monitor نیز یکی از حرفه ای ترین ابزارهای تحلیل وردپرس محسوب می شود. این افزونه دقیقاً مشخص می کند هر درخواست Ajax توسط کدام افزونه ایجاد شده و چه مقدار CPU و حافظه مصرف کرده است.
۲. کنترل Heartbeat API و کاهش مصرف CPU
در بسیاری از سایت ها مهم ترین عامل مصرف CPU همان Heartbeat API است. وردپرس به صورت پیش فرض هر چند ثانیه درخواست جدیدی ارسال می کند و اگر سایت شما کاربران مدیریتی زیادی داشته باشد، این درخواست ها به شدت افزایش پیدا می کنند.
بهترین راهکار، کاهش فرکانس Heartbeat است نه غیرفعال کردن کامل آن. افزونه Heartbeat Control برای این کار بسیار مناسب است و می توان تنظیم کرد که در فرانت اند کاملاً غیرفعال شود و در پنل مدیریت فقط هر ۶۰ یا ۱۲۰ ثانیه اجرا شود.
اگر نمی خواهید افزونه جداگانه نصب کنید، می توانید با کد زیر Heartbeat را در بخش های غیرضروری غیرفعال کنید، برای این مورد کافیست این فیلتر را در فایل function.php قالب خود اضافه کنید.
add_action('admin_enqueue_scripts', 'stop_heartbeat', 1);
function stop_heartbeat() {
global $pagenow;
if ($pagenow != 'post.php' && $pagenow != 'post-new.php') {
wp_deregister_script('heartbeat');
}
}
این کد باعث می شود Heartbeat فقط در بخش ویرایش نوشته ها فعال باقی بماند.
۳. بهینه سازی ووکامرس و غیرفعال کردن Cart Fragments
در سایت های ووکامرسی، قابلیت Cart Fragments یکی از بزرگ ترین عوامل مصرف منابع است. این ویژگی برای بروزرسانی لحظه ای سبد خرید طراحی شده اما در بسیاری از سایت ها فشار بسیار زیادی روی سرور وارد می کند.
اگر سبد خرید لحظه ای برای شما ضروری نیست، بهتر است این قابلیت را در صفحات غیرضروری غیرفعال کنید:
add_action( 'wp_enqueue_scripts', 'disable_woocommerce_cart_fragments', 11 );
function disable_woocommerce_cart_fragments() {
if (is_front_page()) return;
wp_dequeue_script('wc-cart-fragments');
}
این تغییر معمولاً تاثیر محسوسی روی کاهش تعداد درخواست های Ajax و مصرف CPU دارد.
۴. تاثیر کش و Redis روی کاهش مصرف admin-ajax.php

بسیاری تصور می کنند چون مشکل مربوط به Ajax است، کش تاثیری روی آن ندارد؛ درحالی که وقتی صفحات سایت کش شوند، تعداد زیادی از درخواست های PHP حذف می شود و فشار کلی سرور کاهش پیدا می کند.
استفاده از افزونه هایی مثل LiteSpeed Cache یا WP Rocket می تواند تاثیر بسیار زیادی روی عملکرد سایت داشته باشد. همچنین اگر سرور شما Redis داشته باشد، فعال سازی Redis Object Cache باعث کاهش Query های تکراری دیتابیس می شود و عملکرد درخواست های Ajax را سبک تر می کند.
در سایت های پرترافیک، Redis معمولاً یکی از موثرترین راهکارها برای کاهش مصرف CPU محسوب می شود.
مقاله افزایش سرعت سایت وردپرس در ۷ مرحله نیز میتواند در این خصوص برایتان مفید باشد.
۵. محدود کردن درخواست های ربات ها و حملات روی admin-ajax.php
گاهی اوقات مشکل اصلی از افزونه ها نیست و ربات ها عامل مصرف منابع هستند. بسیاری از بات ها هزاران درخواست به admin-ajax.php ارسال می کنند و باعث افزایش شدید Load سرور می شوند.
اگر از Cloudflare استفاده می کنید، بهتر است روی مسیر زیر Rate Limit تعریف کنید:
/wp-admin/admin-ajax.php
در Nginx نیز می توان تعداد درخواست ها را محدود کرد:
location = /wp-admin/admin-ajax.php {
limit_req zone=one burst=20 nodelay;
}
همچنین با بررسی لاگ های سرور می توانید IP هایی که بیشترین درخواست را ارسال می کنند شناسایی کنید:
grep "admin-ajax.php" access_log | awk '{print $1}' | sort | uniq -c | sort -nr | head
البته به جای access_log میبایست مسیر درست این فایل را قرار دهید ، مثلا در سیپنل مسیر به شکل /usr/local/cpanel/logs/access_log میباشد
آیا غیرفعال کردن کامل admin-ajax.php کار درستی است؟
بسیاری از آموزش ها پیشنهاد می کنند فایل admin-ajax.php را کامل مسدود کنید اما این کار معمولاً تصمیم اشتباهی است. چون بخش های زیادی از وردپرس و افزونه ها به این فایل وابسته هستند.
غیرفعال کردن کامل Ajax ممکن است باعث خرابی ووکامرس، فرم ها، ذخیره خودکار نوشته ها و حتی بخش هایی از پنل مدیریت شود. راهکار حرفه ای این است که درخواست های غیرضروری کنترل شوند، نه اینکه کل سیستم Ajax غیرفعال شود.
جمع بندی
فایل admin-ajax.php یکی از بخش های اصلی وردپرس است و ذاتاً مشکلی ندارد، اما اگر افزونه ها یا کاربران تعداد زیادی درخواست Ajax ایجاد کنند، فشار بسیار سنگینی روی CPU وارد خواهد شد.
در اکثر سایت ها مشکل با ترکیبی از این اقدامات حل می شود:
- کاهش فرکانس Heartbeat
- غیرفعال کردن Ajax های غیرضروری
- بهینه سازی ووکامرس
- استفاده از کش حرفه ای
- فعال سازی Redis
- محدود کردن ربات ها و حملات
- حذف افزونه های سنگین
اگر این موارد اصولی پیاده سازی شوند، معمولاً می توان مصرف مربوط به admin-ajax.php را بین ۵۰ تا ۹۰ درصد کاهش داد و عملکرد سایت را به صورت محسوسی بهبود بخشید.