Giới thiệu
Một cách hiệu quả để tránh lỗi hết bộ nhớ (out-of-memory) trong ứng dụng là thêm không gian swap vào máy chủ của bạn. Trong bài viết này, chúng tôi sẽ hướng dẫn cách tạo tệp swap trên máy chủ Ubuntu 20.04.
Swap là gì?
Swap là một phần không gian lưu trữ trên ổ cứng được hệ điều hành sử dụng để lưu trữ tạm thời dữ liệu khi RAM không còn đủ chỗ chứa. Điều này giúp tăng lượng thông tin mà máy chủ có thể xử lý, mặc dù việc sử dụng swap có một số hạn chế.
Khi không đủ RAM để lưu dữ liệu của ứng dụng, hệ thống sẽ sử dụng không gian swap trên ổ cứng. Tuy nhiên, việc truy cập dữ liệu từ ổ cứng sẽ chậm hơn rất nhiều so với RAM. Do đó, hệ điều hành ưu tiên giữ dữ liệu đang chạy trong RAM và sử dụng swap cho dữ liệu cũ hơn.
Với các hệ thống có ổ cứng không phải SSD, thêm swap là một giải pháp tốt để tránh lỗi hết bộ nhớ.
Bước 1 – Kiểm tra thông tin Swap trên hệ thống
Trước tiên, hãy kiểm tra xem hệ thống đã có không gian swap chưa bằng lệnh sau:
sudo swapon --show
Nếu không có kết quả trả về, nghĩa là hệ thống hiện không có không gian swap. Bạn có thể xác minh thêm bằng lệnh:
free -h
Kết quả ví dụ:
Kết quả
total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Dòng Swap trong kết quả cho thấy không có swap đang hoạt động.
Bước 2 – Kiểm tra dung lượng ổ cứng
Trước khi tạo tệp swap, hãy kiểm tra dung lượng ổ cứng bằng lệnh:
df -h
Kết quả ví dụ:
Kết quả
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Dung lượng sử dụng khác nhau tùy thuộc vào hệ thống của bạn. Một nguyên tắc thông dụng là kích thước swap nên bằng hoặc gấp đôi dung lượng RAM, nhưng không cần thiết vượt quá 4GB nếu chỉ sử dụng làm giải pháp dự phòng RAM.
Bước 3 – Tạo tệp Swap
Sau khi xác định dung lượng ổ cứng khả dụng, bạn có thể tạo tệp swap. Sử dụng lệnh sau để tạo tệp 1GB:
sudo fallocate -l 1G /swapfile
Kiểm tra tệp vừa tạo:
ls -lh /swapfile
Kết quả ví dụ:
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Bước 4 – Kích hoạt tệp Swap
Để sử dụng tệp swap, thực hiện các bước sau:
1. Đặt quyền truy cập chỉ cho root:
sudo chmod 600 /swapfile
Kiểm tra lại:
ls -lh /swapfile
Kết quả ví dụ:
Kết quả
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
2. Đánh dấu tệp là không gian swap:
sudo mkswap /swapfile
Kết quả:
Kết quả
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
3. Kích hoạt swap:
sudo swapon /swapfile
4. Kiểm tra swap:
sudo swapon --show
Kết quả
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Bước 5 – Thiết lập swap vĩnh viễn
Hiện tại, swap chỉ hoạt động trong phiên làm việc này. Để giữ swap sau khi khởi động lại, bạn cần thêm thông tin vào tệp /etc/fstab:
1. Sao lưu tệp /etc/fstab:
sudo cp /etc/fstab /etc/fstab.bak
2. Thêm dòng sau vào cuối tệp:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Bước 6 – Tối ưu Cài đặt Swap để Cải thiện Hiệu Suất Hệ Thống
1. Điều chỉnh tham số swappiness
Tham số swappiness quyết định tần suất hệ thống chuyển dữ liệu từ RAM sang bộ nhớ swap. Giá trị này nằm trong khoảng từ 0 đến 100, tương ứng với tỷ lệ phần trăm.
- Giá trị gần 0: Hệ thống sẽ hạn chế sử dụng swap trừ khi thật sự cần thiết. Điều này giúp cải thiện hiệu suất vì việc truy cập swap (bộ nhớ trên ổ đĩa) chậm hơn nhiều so với RAM. Đặt giá trị thấp phù hợp khi bạn muốn hệ thống hoạt động nhanh hơn.
- Giá trị gần 100: Hệ thống sẽ ưu tiên chuyển nhiều dữ liệu sang swap, giữ RAM trống hơn. Trường hợp này phù hợp nếu bạn chạy các ứng dụng đòi hỏi quản lý bộ nhớ cao.
Kiểm tra giá trị hiện tại:
cat /proc/sys/vm/swappiness
Để đặt giá trị swappiness thành 10, hãy dùng lệnh:
sudo sysctl vm.swappiness=10
Lưu ý, thiết lập này chỉ hiệu lực đến khi khởi động lại hệ thống. Để áp dụng giá trị tự động sau mỗi lần khởi động, sửa tệp cấu hình /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Thêm dòng sau
vm.swappiness=10
2. Điều chỉnh Tham số Cache Pressure
Tham số vfs_cache_pressure quy định mức độ ưu tiên hệ thống lưu trữ thông tin inode và dentry trong bộ nhớ đệm so với các loại dữ liệu khác.
- Inode và dentry là thông tin truy cập hệ thống tệp, được sử dụng thường xuyên và tốn tài nguyên nếu phải truy vấn lại. Vì vậy, lưu trữ chúng trong bộ nhớ đệm sẽ tăng hiệu suất.
Kiểm tra giá trị hiện tại của cache pressure
cat /proc/sys/vm/vfs_cache_pressure
Để sửa giá trị thành 50, sử dụng câu lệnh
sudo sysctl vm.vfs_cache_pressure=50
Như trước, thiết lập này chỉ hiệu lực đến khi khởi động lại. Để duy trì sau mỗi lần khởi động, chỉnh sửa tệp:
sudo nano /etc/sysctl.conf
Thêm dòng sau vào cuối tệp:
vm.vfs_cache_pressure=50
Kết luận
Thêm không gian swap giúp máy chủ của bạn xử lý tốt hơn khi RAM bị quá tải. Với các bước trên, bạn đã thiết lập swap thành công và tối ưu hóa hiệu suất hệ thống.