admin-ajax.php چرا CPU مصرف میکند؟ روش پیدا کردن افزونه ایجادکننده درخواستهای Ajax

فایل admin-ajax.php در وردپرس یکی از حیاتی‌ترین و در عین حال پربحث‌ترین موضوعات در سیستم مدیریت محتوای وردپرس است که وظیفه مدیریت درخواست‌های ناهمگام (AJAX) را هم در بخش کاربری (Front-end) و هم در بخش پیشخوان مدیریت (Back-end) بر عهده دارد. بسیاری از مدیران وب‌سایت‌های وردپرسی با مشکلاتی همچون کندی

چرا مصرف CPU توسط admin-ajax.php تا این حد بالا می‌رود؟

فایل admin-ajax.php در وردپرس یکی از حیاتی‌ترین و در عین حال پربحث‌ترین موضوعات در سیستم مدیریت محتوای وردپرس است که وظیفه مدیریت درخواست‌های ناهمگام (AJAX) را هم در بخش کاربری (Front-end) و هم در بخش پیشخوان مدیریت (Back-end) بر عهده دارد.

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

در این مقاله مرجع و تخصصی از وبلاگ سابین سرور، به کالبدشکافی عمیق ساختار این اسکریپت، دلایل فنی بالا رفتن بار پردازنده، ابزارهای دقیق ردیابی درخواست‌ها، مدیریت اصولی هوش مصنوعی داخلی وردپرس (Heartbeat API) و تکنیک‌های قطعی کاهش درخواست‌های ایجکس خواهیم پرداخت تا بتوانید سلامت زیرساخت وب‌سایت خود را تضمین کنید.

admin-ajax.php چیست و چگونه کار می‌کند؟

پاسخ صریح: اسکریپت admin-ajax.php یک نقطه پایانی (Endpoint) مرکزی در وردپرس است که به اسکریپت‌های جاوا اسکریپت اجازه می‌دهد بدون نیاز به رفرش کامل صفحه، اطلاعات را با سرور تبادل کرده و توابع PHP را اجرا نمایند.

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

هر بار که کدی در فرانت‌اند یا ادمین سایت نیاز به ذخیره‌سازی خودکار، به‌روزرسانی سبد خرید، بارگذاری محصولات بیشتر در فروشگاه یا چک کردن وضعیت لاگین کاربر دارد، یک درخواست HTTP POST یا GET به آدرس wp-admin/admin-ajax.php ارسال می‌کند.

این یعنی وردپرس باید بار دیگر کل هسته خود، افزونه‌ها، قالب و اتصال به پایگاه داده را بارگذاری کند (Bootstrap)، توابع مربوطه را اجرا کرده و پاسخ را بازگرداند.

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

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

چرا مصرف CPU توسط admin-ajax.php تا این حد بالا می‌رود؟

پاسخ صریح: دلیل اصلی مصرف بالای پردازنده توسط این اسکریپت، اجرای همزمان اسکریپت‌های سنگین PHP، کوئری‌های تکراری و غیربهینه پایگاه داده، و ترافیک بالای درخواست‌های بدون کش (No-Cache) است که افزونه‌ها و قالب‌ها تولید می‌کنند.

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

  • سیستم Heartbeat API وردپرس: این ویژگی برای ذخیره خودکار پیش‌نویس‌ها و نمایش اعلان‌های ورود همزمان طراحی شده است، اما فرکانس پیش‌فرض آن (هر ۱۵ ثانیه یکبار) بار سنگینی روی دوش سرور می‌گذارد.
  • افزونه‌های آمار و چت آنلاین: افزونه‌های شمارش بازدید، ابزارهای پشتیبانی آنلاین و چت زنده‌ای که وضعیت کاربر را هر چند ثانیه یکبار با سرور چک می‌کنند.
  • سیستم‌های سبد خرید فروشگاهی: افزونه‌های ووکامرس برای به‌روزرسانی لحظه‌ای قیمت‌ها یا تعداد اقلام سبد خرید در هدر سایت، مکرراً به این اسکریپت درخواست می‌فرستند.
  • صفحات سازنده‌های صفحه (Page Builders): برخی قالب‌ها یا افزونه‌های ساخت صفحه برای رندرهای زنده یا بارگذاری ویجت‌ها به ایجکس وابستگی شدید دارند.

چگونه افزونه ایجادکننده درخواست‌های ایجکس را پیدا کنیم؟

پاسخ صریح: برای ردیابی دقیق و شناسایی افزونه مقصر، بهترین روش استفاده از ابزار توسعه‌دهنده مرورگر (Browser DevTools)، بخش Network، و همچنین مانیتورینگ لاگ‌های سرور یا ابزارهایی مانند Query Monitor است.

اگر سایت شما دچار کندی شده و متوجه شده‌اید که منبع مشکل درخواست‌های مکرر ایجکس است، باید بدانید کدام بخش از کدها این بار سنگین را ایجاد می‌کنند. مراحل گام‌به‌گام عیب‌یابی به شرح زیر است:

استفاده از بخش Network مرورگر برای رصد درخواست‌ها

مرورگر خود (مانند کروم یا فایرفاکس) را باز کنید، کلید F12 را بزنید تا Developer Tools باز شود و به تب Network بروید. حال فیلتر را روی حالت Fetch/XHR قرار دهید. صفحه سایت را رفرش کنید.

لیستی از درخواست‌هایی که به سمت admin-ajax.php ارسال می‌شوند را مشاهده خواهید کرد. روی هرکدام کلیک کرده و به تب Preview یا Response بروید تا ببینید چه دیتایی رد و بدل می‌شود و چه اکشنی (Action) فراخوانی شده است. نام اکشن معمولاً راهنمای بسیار خوبی برای فهمیدن نام افزونه مربوطه است.

نصب و تحلیل با افزونه Query Monitor

افزونه قدرتمند Query Monitor را روی وردپرس نصب و فعال کنید. این ابزار یک پنل در نوار ادمین بالای صفحه ایجاد می‌کند که تمامی درخواست‌های ایجکس در حال اجرا، کوئری‌های دیتابیس متصل به آن‌ها، زمان اجرا و میزان مصرف حافظه را به تفکیک نشان می‌دهد. با مراجعه به بخش Ajax Requests در این پنل، دقیقاً مشخص می‌شود کدام افزونه بیشترین زمان پردازش را به خود اختصاص داده است.

تحلیل از طریق لاگ‌های سرور و ابزارهای مانیتورینگ

اگر به کنترل‌پنل هاست خود دسترسی دارید، بررسی فایل‌های error_log یا استفاده از ابزار «Top» یا «htop» در محیط SSH می‌تواند نشان دهد که کدام اسکریپت‌ها در حال ایجاد پردازش طولانی هستند.

چگونه سیستم Heartbeat وردپرس را کنترل و بهینه‌سازی کنیم؟

پاسخ صریح: کنترل Heartbeat API با محدود کردن فرکانس آن یا غیرفعال‌سازی در بخش‌هایی که نیازی به آن نیست، می‌تواند تا ۷۰ درصد از مصرف CPU توسط admin-ajax.php بکاهد.

وردپرس به طور پیش‌فرض هر ۱۵ ثانیه یکبار سیگنال‌هایی تحت عنوان Heartbeat ارسال می‌کند. برای کنترل این فرآیند، بهترین روش استفاده از افزونه‌های سبک مدیریت Heartbeat یا اضافه کردن کدهای بهینه‌سازی به فایل functions.php قالب است. به عنوان مثال، می‌توانید فرکانس آن را به ۶۰ ثانیه افزایش دهید یا آن را در بخش پیشخوان کاملاً غیرفعال کنید.

قطعه کد زیر نمونه‌ای استاندارد برای کنترل این رفتار است:


add_filter( 'wp_heartbeat_settings', function( $settings ) {
    $settings['interval'] = 60; // تغییر فاصله زمانی به ۶۰ ثانیه
    return $settings;
});

همچنین اگر نیازی به ذخیره خودکار پست‌ها در زمان ویرایش ندارید، می‌توانید با بهینه‌سازی تنظیمات مربوطه بار روی اسکریپت ایجکس را به حداقل برسانید.

برای مطالعه بیشتر در خصوص بهینه‌سازی وظایف زمان‌بندی شده، مقاله wp-cron چیست و چرا میتواند وردپرس را کند کند؟ آموزش غیرفعالسازی و Cron واقعی را حتماً مطالعه نمایید.

مقایسه روش‌های مدیریت و کاهش درخواست‌های Ajax در وردپرس

برای اینکه بدانید کدام روش بیشترین تاثیر را بر روی کاهش بار پردازنده دارد، جدول مقایسه‌ای زیر به شما دیدگاه مهندسی و دقیقی می‌دهد:

روش بهینه‌سازیمیزان تاثیر بر CPUپیچیدگی اجرامزایا و معایب
بهینه‌سازی Heartbeat APIبسیار بالا (تا ۷۰٪)سادهکاهش چشمگیر درخواست‌های بی‌هدف؛ بدون تاثیر منفی بر عملکرد سایت.
غیرفعال‌سازی افزونه‌های معیوبکامل و قطعیمتوسطحذف ریشه مشکل با جایگزینی افزونه‌های استانداردتر.
کش کردن خروجی Ajaxمتوسط رو به بالاپیشرفتهکاهش اجرای کدهای PHP برای درخواست‌های تکراری با استفاده از Object Cache.
غیرفعال کردن کلی admin-ajaxصددرصدخطرناکباعث از کار افتادن قابلیت‌های حیاتی سایت و فرم‌ها می‌شود (توصیه نمی‌شود).

آیا انتقال ایجکس به WordPress REST API راه حل بهتری است؟

پاسخ صریح: بله، WordPress REST API ساختار مدرن‌تری دارد و با بهره‌گیری از سیستم کشینگ بهتر و ساختار JSON، کارایی بالاتری نسبت به سنت قدیمی admin-ajax.php ارائه می‌دهد.

فایل admin-ajax.php یک تکنولوژی قدیمی در وردپرس است که از روش‌های سنتی برای پردازش درخواست‌ها استفاده می‌کند. در مقابل، WordPress REST API که از نسخه‌های ۴.۷ به بعد وارد هسته وردپرس شده، یک معماری تمیزتر، استانداردتر و سازگار با سیستم‌های کشینگ مدرن دارد.

افزونه‌های حرفه‌ای به جای ارسال درخواست به admin-ajax.php، درخواست‌های خود را به نقاط پایانی REST API ارسال می‌کنند.

مزیت بزرگ REST API این است که پاسخ‌های آن قابلیت کش شدن در لایه‌های سرور (مانند Nginx FastCGI Cache یا Redis) را دارند، در حالی که درخواست‌های admin-ajax.php به صورت پیش‌فرض غیرقابل کش (Non-cacheable) هستند و هر بار باید پردازنده سرور را به طور کامل درگیر کنند.

توسعه‌دهندگان مدرن وردپرس همواره تلاش می‌کنند کدهای سفارشی خود را به جای ایجکس سنتی، بر پایه REST API پیاده‌سازی کنند.

تکنیک‌های پیشرفته سرور برای مدیریت بار admin-ajax.php

پاسخ صریح: پیکربندی صحیح سیستم‌عامل سرور، استفاده از OpCache، پیاده‌سازی Redis Object Cache و استفاده از هاستینگ قدرتمند مثل سابین سرور، راهکار نهایی برای تحمل فشار درخواست‌های ایجکس است.

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

  • فعال‌سازی OPcache: باعث می‌شود کدهای کامپایل شده PHP در حافظه رم نگهداری شوند و نیاز به پردازش مجدد فایل‌ها نباشد.
  • پیاده‌سازی Redis یا Memcached: ذخیره کوئری‌های پایگاه داده و نتایج موقت در حافظه رم، فشار روی دیتابیس را در زمان اجرای درخواست‌های ایجکس به شدت کاهش می‌دهد.
  • استفاده از CloudLinux و محدودیت منابع: در هاستینگ‌های حرفه‌ای، استفاده از فناوری CloudLinux مانع از این می‌شود که یک اسکریپت معیوب تمام منابع سرور را بلوکه کند.

بهینه‌سازی کدهای فرانت‌اند و کنترل دقیق فرکانس درخواست‌های پس‌زمینه، اولین قدم برای نجات پردازنده سرور از بار اضافی است.

اقدامات امنیتی و جلوگیری از حملات ربات‌ها به admin-ajax.php

پاسخ صریح: فایل admin-ajax.php یکی از اهداف رایج برای حملات رباتیک، اسپم و درخواست‌های سربار (DDoS لایه ۷) است که می‌توان با محدود کردن دسترسی یا فیلتر کردن درخواست‌های مخرب آن را ایمن کرد.

برخی اوقات مصرف بالای CPU به دلیل ترافیک واقعی کاربران نیست، بلکه ربات‌های مخرب، اسکریپت‌های اسپم‌کننده نظرات یا ربات‌های خزنده با ارسال هزاران درخواست جعلی به این فایل، وب‌سایت را با اختلال مواجه می‌کنند. برای جلوگیری از این مشکل می‌توان اقدامات زیر را انجام داد:

  • استفاده از فایل .htaccess یا Nginx Rules: مسدود کردن درخواست‌های مشکوکی که هدرهای معتبر ارسالی از مرورگر را ندارند.
  • بهه‌سازی سیستم کپچا (Captcha): اگر فرم‌های ثبت‌نام، ورود یا نظرات با ایجکس کار می‌کنند، اطمینان حاصل کنید که ربات‌ها نمی‌توانند به صورت خودکار فرم‌ها را ارسال و اسکریپت را تحریک کنند.
  • استفاده از وب‌سایت فایروال (WAF): ابزارهایی مانند Cloudflare می‌توانند درخواست‌های غیرعادی و ربات‌های مخرب را پیش از رسیدن به سرور اصلی شناسایی و مسدود کنند.

نتیجه‌گیری و جمع‌بندی

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

همان‌طور که بررسی شد، با استفاده از ابزارهایی نظیر Developer Tools مرورگر و افزونه Query Monitor می‌توان به راحتی افزونه متخلف را شناسایی کرد. با کنترل فرکانس درخواست‌ها، جایگزینی روش‌های بهینه‌تر مانند REST API و استفاده از زیرساخت‌های استاندارد و قدرتمند هاستینگ، می‌توانید وب‌سایتی پایدار، سریع و عاری از کندی داشته باشید.

تیم پشتیبانی فنی سابین سرور با ارائه پیشرفته‌ترین سرویس‌های میزبانی آماده است تا پایداری و سرعت فوق‌العاده‌ای را برای کسب‌وکار آنلاین شما به ارمغان بیاورد.

اشتراک گذاری :
تصویر بهنام باقری
بهنام باقری
حدود 9 سالی میشه که در زمینه طراحی سایت و میزبانی وب سایت به صورت تخصصی فعالیت دارم و در شرکت سابین سرور در کنار دوستان خوبم همراه شما عزیزان هستیم.
آنچه در این مطالب می خوانید
نظر شما راجع به این محتوا
لطفا به این مقاله رای دهید

جدید ترین مقالات منتشر شده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبل از خریدمشاوره بگیرید گفتگو با ما

چطور می‌توانیم کمک کنیم؟

مسیر ارتباطی مناسب رو انتخاب کنید.

درخواست مشاوره

اطلاعات زیر را وارد کنید تا با شما تماس بگیریم.

تأیید امنیتی
در حال ساخت پرسش جدید…

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