Bộ nhớ và swap: khi nào cần tier cao hơn
Cách phân biệt mức sử dụng bộ nhớ bình thường với tình trạng thiếu hụt, tại sao cần swap trên tier nhỏ, và dựa vào dấu hiệu nào để quyết định chuyển lên gói cao hơn.
Cập nhật 23 tháng 8, 2026
“120 MB trống trong 2 GB” khiến người mới sợ hãi và chẳng có ý nghĩa gì trên Linux: hệ thống cố tình dùng bộ nhớ trống để làm bộ đệm tệp, vì bộ nhớ để không là vô ích. Một cột khác mới cho thấy bức tranh thực sự.
Đọc chỉ số free cho đúng
free -h
# total used free shared buff/cache available
# Mem: 1.9Gi 742Mi 102Mi 18Mi 1.1Gi 1.0Gi
# Swap: 1.0Gi 126Mi 898Mi
Hãy nhìn vào available — lượng bộ nhớ mà một ứng dụng có thể lấy được bằng cách đẩy bộ đệm ra. Chỉ cần giá trị này cao hơn 0 đáng kể thì máy vẫn ổn. free theo nghĩa này là vô dụng.
Dấu hiệu cảnh báo:
availablenhỏ hơn 10% củatotal;Swap usedtăng lên và không được giải phóng;- trong
vmstat 2,si/sokhác 0 và không đổi — hệ thống liên tục phân trang ra đĩa.
Thứ gì đang thực sự ngốn bộ nhớ:
ps aux --sort=-%mem | head -10
smem -tk -s uss 2>/dev/null | tail -10
Swap: cần hay không
Một lượng swap nhỏ là hữu ích ở mọi gói: nó cho hệ thống chỗ để chuyển những trang lâu ngày không dùng và bảo vệ khỏi việc một tiến trình chết ngay lập tức trong một đợt tăng vọt ngắn. Nó không thay thế được bộ nhớ — đĩa chậm hơn hàng trăm lần.
Tạo một tệp swap 2 GB:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Hạn chế việc hệ thống quá háo hức swap:
sysctl -w vm.swappiness=10
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
Lưu ý rằng tệp swap chiếm dung lượng trên đĩa của gói (40 GB trên VDS-1), và việc ghi vào nó tiêu tốn băng thông tốc độ đĩa, xem Tải đĩa.
Rò rỉ hay không đủ bộ nhớ
Biểu đồ bộ nhớ trong bảng điều khiển /hosting/vds/m/<id> ở thang tuần giúp phân biệt hai trường hợp:
- Răng cưa — tăng đến mức trần, giảm khi dịch vụ khởi động lại, rồi lại tăng. Đây là rò rỉ trong ứng dụng; gói cao hơn chỉ trì hoãn vấn đề.
- Một vùng bằng phẳng ở mức trần ngay từ đầu — tập làm việc đơn giản là không đủ chỗ.
- Một cú giảm mạnh — OOM killer đã giết tiến trình; xem bài viết Hết bộ nhớ.
Trước khi đổi gói, hãy xử lý những việc hiển nhiên: giới hạn SystemMaxUse cho journal, đặt giới hạn hợp lý cho cơ sở dữ liệu (MySQL mặc định đòi khá nhiều), gỡ bỏ các dịch vụ không dùng (systemctl list-units --type=service --state=running), và giảm số lượng worker cho PHP-FPM và Gunicorn.
Khi nào nên nâng cấp
Nếu sau khi dọn dẹp mà available vẫn ở gần 0 trong nhiều tuần, swap liên tục được dùng, và bạn cần cả ứng dụng nói chung, hãy chọn gói cao hơn. Bộ nhớ tăng dần theo dãy 2, 4, 8, 16, 24, 32 GB. Việc nâng cấp chỉ theo hướng tăng, với khoản thanh toán thêm cho những ngày còn lại; hạ cấp không khả dụng: đĩa không co lại. Để biết chi tiết, xem bài viết Nâng cấp gói.
Những lỗi thường gặp
- Tắt hoàn toàn swap. Trong một đợt tăng vọt, hệ thống sẽ giết tiến trình thay vì trụ được thêm một phút.
- Đặt swap bằng cả đĩa. Máy sẽ không chết, nhưng nó sẽ bò hàng giờ, còn tệ hơn một cú sập nhanh.
- Nhìn vào
VIRTtrong htop. Kích thước ảo của JVM, PostgreSQL và Node rất lớn và không phản ánh mức tiêu thụ. Hãy nhìn vàoRES.
Bạn cần kiểm tra bộ nhớ trước khi xảy ra sự cố, không phải sau đó. Hãy thiết lập cảnh báo theo ngưỡng — có một công thức đơn giản trong bài viết Cảnh báo website ngừng hoạt động.