Tạo Swap Memory vị cứu tinh của server < 4GB RAM

Đăng bởi Lưu Đại vào ngày 14-02-2023

1. Vấn đề

Đôi khi server của mình dung lượng RAM free quá ít, nhất là sau khi run thêm service redis và sidekiq. Tham khảo bài chức năng reminder.
Tình cờ mình nhớ ra ngày xưa đã từng đọc về tình huống này trong bài Các việc nên làm sau khi setup server Ubuntu (Linux) mới trên Cloud. của anh Vĩ Nguyễn.
Nên mình lật giở lại và tìm hiểu về cách config swap file cho server. 

2. Swap là gì? 

Swap là một phần trên ổ cứng được cài đặt sẵn kích thước để tạm thời lưu data giúp cho RAM. Làm thế này tránh được trường hợp server bị đầy RAM. 
Tuy nhiên thông tin truy xuất từ trong ổ cứng thì sẽ chậm hơn trên RAM nên ưu tiên hàng đầu vẫn là sử dụng RAM chỉ khi nào RAM đầy / gần đầy thì mới chuyển qua sử dụng Swap

3. Set up Swap trên server Ubuntu

Đầu tiên check xem đã có ai cài swap trên server hiện tại chưa? Một số server sẽ được cài sẵn swap trong khi một số thì không? 
sudo swapon --show 
Nếu terminal không hiển thị gì thì tức là chưa có swap nào được tạo trước đó.
Bước 2 là kiểm tra ổ cứng xem còn đủ để tạo swap không? Không như laptop, server của những con đỗ nghèo khỉ thường chỉ có 25 - 30GB
df -h
Check đoạn /dev/vda1 phần Avail đấy là dung lượng còn trống của server. Nếu server của bạn có dung lượng trống > swap file bạn dự định tạo thì không sao. Nếu không rõ muốn tạo file swap có dung lượng bao nhiêu thì có thể lấy các mốc 25% 50% 100% dung lượng RAM của bạn. Nếu thích + dung lượng disk còn trống nhiều thì có thể để 200% cũng được nhưng không nên để quá 4GB tránh để thừa mà không dùng.
Bước 3 tạo swap file
sudo fallocate -l 1G /swapfile
Kiểm tra lại xem swapfile đã được tạo thành công chưa 
ls -lh /swapfile
Bước 4 Kích hoạt swapfile 
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Kiểm tra lại bằng lệnh
sudo swapon --show
Bước 5 Hiện tại server đã có swapfile tuy nhiên nếu server bị reboot lại thì swapfile sẽ bị mất nên backup lại phòng khi có vấn đề xảy ra
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Bước 6 chỉnh sửa lại một xíu config của swapfile để perf tốt hơn. Như mình đã đề cập ở đầu thì thông tin trong swapfile truy xuất sẽ chậm hơn RAM nhiều nên khi nào RAM gần đầy thì mình mới nên dùng swap 
Chỉ số swapiness thể hiện độ thường xuyên của hệ thống khi swap (chuyển / đổi) data từ RAM vào trong ổ cứng. Chỉ số này chạy từ 0 - 100 càng gần về 0 thì độ thường xuyên càng giảm và ngược lại. Mặc định là 60 (khá thường xuyên).
Nên đặt lại từ 10 - 20 thôi.
sudo sysctl vm.swappiness=10
sudo vim /etc/sysctl.conf
Thêm dòng này vào 
vm.swappiness=0
và đóng vim.
Một chỉ số nữa mình thường thấy config là vfs_cache_pressure. Cách mà hệ thống cache các file system trên RAM mặc định là 100 theo các tài liệu mình tìm hiểu thì nên để về 50. 

sudo sysctl vm.vfs_cache_pressure=50
sudo vim /etc/sysctl.conf
Thêm dòng 
vm.vfs_cache_pressure=50
vào để khi reboot lại server thì config vẫn còn. 

4. Kết luận. 

Docs trên các trang như google developers, digitalocean, mozilla thường được viết rất chi tiết đọc vào làm mình biết thêm được nhiều kiến thức mới.
Nếu có thời gian mọi người có thể tham khảo thêm.