Bạn đang chạy một site trên VPS, lượng truy cập không nhiều nhưng tỉnh thoảng vẫn bị lỗi Establishing a Database Connection. Lỗi đó cơ bản là do dịch vụ MySQL bị crash vì nguyên nhân hệ thống thiếu RAM. Để khắc phục hiện tượng này và làm cho VPS hoạt động ổn định hơn, việc cần làm là tạo swap cho VPS.
1- Swap là gì
Các hệ điều hành từ lâu đã có khái niệm bộ nhớ ảo, Linux gọi là Swap. Khi các ứng dụng cần bộ nhớ, hệ điều hành sẽ tự động cấp phát bộ nhớ còn thừa, khi bộ nhớ cạn kiệt nó sẽ dùng một phần ổ cứng làm bộ nhớ ảo để lưu trữ. Với chức năng đó, swap là rất quan trọng đảm bảo cho hoạt động ổn định của hệ thống, khắc phục hiện tượng các ứng dụng bị crash hoặc hệ thống bị treo do thiếu RAM. Tình trạng crash MySQL khi sử dụng VPS DigitalOcean là ví dụ tiêu biểu nhất cho vấn đề này.
Hạn chế lớn của swap đó là tốc độ truy xuất dữ liệu chậm do hệ thống đọc ghi dữ liệu trên ổ cứng thay vì trên RAM (Tốc độ truy cập đĩa chậm hơn từ 10 đến 1000 lần so với tốc độ truy cập RAM) , tuy nhiên với các hệ thống sử dụng ổ cứng SSD thì tốc độ cũng đã được cải thiện hơn rất nhiều.
Có 2 loại swap đó là: swap partition và swap file
- swap partition là một phân vùng độc lập nằm trên đĩa cứng, chỉ có mục đích là hoán đổi (swapping), không có file nào khác nằm trên đó.
- swap file là một file riêng biệt nằm trên hệ thống, nó có thể nằm giữa hệ thống của bạn và các file dữ liệu. Loại swap này thường được sử dụng trên VPS.
Khi cài đặt hệ thống Linux, mặc định swap được tạo ra và sử dụng. Tuy nhiên, với các VPS thì swap thường không có sẵn, muốn sử dụng bạn phải tự tạo ra. Bài viết này sẽ hướng dẫn các bạn tạo swap, cấu hình để swap hoạt động hiệu quả nhất. Các ví dụ được thực hiện trên VPS DigitalOcean 512 MB, sử dụng CentOS 64 bit
2- Hướng dẫn cách tạo swap cho VPS
2.1- Kiểm tra xem VPS của bạn đã có swap chưa, dùng lệnh:
free
Nếu cho kết quả
Swap: 0 0 0
Thì swap chưa được tạo.
Bạn cũng có thể kiểm tra bằng lệnh:
swapon -s
Nếu ra kết quả như hình dưới thì swap chưa được tạo.
2.2- Tạo swapfile
Thực hiện lần lượt các câu lệnh dưới đây:
dd if=/dev/zero of=/swapfile bs=1024 count=1024k
Lệnh trên dành dung lượng 1Gb của ổ cứng để tạo swapfile. Bạn có thể thay 1024 bằng 512 hoặc 2048… để tạo swap dung lượng 512MB, 2Gb…
Theo khuyến cáo, dung lượng swap nên bằng hoặc gấp 2 lần dung lượng RAM. Ví dụ, nếu VPS của bạn có 512MB RAM thì swap nên có dung lượng từ 512MB đến 1Gb. Các VPS sử dụng ổ cứng SSD thường có dung lượng hạn chế, do đó các bạn nên tính toán sao đó cho hợp lý.
Tạo phân vùng swap
mkswap /swapfile
swapon /swapfile
2-3- Cấu hình cho swap tự kích hoạt khi khởi động VPS
Mở để chỉnh sửa file fstab bằng lệnh:
nano /etc/fstab
Thêm vào cuối nội dung file dòng:
/swapfile swap swap defaults 0 0
Nhấn CTRL + O và Enter để lưu; CTRL + X để thoát khỏi trình soạn thảo nano.
Chú ý: Nếu bỏ qua bước này, swap sẽ không tự động chạy mỗi khi bạn khởi động lại VPS, bạn phải bật thủ công bằng lệnh swapon
2-4. CHMOD cho swap file
Thực hiện các lệnh:
chown root:root /swapfile chmod 0600 /swapfile
Tới đây bạn đã tạo xong swap cho VPS. Có thể kiểm tra bằng lệnh free
hoặc swapon -s
hoặc bằng lệnh top - c
để kiểm tra xem swap đã hoạt động chưa.
2-5. Cấu hình Swappiness
Swappiness là mức độ ưu tiên sử dụng swap, khi lượng RAM còn lại bằng giá trị của Swappiness (tính theo tỷ lệ phần trăm) thì swap sẽ được sử dụng. Swappiness có giá trị trong khoảng 1 – 100.
- swappiness = 0: swap chỉ được sử dụng khi RAM được sử dụng hết
- swappiness = 10: swap được sử dụng khi RAM còn 10%.
- swappiness = 60: giá trị mặc định
- swappiness = 100: swap được ưu tiên như là RAM.
Mặc định giá trị swappiness là 60, tức là khi lượng RAM còn lại 60% thì swap được dùng đến.
Do tốc độ truy xuất của RAM cao hơn của ổ cứng nên nếu đặt mức ưu tiên sử dụng swap cao thì sẽ ảnh hưởng đến hiệu suất hoạt động của hệ thống. Nhiều ý kiến cho rằng nên đặt mức ưu tiên là 10 để tận dụng được khả năng của RAM.
– Để kiểm tra giá trị swappiness hiện tại của hệ thống, dùng lệnh:
cat /proc/sys/vm/swappiness
– Chỉnh sửa giá trị swappiness về 10
sysctl vm.swappiness=10
– Để tự động cấu hình swappiness=10 mỗi khi khởi động lại VPS, ta chỉnh sửa file sysctl.conf
nano /etc/sysctl.conf
Tìm dòng
vm.swappiness
Thay thế giá trị của nó bằng 10
vm.swappiness=10
Nếu chưa có thì thêm dòng đó vào
Nhấn CTRL + O và Enter để lưu; CTRL + X để thoát khỏi nano.
2-6. Kiểm tra kết quả
Khởi động lại VPS, sau đó dùng các lệnh
swapon -s cat /proc/sys/vm/swappiness
Để kiểm tra xem swap đã chạy như ý chưa.
2.7- Xóa swap
Nếu muốn thay đổi dung lượng swap hoặc đơn giản là không muốn dùng swap nữa, bạn có thể xóa swap
Trước hết, tắt nó đi đã:
swapoff /swapfile
Và xóa bỏ swapfile, thế là xong:
rm -f /swapfile
Chúc các bạn thành công.