Hướng dẫn tạo swap trên VPS

Giới thiệu

Một trong những cách dễ nhất để bảo vệ chống lại lỗi hết bộ nhớ trong các ứng dụng là thêm một số không gian swap vào VPS của bạn. Trong hướng dẫn này, chúng tôi sẽ đề cập đến cách thêm tệp swap vào VPS của bạn.

Cảnh báo: Mặc dù việc tạo swap thường được khuyến nghị cho các hệ thống sử dụng ổ cứng HDD, tuy nhiên với việc tạo swap  trên ổ cứng SSD có thể gây ra sự cố với phần cứng xuống cấp theo thời gian. Do sự cân nhắc này, chúng tôi không khuyên bạn nên bật swap trên Tinohost hoặc bất kỳ nhà cung cấp nào khác sử dụng bộ lưu trữ SSD. Làm như vậy có thể ảnh hưởng phần cứng cơ bản cho bạn và người dùng khác.

Nếu bạn cần cải thiện hiệu suất của máy chủ của mình trên Tinohost, chúng tôi khuyên bạn nên nâng cấp Ram. Điều này sẽ dẫn đến kết quả tốt hơn nói chung và sẽ làm giảm khả năng ảnh hưởng cho các vấn đề phần cứng có thể ảnh hưởng đến dịch vụ của bạn. Tốt hơn bạn nên hãy tối ưu server, tăng cache và nâng cấp bổ sung thêm RAM với các hệ thống sử dụng SSD như tinohost.

SWAP là gì?

swap là một khu vực trên ổ cứng đã được chỉ định là nơi hệ điều hành có thể lưu trữ tạm thời dữ liệu khi mà bộ lưu trữ RAM về cơ bản đã bị hệ điều hành sử dụng hết. Về cơ bản, điều này cung cấp cho bạn khả năng tăng lượng thông tin mà máy chủ của bạn có thể lưu trong bộ nhớ làm việc của nó. Không gian swap trên ổ cứng sẽ được sử dụng chủ yếu khi không còn đủ dung lượng trong RAM để chứa dữ liệu ứng dụng đang sử dụng.

Thông tin ghi vào đĩa sẽ chậm hơn đáng kể so với thông tin được lưu trong RAM, nhưng hệ điều hành sẽ thích giữ dữ liệu ứng dụng chạy trong bộ nhớ RAM và sử dụng swap cho dữ liệu cũ hơn. Nhìn chung, việc có không gian swap  tính như một dự phòng khi RAM của hệ thống của bạn bị cạn kiệt có thể là một mạng lưới an toàn tốt chống lại các ngoại lệ ngoài bộ nhớ trên các hệ thống có bộ nhớ không có SSD.

Với các VPS dùng công nghệ ảo hóa OpenVZ, có thể bạn sẽ không tạo được swap do hệ thống đã tự động kích hoạt sẵn.
Với những server không có swap, khi hết RAM  một lỗi thường hay gặp với hệ thống vps chạy web service thường tự động stop service MySQL, do đó hay xuất hiện thông báo lỗi Establishing a Database Connection.

Bước 1 – Kiểm tra hệ thống để biết thông tin swap trên VPS của bạn.

Trước khi bắt đầu, chúng ta kiểm tra xem hệ thống đã có phân vùng swap chưa, bạn Có thể có nhiều phân vùng swap, nhưng nói chung bạn chỉ cần 1 là đủ.

Lệnh kiểm tra:

sudo swapon --show

hoặc:

swapon -s

Nếu bạn không nhận lại bất kỳ kết quả nào, điều này có nghĩa là hệ thống của bạn chưa có swap.

Bạn có thể xác minh lại bằng lệnh free với cú pháp như sau:

free -h

Output
             total       used       free     shared    buffers     cached
Mem:          1.0G       331M       668M       4.3M        11M       276M
-/+ buffers/cache:        44M       955M
Swap:           0B         0B         0B

Như bạn có thể thấy trong hàng swap của đầu ra, không có swap nào được kích hoạt trên hệ thống.

Bước 2 – Kiểm tra dung lượng trống trên phân vùng ổ cứng

 

Trước tiên chúng ta kiểm tra dung lượng đĩa còn trống bằng lệnh:

  • df -h
Output
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  946M   23G   4% /
udev             10M     0   10M   0% /dev
tmpfs           201M  4.3M  196M   3% /run
tmpfs           501M     0  501M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           501M     0  501M   0% /sys/fs/cgroup
tmpfs           101M     0  101M   0% /run/user/1001

Tổng  dung lượng  hệ  thống được  tính  tại  phân  vùng./trong Mounted on

Trong trường hợp trên dung lượng tôi mới dùng là 946M trên tổng 25GB dung lượng ổ đĩa.

Mặc dù có nhiều ý kiến đối với kích thước phù hợp của phân vùng swap, nó thực sự phụ thuộc vào sở thích cá nhân và yêu cầu ứng dụng của bạn. Nói chung tôi khuyên bạn nên có dung lượng bằng hoặc gấp đôi dung lượng ram trên hệ thống của bạn, mặt khác thì thực tế dung lượng trên 4GB là có thể không cần thiết nếu bạn chỉ sử dụng swap với mục đích dự phòng cho RAM.

Bước 3 – Tạo phân vùng swap.

Bây giờ chúng ta đã biết dung lượng ổ cứng có sẵn, chúng ta có thể tạo 1 phân vùng swap trên hệ thống ổ đĩa của bạn. Tôi sẽ tạo 1 phân vùng swap có tên như sau:

swapfile

Tệp này sẽ được lưu tại thư mục gốc (/). Và có 2 cách để tạo phân vùng này.

Cách Thông thường.

Theo đơn giản, ta tạo một tệp được phân chia bằng cách sử dụng lệnh:dd

File đặt tại:

/dev/zero

Ví dụ, tôi cần tạo 1 file swap với dung lượng là 1GB, với 1024 block và mỗi block là 1MB, tôi sử dụng lệnh sau.

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
Nếu bạn muốn tạo file 2GB bạn sử dụng lệnh:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
Kết quả:
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.36622 s, 786 MB/s

Chúng ta có thể thấy rằng 1 Gigabyte đã được phân bổ bằng cách gõ:

ls -lh /swapfile
kết quả.
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

Bạn có thể có cách tạo phân vùng (file) swap này nhanh hơn bằng cách khác, trước tiên bạn có thể xoá file swap này bằng lệnh:

sudo rm /swapfile, sau đó làm theo bên dưới:

Cách nhanh hơn.

Cách nhanh hơn để có được một tệp là sử dụng  chương  trình:fallocateLưu ý rằng lệnh này chỉ hoạt động với các hệ thống tệp hiện đại hơn, vì vậy, nếu bạn đang sử dụng một  hệ  thống   giả  như:  ext3tùy chọn này không có sẵn cho bạn.

Với: fallocate

Lệnh sẽ tạo ra file nhanh chóng với kích thước preallocated, không cần phải `write dummy contents` giống như là dd.

Ta có thể tạo file swap 1GB bằng lệnh:

sudo fallocate -l 1G /swapfile

Kết quả sẽ hiện ra ngay lập tức. Bạn có thể kiểm tra lại dung lượng file swap bằng lệnh:

ls -lh /swapfile
kết quả:
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

Như vậy bạn có thể thấy bằng cả 1 trong 2 cách bạn đã tạo được file swap thành công.

Bước 4 – kích hoạt phân vùng swap.

Bây giờ bạn đã có 1 file swapfile, bạn cần phải kích hoạt nó thành phân vùng swap.

Trước tiên bạn cần phân quyền lại cho file swapfile, chỉ cho phép người dùng root mới có quyền thực thi trên tệp này, điều này có ý nghĩa bảo mật quan trọng.

bạn sử dụng lệnh sau để phân quyền:

sudo chmod 600 /swapfile

xem lại quyền của file bằng lệnh:

ls -lh /swapfile
kết quả:
-rw------- 1 root root 1.0G May 29 17:34 /swapfile

Như bạn có thể thấy, chỉ người dùng root mới có cờ đọc và ghi.

Bây giờ chúng ta có thể đánh dấu file swapfile là không gian swap bằng cách gõ:

sudo mkswap /swapfile
kết quả:
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=757ee0b7-db04-46bd-aafb-adf6954ea077

Sau khi đánh dấu file, Ta có thể kích hoạt swap cho phép hệ thống của chúng ta bắt đầu sử dụng file này:

sudo swapon /swapfile

Kiểm tra lại swap đã kích hoạt rồi bằng lệnh:

sudo swapon --show
kết quả:
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

Ta kiểm tra đầu ra của thư viện free bằng cách gõfree -h

kết quả:
             total       used       free     shared    buffers     cached
Mem:          1.0G       925M        74M       4.3M        13M       848M
-/+ buffers/cache:        63M       936M
Swap:         1.0G         0B       1.0G

– Thiết lập swap tự động được kích hoạt mỗi khi reboot

echo /swapfile none swap defaults 0 0 >> /etc/fstab
Như vậy là bạn đã kích hoạt thành công swap và hệ điều hành sẽ sử dụng khi cần thiết.

Bước 5 – Điều chỉnh cài đặt swap của bạn

Có một vài tùy chọn mà bạn có thể định cấu hình sẽ có tác động đến hiệu suất hệ thống của bạn khi xử lý trao đổi.

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 0 – 100.

  • 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 10%.
  • swappiness = 60: swap được sử dụng khi RAM còn 60%.
  • swappiness = 100: swap được ưu tiên như là RAM.

Do tốc độ xử lý dữ liệu trên RAM cao hơn nhiều so với Swap, do đó bạn nên đặt giá trị này về gần với 0 để tận dụng tối đa sức mạnh hệ thống. Tốt nhất nên chỉnh về 10.

– Kiểm tra mức độ sử dụng file swap của hệ thống bằng cách chạy dòng lệnh sau

cat /proc/sys/vm/swappiness

– Chỉnh thông số swappiness bằng cách dùng lệnh sysctl

sysctl vm.swappiness=10

– Kiểm tra lại bạn sẽ thấy kết quả trả về 10

cat /proc/sys/vm/swappiness

Để đảm bảo giữ nguyên thông số này mỗi khi khởi động lại VPS bạn cần điều chỉnh tham số vm.swappiness ở cuối file /etc/sysctl.conf (nếu không có bạn hãy add thủ công vào)

nano /etc/sysctl.conf

Thêm dòng sau vào cuối nếu chưa có, nếu có rồi thì update lại giá trị:

vm.swappiness = 10

– Khởi động lại VPS và kiểm tra lại kết quả:

swapon -s
cat /proc/sys/vm/swappiness

Lưu ý

– Với CentOS 7.2 có thể tune profile sẽ overwrite vm.swappiness mỗi lần reboot, bạn cần kiểm tra profile nào đang overwrite để cấu hình lại thủ công.

grep vm.swappiness /usr/lib/tuned/*/tuned.conf

Output có thể như sau:

[root@hocvps ~]# grep vm.swappiness /usr/lib/tuned/*/tuned.conf
/usr/lib/tuned/latency-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/throughput-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/virtual-guest/tuned.conf:vm.swappiness = 30

Lúc này, bạn hãy mở file /usr/lib/tuned/virtual-guest/tuned.conf, tìm vm.swappiness và thay đổi vm.swappiness = 30 thành vm.swappiness = 10.

nano /usr/lib/tuned/virtual-guest/tuned.conf

Nhấn Ctrl + O để lưu, Enter và Ctrl + X để thoát.

Khởi động lại VPS và kiểm tra lại kết quả.

Thay đổi dung lượng swap

Nếu bạn đã theo các hướng dẫn trên để tạo swap file và muốn thay đổi dung lượng swap, hãy thực hiện ngược lại quá trình.

– Tắt swap

swapoff /swapfile

– Xóa file swap

rm -f /swapfile

– Tạo mới file swap với dung lượng mong muốn. Ví dụ mình tạo 2GB (2048k)

sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048k

– Tạo phân vùng swap

mkswap /swapfile

– Kích hoạt swap

swapon /swapfile

– Bảo mật file swap bằng cách chmod

chown root:root /swapfile 
chmod 0600 /swapfile

– Kiểm tra lại tình trạng swap

swapon -s

Khi thay đổi dung lượng swap, các cài đặt từ trước như tự động kích hoạt khi server reboot, thông số Swappiness được giữ nguyên nên bạn không cần phải thao tác gì thêm.

Giờ khởi động lại server rồi kiểm tra lại kết quả thôi.

Phần kết luận

Tổng hợp thứ tự các lệnh bạn cần sử dụng để tạo 1 swap 1GB cho vps của bạn:

Tạo file swapfile:

sudo fallocate -l 1G /swapfile
hoặc
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

Phân quyền file swapfile:

sudo chmod 600 /swapfile

 

Đánh dấu và kích hoạt swapfile:

sudo mkswap /swapfile
sudo swapon /swapfile

– Thiết lập swap tự động được kích hoạt mỗi khi reboot

echo /swapfile none swap defaults 0 0 >> /etc/fstab

Thực hiện theo các bước trong hướng dẫn này sẽ cung cấp cho bạn biện pháp phòng hờ trong trường hợp có thể dẫn đến ngoại lệ ngoài bộ nhớ. Không gian swap có thể cực kỳ hữu ích trong việc tránh một số vấn đề phổ biến chẳng hạn như kill mysql, httpd với các web service.

Nếu bạn đang gặp phải lỗi OOM (hết bộ nhớ) hoặc nếu bạn thấy rằng hệ thống của bạn không thể sử dụng các ứng dụng bạn cần, giải pháp tốt nhất là tối ưu hóa cấu hình ứng dụng hoặc nâng cấp máy chủ của bạn, swap là một biện pháp phòng hờ không phải để giải quyết vấn đề cho ứng dụng, dịch vụ.

Chúc các bạn thành công.!

Related Articles