Optimization

Cách kiểm tra tài nguyên VPS đang dùng bao nhiêu

Bạn SSH vào VPS Linux, mọi thứ chạy chậm và bạn cần biết tài nguyên đang dùng bao nhiêu trước khi quyết định nâng cấu hình hay tối ưu. Không cần cài panel, không cần công cụ giám sát phức tạp, chỉ cần vài lệnh có sẵn trong mọi bản phân phối. Bài này mình hướng dẫn bạn đọc các chỉ số CPU, RAM, disk, network bằng lệnh chuẩn trên Ubuntu 24.04, Debian 12 hoặc AlmaLinux 9, kèm cách xác định ngay tiến trình nào đang ngốn tài nguyên.

  • Tóm tắt nhanh: dùng top/htop để xem CPU và RAM theo thời gian thực, free -h cho RAM tĩnh, df -hdu -sh cho dung lượng ổ đĩa, iostat cho I/O, vnstat hoặc nload cho băng thông.
  • Quy tắc chung: RAM đầy chưa hẳn là xấu, Linux tận dụng RAM trống làm cache. Chỉ số đáng lo là swap bị dùng nhiều và load average cao dai dẳng.
  • Benchmark nhanh: fio cho tốc độ NVMe, sysbench cho CPU, để so với thông số nhà cung cấp công bố.

Yêu cầu trước khi bắt đầu

Bài này áp dụng cho mọi VPS Linux còn được hỗ trợ, mình viết cụ thể theo Ubuntu 24.04 nhưng lệnh dùng chung được cho Debian 12 và AlmaLinux 9. Bạn cần:

  • Quyền root hoặc user có sudo. Kiểm tra bằng sudo whoami, nếu ra root là được.
  • Kết nối SSH vào máy chủ. Nếu chưa biết cách, đọc bài đổi port SSH mặc định trên VPS Linux để hiểu cấu hình SSH cơ bản.
  • Không cần cài thêm gì nếu chỉ dùng top, free, df. Các lệnh như htop, iostat, vnstat cài thêm vài phút, mình có hướng dẫn bên dưới.

Vì sao phải kiểm tra tài nguyên VPS thường xuyên

VPS là máy chủ ảo có tài nguyên cố định về CPU, RAM và dung lượng NVMe. Khác với máy vật lý, bạn không thể cắm thêm RAM khi đang chạy. Nếu một tiến trình bị rò rỉ bộ nhớ hoặc website đột nhiên tăng traffic, tài nguyên sẽ cạn và máy chủ chậm hoặc treo. Kiểm tra định kỳ giúp bạn phát hiện sớm, trước khi sự cố ảnh hưởng người dùng.

Việc kiểm tra cũng là cơ sở để quyết định nâng cấu hình. Nếu RAM luôn đạt 90% nhưng CPU chỉ 10%, vấn đề nằm ở RAM, bạn nên chọn gói có RAM lớn hơn thay vì mua thêm vCPU. Nếu disk I/O cao liên tục nhưng CPU và RAM đều thấp, có thể nhà cung cấp đang giới hạn tốc độ NVMe hoặc workload của bạn bị nghẽn I/O. Muốn biết máy chủ đang chạy ngon hay không, bạn phải đo chứ không đoán.

Bước 1 - Xem mức dùng CPU theo thời gian thực với top và htop

Lệnh top có sẵn trong mọi hệ thống Linux, hiển thị danh sách tiến trình sắp theo mức dùng CPU và RAM. Gõ top rồi Enter, bạn sẽ thấy giao diện cập nhật mỗi 3 giây:

top - 14:22:31 up 12 days,  4:15,  1 user,  load average: 0.08, 0.12, 0.10
Tasks: 123 total,   1 running, 122 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.1 sy,  0.0 ni, 96.3 id,  0.2 wa,  0.0 hi,  0.1 si
MiB Mem :   3923.1 total,    512.4 free,   1203.2 used,   2207.5 buff/cache
MiB Swap:   1024.0 total,    987.6 free,     36.4 used.   2512.2 avail Mem

Hàng load average có 3 số tương ứng 1, 5, 15 phút. Trên VPS 2 vCPU, load dưới 2 là bình thường. Nếu load vượt quá số vCPU và kéo dài, CPU đang nghẽn. Cột %Cpu(s) cho biết tỷ lệ: us là người dùng, sy là hệ thống, wa là chờ I/O. Nếu wa cao (trên 10-15%), ổ đĩa đang chậm và kéo theo toàn bộ hệ thống.

top hơi khó nhìn nên mình khuyên cài htop, bản hiện đại có màu và thanh trực quan hơn:

sudo apt install htop   # Ubuntu / Debian
sudo dnf install htop   # AlmaLinux / Rocky

htop, bạn thấy thanh CPU và RAM ở trên cùng, danh sách tiến trình bên dưới. Bấm F6 để sắp theo cột, chọn PERCENT_CPU hoặc PERCENT_MEM để tìm tiến trình nặng nhất. Bấm F9 để kill tiến trình, q để thoát.

Bước 2 - Kiểm tra RAM và swap với free

Lệnh free -h cho tổng quan RAM trong 1 giây:

free -h

Output mẫu trên VPS 4GB:

               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.1Gi       512Mi        12Mi       2.1Gi       2.4Gi
Swap:          1.0Gi        36Mi       988Mi

Cột used trong ví dụ trên không phải RAM thật sự đang dùng. Vì Linux tận dụng RAM trống làm cache (buff/cache), con số này bị đẩy lên. Cột bạn cần đọc là available, nó cho biết RAM thực sự có thể cấp cho ứng dụng mới. Trong ví dụ, VPS 4GB vẫn còn 2.4GB khả dụng dù used ghi 1.1GB.

Điều đáng lo là swap. Nếu cột used của swap tăng dần và vượt vài trăm MB, nghĩa là RAM vật lý đã cạn và hệ thống phải tràn sang ổ đĩa, tốc độ tụt thảm hại. Bạn cần kiểm tra tiến trình nào đang ngốn bằng htop sắp theo PERCENT_MEM, hoặc nâng cấu hình RAM. Nếu chưa có swap, xem bài cấu hình swap cho VPS RAM thấp để thêm vùng trống an toàn.

Bước 3 - Kiểm tra dung lượng ổ đĩa NVMe với df và du

df -h hiển thị dung lượng từng phân vùng:

df -h

Output mẫu:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G   14G  5.2G  73% /
tmpfs           2.0G     0  2.0G   0% /dev/shm

Phân vùng / đã dùng 73%, còn 5.2GB. Khi đạt 90-95%, hệ thống bắt đầu chậm và một số dịch vụ ghi log có thể lỗi. Thư mục /tmp/var/log là nơi hay đầy bất ngờ.

df -h chỉ cho tổng quan, muốn biết thư mục nào nặng nhất, dùng du:

sudo du -xhd1 / | sort -h | tail -20

Lệnh này quét toàn bộ thư mục gốc, hiển thị 20 mục lớn nhất. Output gọn kiểu:

4.2G    /var
3.1G    /home
2.4G    /usr

Từ đó bạn đào sâu vào /var, chạy lại lệnh trên với đường dẫn cụ thể: sudo du -xhd1 /var | sort -h | tail. Nếu log chiếm nhiều, đọc bài cấu hình logrotate trên VPS để tự động dọn log cũ.

Bước 4 - Đo tốc độ đọc ghi NVMe với iostat và fio

CPU tốt, RAM thừa mà hệ thống vẫn chậm thì nghi ngờ I/O. Lệnh iostat nằm trong gói sysstat:

sudo apt install sysstat   # Ubuntu / Debian
sudo dnf install sysstat   # AlmaLinux / Rocky
iostat -x 2 3

Cột %util gần rất cao nghĩa là ổ đĩa làm việc hết công suất, khả năng cao nhà cung cấp giới hạn IOPS hoặc bạn đang chạy workload quá nặng. Nếu %util thấp mà máy vẫn chậm, vấn đề nằm ở chỗ khác.

Muốn đo tốc độ đọc ghi thực tế, dùng fio. Cài đặt rồi chạy bài test 30 giây:

sudo apt install fio   # Ubuntu / Debian
sudo dnf install fio   # AlmaLinux / Rocky
fio --name=test --ioengine=libaio --direct=1 --bs=4k --size=1G --rw=randrw --rwmixread=70 --iodepth=32 --numjobs=4 --runtime=30 --group_reporting

Kết quả cuối hiện read: IOPS=..., write: IOPS=... cùng bw=...MiB/s. VPS NVMe chất lượng cho vài chục nghìn IOPS ở block 4K. Nếu chỉ vài trăm IOPS, có thể ổ đĩa đang bị giới hạn nghiêm trọng. Xem thêm bài kiểm tra tốc độ đọc ghi NVMe để hiểu cách đọc kết quả chi tiết.

Bước 5 - Theo dõi băng thông mạng với nload và vnstat

Network ít khi là nút thắt trên VPS trong nước, nhưng khi website bị tấn công hoặc có tiến trình lạ gửi dữ liệu, bạn cần thấy ngay. nload hiển thị tốc độ mạng thời gian thực:

sudo apt install nload   # Ubuntu / Debian
sudo dnf install nload   # AlmaLinux / Rocky
nload

Màn hình hiện IncomingOutgoing với tốc độ tức thời, trung bình. Nếu thấy traffic ra tăng bất thường mà bạn không chạy gì, kiểm tra ngay bằng htop xem tiến trình nào đang chạy.

Muốn xem tổng băng thông đã dùng theo ngày, cài vnstat:

sudo apt install vnstat   # Ubuntu / Debian
sudo dnf install vnstat   # AlmaLinux / Rocky
sudo systemctl enable --now vnstat
vnstat -d

vnstat -d in ra bảng tổng hợp theo ngày. Sau khi chạy vài ngày, bạn có dữ liệu để ước lượng mức dùng hàng tháng. VPS của thueVPS có băng thông trong nước không giới hạn dung lượng, nên con số này chỉ để bạn tham khảo, không lo bị tính phí vượt.

Bước 6 - Xem các tiến trình nặng nhất và log hệ thống

Khi tài nguyên bất thường, bạn cần tìm thủ phạm. Lệnh sau liệt kê 10 tiến trình dùng CPU nhiều nhất:

ps aux --sort=-%cpu | head -11

Và 10 tiến trình dùng RAM nhiều nhất:

ps aux --sort=-%mem | head -11

Output có cột %MEM%CPU, kèm lệnh đang chạy. Nếu thấy tiến trình lạ (tên ngẫu nhiên, đường dẫn trong /tmp), hãy kiểm tra vì có thể là mã độc. Nếu không chắc tiến trình hệ thống nào là gì, hỏi công cụ systemd-analyze blame để xem dịch vụ nào khởi động lâu nhất.

Log hệ thống là nơi ghi lại mọi lỗi. Trên Ubuntu/Debian dùng journalctl:

journalctl -p err -n 50

Lệnh này hiện 50 dòng log mức lỗi gần nhất. Nếu muốn theo dõi log realtime, dùng journalctl -f. Khi OOM kill tiến trình do thiếu RAM, log sẽ ghi rõ tên tiến trình bị giết, giúp bạn biết ai là thủ phạm.

Xử lý lỗi thường gặp khi kiểm tra

Lỗi 1: Lệnh htop, iostat không tìm thấy. Gói chưa cài hoặc kho lưu trữ chưa cập nhật. Chạy sudo apt update (hoặc sudo dnf check-update) rồi cài lại. Không nên cài từ nguồn không chính thức.

Lỗi 2: Load average cao nhưng CPU idle. Kiểm tra wa trong top. Nếu cao, ổ đĩa đang nghẽn. Chạy iostat -x 2 3 xem %util. Có thể do snapshot đang chạy hoặc nhà cung cấp giới hạn IOPS.

Lỗi 3: RAM hiển thị gần đầy nhưng máy vẫn nhanh. Đọc lại cột available thay vì used. Cache trong buff/cache sẽ tự giải phóng khi ứng dụng cần. Chỉ lo khi swap dùng nhiều.

Lỗi 4: Không đọc được output vì chữ chạy nhanh. Dùng top -b -n 1 | head -20 cho bản in tĩnh, hoặc ghi ra file: top -b -n 1 > /tmp/top.txt rồi đọc bằng cat.

Câu hỏi thường gặp

Lệnh nào nhanh nhất để xem RAM VPS đang dùng bao nhiêu?

free -h là nhanh nhất, hiển thị tổng RAM, RAM đã dùng, RAM khả dụng. Hãy đọc cột available vì nó phản ánh đúng RAM thực sự còn dùng được, không tính phần cache.

Làm sao biết tiến trình nào đang ngốn CPU?

top rồi bấm Shift+P để sắp theo CPU, hoặc dùng lệnh ps aux --sort=-%cpu | head -11 để in 10 tiến trình nặng nhất mà không cần theo dõi realtime.

Tài nguyên VPS ở mức nào thì cần nâng cấu hình?

Khi RAM khả dụng (available) gần 0 và swap dùng trên 500MB thường xuyên, hoặc load average vượt số vCPU trong nhiều giờ liên tục. Disk đạt 90% cũng nên dọn dẹp hoặc mở rộng.

VPS 2GB RAM có đủ để chạy website WordPress không?

Đủ cho website trung bình vài trăm lượt truy cập mỗi ngày nếu cấu hình PHP-FPM và cache hợp lý. Xem bài tối ưu PHP-FPM cho WordPress trên VPS để chỉnh cho khớp RAM.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.