I. Swap là gì?
Swap hay còn được gọi là RAM ảo, được sử dụng để hỗ trợ lưu trữ dữ liệu vào bộ nhớ đĩa cứng khi bộ nhớ vật lý (RAM) đã đầy. Đôi khi Swap cũng được dùng song song để tăng dung lượng bộ nhớ đệm kể cả khi bộ nhớ vật lý vẫn chưa sử dụng hết. Swap thường mặc định được dùng trên các hệ điều hành Linux, Ubuntu hoặc CentOS.
II. Khi nào chúng ta nên sử dụng Swap?
Một trong những trường hợp quan trọng cần đến Swap là khi hệ thống của bạn bị tràn bộ nhớ vật lý (RAM).
Có thể hiểu một cách đơn giản là: bạn không bao giờ có thể lường trước được dung lượng bộ nhớ cho tất cả chương trình trên hệ điều hành. Vì vậy, khi sự cố xảy ra (tràn bộ nhớ RAM), Swap sẽ làm nhiệm vụ duy trì tất cả các hoạt động bình thường dù tốc độ có phần chậm hơn đáng kể thay vì dừng cả hệ thống khiến dữ liệu dễ bị hỏng do chưa được ghi vào đĩa cứng.
III. Khi nào chúng ta không cần sử dụng Swap?
Trong trường hợp máy chủ của bạn có đủ bộ nhớ RAM hoặc không yêu cầu sử dụng không gian Swap hoặc việc có Swap làm giảm đáng kể hiệu suất hệ thống của bạn, thì bạn nên xem xét việc tắt phân vùng Swap.
IV. Hướng dẫn tạo và kích hoạt SWAP trên Linux
Để tạo và kích hoạt SWAP trên Linux chúng ta thực hiện theo 3 bước sau.
Bước 1: SSH vào hệ thống Linux của bạn
Để tạo và kích hoạt SWAP trên Linux, đầu tiên chúng ta cần SSH hoặc truy cập VPS hoặc máy chủ của bạn với quyền root trước.
Sau khi đã SSH thành công chúng ta tiếp tục với bước 2 kiểm tra Swap.
Bước 2: Kiểm tra Swap
Trước khi tiến hành tạo tệp tin Swap, chúng ta cần kiểm tra xem hiện tại hệ thống hiện tại đã kích hoạt Swap hay chưa bằng cách chạy lệnh sau:
swapon -s
Nếu sau khi chạy lệnh mà không có thông tin nào hiển thị ra có nghĩa là máy chủ của chúng ta chưa kích hoạt Swap.
Bước 3: Kiểm tra dung lượng đĩa trống
Kiểm tra dung lượng đĩa trống để chúng ta cân nhắc tạo dung lương tệp tin Swap ở bước sau. Để kiểm tra dung lượng đĩa trống chúng ta sử dụng lệnh sau.
df -h
Dung lượng trống của mình còn đến 31GB nên khá thoải mái để tạo Swap. Vì sau khi tạo Swap, dung lượng máy chủ của bạn sẽ mất tương ứng mới mức dụng lượng mà bạn đã cấp cho Swap.
Bước 4: Tạo tệp tin Swap
Đối với máy chủ của mình chỉ có 4GB RAM nên mình sẽ tạo phân vùng Swap từ 1GB đến 2GB là phù hợp.
Ở đây mình sẽ sử dụng lệnh dd để tạo tệp tin Swap với dung lượng là 2GB.
dd if=/dev/zero of=/mnt/swapfile bs=1024 count=2048k
Lệnh trên sẽ tạo tệp tin Swap có dung lượng 2GB. Bạn có thể thay count=2048k
bằng count=1024k… để tạo Swap dung lượng 1GB. Dung lượng Swap tối đa chỉ nên gấp đôi RAM vật lý.
Sau khi đã tạo xong tệp tin Swap, chúng ta cần tạo một phân vùng cho nó ở bước 5.
Bước 5: Tạo phân vùng Swap và kích hoạt Swap trên Linux
Để tạo phân vùng Swap các bạn hãy chạy lệnh sau.
mkswap /mnt/swapfile
Sau đó chúng ta tiếp tục kích hoạt Swap trên Linux với lệnh bên dưới.
swapon /mnt/swapfile
Bạn sẽ nhận được cảnh báo là nên phân quyền là 0600 để bảo mật hơn cho phân vùng này vì mặc định khi khởi tạo thư mục sẽ có quyền 0644. Bạn hãy bỏ qua vì chúng ta sẽ thực hiện phân quyền lại ở bước sau.
Cảnh báo bảo mật khi kích hoạt Swap mà thư mục đang ở quyền khác với 0600.
Kiểm tra lại trạng thái Swap như ở bước 2 các bạn sẽ thấy mọi thứ bây giờ đã khác.
swapon -s
Kích hoạt Swap trên Linux thành công.
Tiếp tục chúng ta cần thiết lập phân vùng Swap tự động kích hoạt sau khi khởi động lại hệ thống.
echo /mnt/swapfile none swap defaults 0 0 >> /etc/fstab
Tiếp tục thực hiện thiết lập bảo mật cho phân vùng Swap với hai lệnh sau.
chown root:root /mnt/swapfile chmod 0600 /mnt/swapfile
Giải thích hai lệnh trên:
- Lệnh 1: Phân quyền chủ sở hữu nhóm đều thuộc của root.
- Lệnh 2: Phân quyền chỉ có root mới được phép truy cập và đọc ghi dữ liệu.
Chỉ như vậy là chúng ta đã kích hoạt Swap trên Linux thành công rồi đấy. Tuy nhiên nếu bạn cần phân chia mức độ ưu tiên sử dụng Swap khi mức ram đạt giới hạn thì hãy theo dõi tiếp phần còn lại của bài viết nhé.
V. Cấu hình Swappiness
Swappiness là mức độ ưu tiên sử dụng Swap của hệ thống Linux. Khi lượng RAM trống còn lại bằng giá trị của Swappiness (tính theo tỷ lệ phần trăm) thì máy chủ Linux sẽ chuyển qua sử dụng. Ví dụ máy chủ của bạn chỉ còn trống 10% RAM và Swappiness được đặt giá trị là 10 thì máy chủ sẽ chuyển sang sử dụng Swap.
Vì tốc độ của RAM nhanh hơn tốc độ đĩa cứng nhiều lần nên khi dữ liệu được ghi/đọc từ Swap sẽ cho tốc độ chậm hơn khi sử dụng trên RAM rất nhiều. Nên bạn hãy cân nhắc tinh chỉnh Swappiness dao động từ 5 đến 10 là phù hợp.
Lưu ý: Số càng cao thì máy chủ càng thường xuyên sử dụng Swap nhiều hơn, đồng nghĩa đĩa cứng sẽ phải đọc ghi nhiều hơn và mau chóng xuống cấp hơn.
Swappiness sẽ có giá trị trong khoảng 0 – 100.
Dưới đây là một số kịch bản thông thường được sử dụng:
- swappiness = 0: swap chỉ được dùng khi RAM được sử dụng hết.
- swappiness = 10: swap được sử dụng khi RAM còn trống 10%.
- swappiness = 60: swap được sử dụng khi RAM còn trống 60%.
- swappiness = 100: swap được ưu tiên như là RAM.
Các bạn có thể kiểm tra thông số Swappiness bằng lệnh sau:
cat /proc/sys/vm/swappiness
Dưới đây là kết quả trên máy chủ của mình.
Khi lượng RAM vật lý đạt 70% thì Linux chuyển sang sử dụng Swap.
Và để thay đổi giá trị này về 10 chúng ta sử dụng lệnh sau:
sysctl vm.swappiness=10
Tuy nhiên việc sử dụng lệnh này chỉ là cấu hình tạm thời. Và sau khi khởi động lại máy chủ thông số sẽ về mặc định.
Để đảm bảo giữ nguyên thông số này mỗi khi khởi động lại máy chủ bạn cần điều chỉnh tham số vm.swappiness ở cuối file
/etc/sysctl.conf, trường hợp bạn máy chủ của bạn không có dòng này các bạn hãy thêm thủ công vào.
Sau đó bạn hãy lưu lại tệp tin này và khởi động lại máy chủ của mình để nhận thông số mới. Chờ một lát để máy chủ khởi động lại các bạn có thể kiểm tra lại với các lệnh sau.
swapon -s cat /proc/sys/vm/swappiness
Dưới đây là kết quả sau khi mình khởi động lại máy chủ.
Trong một vài trường hơp máy chủ CentOS 7 kể cả khi bạn thay đổi thông số vm.swappiness
ở cuối tệp tin /etc/sysctl.conf cũng không tác dụng sau khi khởi động lại máy chủ thì có thể máy chủ đó đang có tune profile sẽ tự động ghi đè thông số
vm.swappiness
mỗi khi khởi động lại.
Để kiểm tra profile nào đang ghi đè thì các bạn sử dụng lệnh sau:
grep vm.swappiness /usr/lib/tuned/*/tuned.conf
Kết quả có thể sẽ như sau:
Theo như kết quả thì bạn hãy chỉnh sửa thông số vm.swappiness tại tệp tin
/usr/lib/tuned/virtual-guest/tuned.conf thành 10 theo ý của bạn. Và cuối cùng vẫn là khởi động lại máy chủ.
VI. Tổng kết
Việc kích hoạt Swap trên Linux sẽ giúp máy chủ của bạn giảm thiểu rất nhiều rủi ro khi dung lượng bộ nhớ vật lý bị đầy (RAM). Tuy nhiên chúng ta cũng đừng nên lạm dụng Swap quá nhiều vì sẽ gây ra tình trạng chậm máy chủ cũng như làm cho đĩa cứng phải đọc/ghi liên tục, gây ra tình trạng xuống cấp bộ nhớ lưu trữ.