Tại sao Linux của bạn bỗng dưng “đứng hình”?
Mở 30 tab Chrome, chạy 5 Docker containers, gõ code trên VS Code – và bùm, con trỏ chuột bắt đầu “nhảy disco” trước khi đứng hình hoàn toàn. Nếu dùng Fedora làm máy dev chính, chắc hẳn bạn đã gặp cảnh này ít nhất một lần. Mình dùng Fedora hơn 2 năm, cực thích tốc độ cập nhật package, nhưng quản lý RAM vẫn là một bài toán khó nếu không biết tinh chỉnh.
Trước đây, Linux Kernel dùng OOM Killer để giải quyết vấn đề này. Ngặt nỗi, nó thường ra tay quá muộn. Khi Kernel nhận ra hệ thống hết RAM, máy thường đã rơi vào trạng thái “thrashing”. Lúc này, CPU bận rộn tráo đổi dữ liệu giữa RAM và Swap liên tục. Kết quả là hệ thống tê liệt, bạn không thể thao tác gì thêm.
systemd-oomd ra đời để thay đổi cuộc chơi và được Fedora chọn làm mặc định từ bản 34. Thay vì đợi RAM cạn kiệt, nó theo dõi chỉ số Pressure Stall Information (PSI). PSI cho biết ứng dụng phải chờ bao lâu để có tài nguyên (CPU, RAM, I/O). Nếu thời gian chờ vượt ngưỡng an toàn, systemd-oomd sẽ chủ động can thiệp trước khi máy kịp treo cứng.
Kiểm tra trạng thái systemd-oomd
Dù Fedora cài sẵn công cụ này, bạn vẫn nên kiểm tra xem nó có đang hoạt động ổn định không, nhất là trên các bản Server. Hãy mở terminal và chạy lệnh:
systemctl status systemd-oomd
Nếu thấy dòng active (running), hệ thống của bạn đã được bảo vệ. Để xem chi tiết các nhóm tài nguyên (cgroups) đang bị giám sát, bạn hãy dùng lệnh:
oomctl
Lệnh này liệt kê danh sách Control Group và mức độ áp lực bộ nhớ hiện tại. Điểm cộng lớn của systemd-oomd là khả năng quản lý theo nhóm ứng dụng. Nó sẽ không giết một tiến trình lẻ loi mà xử lý cả cụm liên quan để giải phóng RAM triệt để.
Cấu hình tối ưu cho dân lập trình
File cấu hình chính nằm tại /etc/systemd/oomd.conf. Các thông số mặc định của Fedora khá ổn, nhưng nếu bạn thường xuyên chạy tác vụ nặng, hãy cân nhắc điều chỉnh lại.
sudo nano /etc/systemd/oomd.conf
Bạn cần chú ý ba thông số vàng sau:
- SwapUsedLimitPercent: Mặc định là 90%. Nếu swap đầy 90%, hệ thống bắt đầu hành động. Với ổ SSD NVMe tốc độ cao, bạn có thể giữ nguyên. Nếu dùng HDD cũ, hãy hạ xuống 80% để tránh lag.
- DefaultMemoryPressureLimitPercent: Giới hạn áp lực bộ nhớ (mặc định 60%). Nếu một app khiến hệ thống trì hoãn quá 60% thời gian do thiếu RAM, nó sẽ bị đưa vào danh sách “xử lý”.
- DefaultMemoryPressureDurationSec: Thời gian duy trì áp lực trước khi kích hoạt (mặc định 20 giây).
Sau khi chỉnh sửa, hãy khởi động lại service:
sudo systemctl restart systemd-oomd
Cách bảo vệ ứng dụng quan trọng
Đôi khi bạn đang render video hoặc chạy script nặng và không muốn systemd-oomd tự ý đóng chúng. Chúng ta có thể cấu hình riêng cho từng User Slice để nới lỏng giới hạn.
Để bảo vệ phiên làm việc hiện tại, hãy tạo file override bằng lệnh:
systemctl edit user.slice
Thêm nội dung sau vào file:
[Slice]
ManagedOOMMemoryPressure=auto
ManagedOOMMemoryPressureLimit=80%
Nâng giới hạn lên 80% giúp ứng dụng có thêm “không gian thở” trước khi bị coi là gây hại cho hệ thống.
Giám sát và thử nghiệm thực tế
Làm sao biết systemd-oomd đã cứu máy bạn bao nhiêu lần? Bạn có thể soi log hệ thống để tìm câu trả lời. Đây là cách mình hay dùng để debug xem tại sao Chrome bỗng dưng tự đóng vào sáng nay:
journalctl -u systemd-oomd
Nếu có ứng dụng bị dừng, log sẽ hiển thị rõ: “Killed /user.slice/… due to memory pressure”.
Để thử nghiệm (stress test), bạn có thể dùng script nhỏ này để ép hệ thống cạn RAM. Lưu ý: Hãy lưu lại toàn bộ công việc trước khi thử.
# Tạo phân vùng RAM ảo 16GB và ghi dữ liệu để ép cạn bộ nhớ
sudo mount -t tmpfs -o size=16G tmpfs /mnt
dd if=/dev/zero of=/mnt/test_file bs=1M count=15000
Nếu hoạt động đúng, systemd-oomd sẽ giết lệnh dd ngay khi máy bắt đầu có dấu hiệu ì ạch.
Kinh nghiệm thực tế trên Fedora
Dù máy bạn có 32GB RAM hay nhiều hơn, đừng bao giờ tắt hoàn toàn systemd-oomd. Thay vào đó, hãy kết hợp nó với zRAM. Fedora sử dụng zRAM để nén dữ liệu trực tiếp trên RAM thay vì ghi ra ổ cứng. Sự kết hợp này giúp hệ thống phản hồi cực nhanh ngay cả khi tải nặng.
Nếu thấy công cụ này quá “hung hãn”, bạn hãy thử tăng DefaultMemoryPressureDurationSec lên 30 hoặc 40 giây. Việc này giúp hệ thống có thêm thời gian tự giải phóng bộ nhớ tự nhiên trước khi dùng biện pháp mạnh.
Hy vọng thủ thuật này giúp bạn làm việc trên Fedora ổn định hơn. Từ nay, bạn sẽ không còn phải bấm nút nguồn để restart máy mỗi khi lỡ tay mở quá nhiều tab nữa.

