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.
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
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
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
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
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
-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:fallocate
Lư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ư: ext3
tù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
-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
-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
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
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
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
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.!