Hàng ngàn website WordPress gửi email mỗi ngày – thông báo đơn hàng, xác nhận đăng ký, reset mật khẩu. Khi lưu lượng tăng, cơ chế xếp hàng (email queue) trở nên quan trọng. Nhưng nhiều admin lại đối mặt với wordpress email queue memory issue – lỗi khiến server tiêu tốn bộ nhớ quá mức, dẫn đến website chậm hoặc crash. Vấn đề này không chỉ ảnh hưởng đến trải nghiệm người dùng mà còn làm giảm tỷ lệ gửi email thành công. Bài viết này phân tích sâu nguyên nhân gốc rễ, cách phát hiện sớm và các giải pháp tối ưu bộ nhớ khi vận hành hàng đợi email trong WordPress.
WordPress Email Queue Là Gì? Tại Sao Lại Gây Memory Issue?

Email queue trong WordPress là cơ chế tạm thời lưu trữ các email cần gửi vào một hàng đợi (queue) rồi xử lý theo lịch trình, thay vì gửi ngay lập tức. Điều này giúp giảm tải cho server và tránh bị chặn do gửi quá nhiều email cùng lúc. Tuy nhiên, khi thiết lập không đúng hoặc plugin gửi email quá lớn, hàng đợi sẽ chiếm dụng bộ nhớ đáng kể.
Memory issue xảy ra khi:
- Hàng đợi tích lũy quá nhiều email chưa xử lý (hàng ngàn đến hàng chục ngàn bản ghi).
- Mỗi email trong queue lưu trữ dữ liệu lớn (bao gồm HTML, attachments, header).
- WordPress cron hoặc plugin gửi email không giải phóng bộ nhớ sau khi gửi.
- Server có giới hạn bộ nhớ PHP thấp (dưới 128MB) không đáp ứng được khối lượng xử lý.
- Kiểm tra error_log của hosting (thường nằm trong thư mục gốc hoặc dưới /var/log/).
- Dùng plugin Debug Bar hoặc WP_DEBUG trong wp-config.php để bật debug mode:
Hệ quả: website load chậm, lỗi 500 Internal Server, email không được gửi hoặc gửi trễ hàng giờ. Đặc biệt với các trang thương mại điện tử, mỗi email đơn hàng bị trễ có thể ảnh hưởng đến doanh thu và uy tín.
Nguyên Nhân Gốc Rễ Gây WordPress Email Queue Memory Issue

1. Plugin Gửi Email (SMTP) Hoặc Contact Form Không Tối Ưu Hàng Đợi
Nhiều plugin như WP Mail SMTP, Easy WP SMTP, Contact Form 7, WooCommerce… tự động tạo hàng đợi riêng. Nếu plugin không có cơ chế giới hạn số lượng email xử lý trong một lần chạy cron, tất cả email trong queue sẽ được load vào bộ nhớ cùng lúc. Với vài nghìn email chứa nội dung phức tạp, bộ nhớ có thể bị đẩy lên vài trăm MB.
Ví dụ: Một website bán hàng có 5000 đơn hàng chưa gửi email xác nhận. Plugin gửi email cố gắng xử lý toàn bộ 5000 email trong một request cron, mỗi email nặng trung bình 50KB. Tổng bộ nhớ yêu cầu 5000 × 50KB = 250MB, vượt quá giới hạn mặc định 128MB của hầu hết hosting.
2. Cơ Chế Cron Mặc Định Của WordPress Gây Tắc Nghẽn
WordPress sử dụng cron giả (WP-Cron) chạy mỗi khi có người truy cập. Điều này có nghĩa là hàng đợi email chỉ được xử lý khi có traffic. Khi không có khách truy cập, email queue sẽ tồn đọng, và khi có đột biến traffic, toàn bộ hàng đợi được dồn vào một lần xử lý – gây memory spike.
Ngoài ra, WP-Cron không hỗ trợ chạy song song. Nếu một email đang xử lý bị treo (timeout), các email sau cũng bị block, làm queue ngày càng dài và tốn bộ nhớ hơn.
3. Attachments & Nội Dung Email Dung Lượng Lớn
Các email có file đính kèm (PDF hóa đơn, ảnh sản phẩm) làm tăng kích thước mỗi bản ghi trong queue. Khi plugin lưu toàn bộ attachment vào bộ nhớ trong quá trình gửi, dung lượng sẽ tăng vọt. Một attachment 2MB nhân với 100 email sẽ là 200MB chỉ riêng attachments.
4. Cơ Sở Dữ Liệu (Database) Không Được Tối Ưu
Một số plugin lưu toàn bộ nội dung email vào bảng riêng trong database (ví dụ: wp_wpmailsmtp_tasks_meta). Nếu các bảng này không được tối ưu (không index, không xóa bản ghi cũ), query lấy email từ queue sẽ chậm và tốn nhiều bộ nhớ PHP.
Chẩn Đoán WordPress Email Queue Memory Issue: Các Bước Cụ Thể

Kiểm Tra Giới Hạn Bộ Nhớ PHP Hiện Tại
Trước hết, hãy xác định memory limit của server. Tạo file phpinfo.php với nội dung sau và truy cập để xem dòng memory_limit:
<?php phpinfo();?>
Nếu memory_limit dưới 256MB, bạn cần tăng lên 256MB hoặc 512MB. Cách thường dùng: chỉnh sửa file wp-config.php thêm dòng:
define('WP_MEMORY_LIMIT', '256M');
Xem Lỗi Memory Trong Log Server
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Khi lỗi xảy ra, bạn sẽ thấy dòng lỗi như: “Allowed memory size of 134217728 bytes exhausted (tried to allocate …)”.
Đánh Giá Hiệu Suất Plugin Email Queue
Sử dụng plugin Query Monitor để xem số lượng email trong queue, thời gian xử lý và dung lượng bộ nhớ tiêu thụ. Nếu plugin gửi email có option “Batch Size”,
Vấn đề có thể không phải do memory mà do cron không chạy, plugin lỗi hoặc queue bị hỏng. Hãy kiểm tra cron log và thử gửi thủ công một email để kiểm tra.
Có nên chuyển hoàn toàn sang gửi email qua API không?
Đó là giải pháp tốt nhất cho website có lượng email lớn (trên 1000 email/ngày). API giảm tải gần như hoàn toàn cho WordPress và tăng tỷ lệ gửi thành công.
Plugin nào giúp quản lý email queue tốt nhất?
WooCommerce (tích hợp sẵn Action Scheduler), WP Mail SMTP Pro, và các plugin dùng dịch vụ API như Mailgun for WordPress. Tránh các plugin lưu queue dạng serialized data trong options.
Memory issue có làm mất email không?
Nếu PHP bị kill do hết bộ nhớ, email chưa gửi sẽ bị mất nếu plugin không có cơ chế rollback. Một số plugin có flag “in_progress” sẽ reset trạng thái, nhưng thường sẽ mất những email đang xử lý dở dang.
Kết Luận

WordPress email queue memory issue là vấn đề phổ biến nhưng có thể giải quyết triệt để nếu hiểu rõ nguyên nhân: queue quá lớn, cron không tối ưu, attachment nặng, giới hạn bộ nhớ thấp. Bằng cách giảm kích thước email, chuyển sang xử lý batch, dùng server cron thật và tích hợp dịch vụ API bên ngoài, bạn có thể giữ cho website hoạt động ổn định ngay cả khi lưu lượng email cao. Luôn ưu tiên tối ưu trước khi nâng cấp phần cứng – đó là cách tiết kiệm chi phí và đảm bảo hiệu suất lâu dài.
- Theme WordPress Category Page Lỗi: Nguyên Nhân, Cách Khắc Phục và Tối Ưu Toàn Diện
- Hướng dẫn chi tiết cách chỉnh sửa trang WordPress từ cơ bản đến nâng cao
- Các Công Cụ Kiểm Thử Email WordPress Tốt Nhất Năm 2025
- Khắc phục lỗi woocommerce trang tài khoản lỗi: Hướng dẫn chi tiết từ A đến Z
- WordPress MySQL Error: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện















