Sửa lỗi 'Allowed memory size of X bytes exhausted' trong WordPress

beginner📝 WordPress2026-03-18| WordPress 5.x–6.x, PHP 7.4–8.3, Apache/Nginx, Linux/cPanel/Plesk hosting

Error Message

Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes) in /path/to/wordpress/wp-includes/class-something.php on line Z
#wordpress#php#memory#fatal error

Mô tả lỗi

WordPress dừng giữa chừng và hiển thị thông báo sau:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/html/wp-includes/class-wp-query.php on line 3492

Con số 134217728 bytes chính xác là 128 MB. PHP đã chạm ngưỡng giới hạn bộ nhớ và buộc phải dừng tiến trình. Lỗi này thường xuất hiện sau khi kích hoạt một plugin, chạy thanh toán WooCommerce, nhập file CSV hàng chục nghìn dòng, hoặc ngay sau khi cập nhật plugin lớn làm tăng đáng kể mức tiêu thụ bộ nhớ.

Nguyên nhân

PHP áp đặt giới hạn bộ nhớ cứng cho mỗi tiến trình. WordPress mặc định yêu cầu 40 MB. Hầu hết các hosting dùng chung đặt memory_limit ở mức 64–128 MB. Khi plugin hoặc theme vượt quá ngưỡng đó — hệ thống sập.

Các nguyên nhân thường gặp:

  • WooCommerce với 5+ extension chạy đồng thời
  • Page builder (Elementor, Divi) render giao diện phức tạp với nhiều widget lồng nhau
  • Thao tác hàng loạt: nhập bài viết, tạo lại thumbnail, chạy cron job theo lịch
  • Rò rỉ bộ nhớ xuất hiện trong phiên bản mới nhất của một plugin

Cách sửa

Cách 1: wp-config.php (nhanh nhất, áp dụng được trên hầu hết host)

Mở file wp-config.php và thêm dòng sau trước comment /* That's all, stop editing! */:

define( 'WP_MEMORY_LIMIT', '256M' );

Lỗi xuất hiện cả trong wp-admin? Thêm thêm giới hạn bộ nhớ cho admin:

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

Lưu ý quan trọng: cách này chỉ có tác dụng khi không vượt quá giới hạn memory_limit của chính PHP. Nếu PHP bị giới hạn ở 128 MB, WordPress không thể vượt qua ngưỡng đó dù bạn khai báo bao nhiêu ở đây.

Cách 2: php.ini

Đây là cách trực tiếp nhất — thay đổi ngưỡng giới hạn bộ nhớ của PHP.

memory_limit = 256M

Trên VPS hoặc máy chủ riêng, chỉnh sửa file /etc/php/8.1/fpm/php.ini (thay số phiên bản cho phù hợp). Trên hosting dùng chung, tạo file php.ini trong thư mục gốc WordPress — cùng thư mục với wp-config.php. Một số host đọc file này từ public_html hoặc thư mục home.

Sau khi lưu, khởi động lại dịch vụ tương ứng:

# PHP-FPM
sudo systemctl restart php8.1-fpm

# Apache với mod_php
sudo systemctl restart apache2

Cách 3: .htaccess (chỉ dùng cho Apache)

Thêm một dòng vào file .htaccess của WordPress:

php_value memory_limit 256M

Cách này hoạt động trên Apache + mod_php. Trên Nginx hoặc PHP-FPM, directive này bị bỏ qua hoàn toàn — hãy dùng php.ini thay thế.

Cách 4: WP-CLI (kiểm tra trước khi thay đổi)

Xem giới hạn bộ nhớ đang thực sự có hiệu lực:

# WordPress đang nghĩ nó có thể dùng bao nhiêu
wp eval 'echo WP_MEMORY_LIMIT;'

# PHP thực sự cho phép bao nhiêu
wp eval 'echo ini_get("memory_limit");'

Nếu hai con số này khác nhau — ví dụ WordPress kỳ vọng 256M nhưng PHP chỉ báo 128M — bạn cần dùng Cách 2 để nâng ngưỡng PHP. Chỉnh sửa wp-config.php thôi là chưa đủ.

Cách 5: cPanel / Plesk (giao diện đồ họa)

Trên hosting có giao diện quản lý, bỏ qua việc chỉnh file:

  • cPanel: MultiPHP INI Editor → chọn phiên bản PHP → đặt memory_limit
  • Plesk: Domains → PHP Settings → memory_limit
  • Kinsta / WP Engine / Flywheel: Liên hệ bộ phận hỗ trợ. Họ quản lý PHP ở tầng hạ tầng và có thể nâng giới hạn cho bạn.

Nên đặt giá trị bao nhiêu?

  • 256M: Mức mặc định ổn định cho hầu hết site WordPress
  • 512M: Cửa hàng WooCommerce chạy 10+ extension đồng thời
  • 1024M: Chỉ dùng khi nhập dữ liệu hàng loạt hoặc tạo lại thumbnail — tăng tạm thời rồi giảm lại

Đừng đặt -1 (không giới hạn) trên môi trường production. Chỉ cần một plugin bị rò rỉ bộ nhớ là toàn bộ RAM máy chủ sẽ cạn kiệt.

Kiểm tra kết quả

Tạo file tạm tại wp-content/check-memory.php:

<?php
echo 'PHP memory_limit: ' . ini_get('memory_limit') . "\n";
echo 'WP_MEMORY_LIMIT: ' . WP_MEMORY_LIMIT . "\n";

Truy cập file này trên trình duyệt, xác nhận các giá trị khớp với những gì bạn đã đặt, sau đó xóa file ngay lập tức. Để lại file debug trong thư mục public là rủi ro bảo mật thực sự.

Ưa dùng WP-CLI? Một lệnh duy nhất cho kết quả tương tự:

wp eval 'echo "PHP: " . ini_get("memory_limit") . " | WP: " . WP_MEMORY_LIMIT;'

Sau đó tái hiện tình huống gây ra lỗi ban đầu — kích hoạt plugin đó, chạy lại quá trình nhập, tải lại trang bị lỗi. Không còn fatal error nghĩa là bạn đã xử lý xong.

Nếu tăng bộ nhớ vẫn không giải quyết được

Đã đặt 512M mà vẫn sập? Bạn đang gặp rò rỉ bộ nhớ, không đơn thuần là giới hạn quá thấp.

  • Vô hiệu hóa toàn bộ plugin. Kích hoạt lại từng cái một cho đến khi lỗi xuất hiện trở lại — đó chính là thủ phạm.
  • Đọc kỹ đường dẫn file trong thông báo lỗi. Nó thường chỉ thẳng đến code của plugin gây ra vấn đề.
  • Kiểm tra bug tracker hoặc changelog của plugin xem có vấn đề bộ nhớ được ghi nhận từ lần cập nhật gần nhất không.

Kiểm tra thêm file wp-content/debug.log nếu WP_DEBUG_LOG đang bật. Thấy cùng một đường dẫn file lặp lại hàng chục lần? Đó chính là điểm rò rỉ.

Phòng tránh

  • Đặt WP_MEMORY_LIMIT lên 256M trong mọi cài đặt WordPress mới — đừng chờ đến khi lỗi xảy ra
  • Cài Query Monitor và theo dõi mức tiêu thụ bộ nhớ sau mỗi lần cập nhật plugin
  • Chỉ dùng một page builder cho mỗi site. Chạy cả Elementor lẫn Divi trên cùng một cài đặt là tự chuốc họa.
  • Trên VPS/máy chủ riêng, cấu hình giới hạn pool PHP-FPM riêng cho từng site — đừng để một site nặng làm ảnh hưởng đến các site khác

Related Error Notes