
Trong bài viết này, tôi sẽ chia sẻ từng bước chi tiết cách thêm swap trên Ubuntu 22.04 của bạn. Việc nắm vững kỹ thuật này không chỉ giúp bạn ngăn ngừa các sự cố tiềm ẩn mà còn tối ưu hóa hiệu suất tổng thể của server, đảm bảo ứng dụng luôn chạy ổn định ngay cả khi RAM bị quá tải.
Swap là gì?
Đầu tiên, chúng ta hãy tìm hiểu cặn kẽ về Swap. Swap là một phần dung lượng ổ cứng được hệ điều hành dành riêng để tạm thời lưu trữ dữ liệu mà nó không còn có thể giữ trong RAM. Điều này cho phép bạn tăng lượng thông tin mà máy chủ có thể giữ trong bộ nhớ làm việc, dù có một vài hạn chế.
Không gian swap trên ổ cứng chủ yếu được sử dụng khi không còn đủ chỗ 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 giữ trong RAM, nhưng hệ điều hành sẽ ưu tiên giữ dữ liệu ứng dụng đang chạy trong bộ nhớ và sử dụng swap cho dữ liệu cũ hơn.
Nhìn chung, việc có swap space như một giải pháp dự phòng khi RAM của hệ thống cạn kiệt có thể là một cách tốt để chống lại các ngoại lệ hết bộ nhớ.
Cách thêm swap trên Ubuntu 22.04
Bước 1: Kiểm tra thông tin Swap hiện có trên hệ thống
Trước khi chúng ta bắt đầu, chúng ta cần kiểm tra xem hệ thống đã có swap space nào chưa. Mặc dù có thể có nhiều swap file hoặc phân vùng swap, nhưng thông thường, một là đủ.
Chúng ta có thể xem hệ thống có bất kỳ swap nào được cấu hình bằng cách gõ:
sudo swapon --show
Nếu bạn không nhận được bất kỳ kết quả đầu ra nào, điều này có nghĩa là hệ thống của bạn hiện không có swap space.
Bạn có thể xác minh rằng không có swap nào đang hoạt động bằng cách sử dụng tiện ích free:
free -h
Bạn sẽ thấy một kết quả tương tự như sau:
Output total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Như bạn có thể thấy trong dòng Swap của kết quả đầu ra, không có swap nào đang hoạt động trên hệ thống này.
Bước 2: Kiểm tra không gian đĩa trống trên phân vùng ổ cứng
Trước khi chúng ta tạo file swap, chúng ta sẽ kiểm tra dung lượng đĩa hiện tại của mình để đảm bảo chúng ta có đủ không gian. Thực hiện điều này bằng cách nhập:
df -h
Kết quả đầu ra sẽ tương tự như thế này:
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Thiết bị có / trong cột Mounted on là đĩa của chúng ta trong trường hợp này. Chúng ta có rất nhiều không gian trống trong ví dụ này (chỉ 1.4G được sử dụng). Mức sử dụng của bạn có thể sẽ khác.
Mặc dù có nhiều ý kiến khác nhau về kích thước phù hợp cho swap space, nhưng 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. Thông thường, một lượng bằng hoặc gấp đôi lượng RAM trên hệ thống là một điểm khởi đầu tốt. Một quy tắc chung khác là bất kỳ thứ gì trên 4G swap có thể là không cần thiết nếu bạn chỉ sử dụng nó như một phương án dự phòng RAM.
Bước 3: Tạo File Swap
Bây giờ chúng ta đã biết dung lượng ổ cứng có sẵn, chúng ta có thể tạo một file swap trên hệ thống file của mình. Chúng ta sẽ cấp phát một file có kích thước mong muốn, đặt tên là swapfile trong thư mục gốc (/).
Cách tốt nhất để tạo file swap là sử dụng chương trình fallocate. Lệnh này tạo ngay lập tức một file với kích thước được chỉ định.
Vì máy chủ trong ví dụ của chúng ta có 1G RAM, chúng ta sẽ tạo một file 1G trong hướng dẫn này. Bạn hãy điều chỉnh điều này để phù hợp với nhu cầu của máy chủ riêng bạn:
sudo fallocate -l 1G /swapfile
Chúng ta có thể xác minh rằng lượng không gian chính xác đã được dành riêng bằng cách gõ:
ls -lh /swapfile
Kết quả đầu ra sẽ xác nhận:
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
File của chúng ta đã được tạo với lượng không gian chính xác được dành riêng.
Bước 4: Kích hoạt File Swap
Bây giờ chúng ta đã có một file với kích thước chính xác, chúng ta cần biến nó thành swap space.
Đầu tiên, chúng ta cần khóa quyền của file để chỉ người dùng có đặc quyền root mới có thể đọc nội dung. Điều này ngăn chặn người dùng thông thường truy cập vào file, điều có thể gây ra các vấn đề bảo mật đáng kể.
Đặt file chỉ có thể truy cập được bởi root bằng cách gõ:
sudo chmod 600 /swapfile
Xác minh thay đổi quyền bằng cách gõ:
ls -lh /swapfile
Kết quả đầu ra sẽ cho thấy:
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Như bạn có thể thấy, chỉ người dùng root mới có quyền đọc và ghi được bật.
Chúng ta có thể đánh dấu file này là swap space bằng cách gõ:
sudo mkswap /swapfile
Bạn sẽ thấy một kết quả tương tự:
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Sau khi đánh dấu file, chúng ta có thể kích hoạt file swap, cho phép hệ thống của chúng ta bắt đầu sử dụng nó:
sudo swapon /swapfile
Xác minh rằng swap đã có sẵn bằng cách gõ:
sudo swapon --show
Kết quả đầu ra sẽ hiển thị:
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Chúng ta có thể kiểm tra lại kết quả đầu ra của tiện ích free để xác nhận những phát hiện của mình:
free -h
Output total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Swap của chúng ta đã được thiết lập thành công và hệ điều hành của chúng ta sẽ bắt đầu sử dụng nó khi cần thiết.
Bước 5: Thiết lập Swap File vĩnh viễn
Những thay đổi gần đây của chúng ta đã kích hoạt file swap cho phiên hiện tại. Tuy nhiên, nếu chúng ta khởi động lại, máy chủ sẽ không tự động giữ lại các cài đặt swap. Chúng ta có thể thay đổi điều này bằng cách thêm file swap vào file /etc/fstab của mình.
Hãy sao lưu file /etc/fstab phòng trường hợp có sự cố:
sudo cp /etc/fstab /etc/fstab.bak
Thêm thông tin file swap vào cuối file /etc/fstab của bạn bằng cách gõ:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Tiếp theo, chúng ta sẽ xem xét một số cài đặt có thể cập nhật để tinh chỉnh không gian swap của mình, giúp hệ thống hoạt động hiệu quả hơn nữa.
Bước 6: Tinh chỉnh cài đặt Swap của bạn
Có một vài tùy chọn mà bạn có thể cấu hình sẽ ảnh hưởng đến hiệu suất hệ thống khi xử lý swap.
Điều chỉnh thuộc tính Swappiness
Tham số swappiness cấu hình tần suất hệ thống di chuyển dữ liệu từ RAM ra swap space. Đây là một giá trị từ 0 đến 100, đại diện cho một tỷ lệ phần trăm.
Với các giá trị gần bằng 0, nhân hệ điều hành (kernel) sẽ không di chuyển dữ liệu vào đĩa trừ khi thực sự cần thiết. Hãy nhớ rằng, tương tác với file swap rất “tốn kém” vì chúng mất nhiều thời gian hơn đáng kể so với tương tác với RAM và chúng có thể gây giảm hiệu suất đáng kể. Việc yêu cầu hệ thống không phụ thuộc nhiều vào swap thường sẽ làm cho hệ thống của bạn nhanh hơn.
Các giá trị gần 100 sẽ cố gắng đưa nhiều dữ liệu hơn vào swap để giữ cho không gian RAM trống nhiều hơn. Tùy thuộc vào cấu hình bộ nhớ của ứng dụng hoặc mục đích sử dụng máy chủ của bạn, điều này có thể tốt hơn trong một số trường hợp.
Chúng ta có thể xem giá trị swappiness hiện tại bằng cách gõ:
cat /proc/sys/vm/swappiness
Bạn sẽ thấy một giá trị như:
Output60
Đối với một máy tính để bàn, cài đặt swappiness là 60 không phải là một giá trị tệ. Tuy nhiên, đối với một máy chủ, bạn có thể muốn di chuyển nó gần hơn về 0.
Chúng ta có thể đặt swappiness thành một giá trị khác bằng cách sử dụng lệnh sysctl.
Ví dụ, để đặt swappiness thành 10, chúng ta có thể gõ:
sudo sysctl vm.swappiness=10
Kết quả sẽ là:
Outputvm.swappiness = 10
Cài đặt này sẽ tồn tại cho đến khi khởi động lại tiếp theo. Chúng ta có thể đặt giá trị này tự động khi khởi động lại bằng cách thêm dòng vào file /etc/sysctl.conf của mình:
sudo nano /etc/sysctl.conf
Ở cuối file, bạn có thể thêm:
vm.swappiness=10
Lưu và đóng file khi bạn hoàn thành.
Điều chỉnh cài đặt Cache Pressure
Một giá trị liên quan khác mà bạn có thể muốn sửa đổi là vfs_cache_pressure. Cài đặt này cấu hình mức độ hệ thống sẽ ưu tiên lưu trữ thông tin inode và dentry hơn các dữ liệu khác.
Về cơ bản, đây là dữ liệu truy cập về hệ thống file. Việc tra cứu dữ liệu này thường rất tốn kém và được yêu cầu rất thường xuyên, vì vậy việc hệ thống của bạn lưu trữ nó là một điều tuyệt vời. Bạn có thể xem giá trị hiện tại bằng cách truy vấn lại hệ thống file proc:
cat /proc/sys/vm/vfs_cache_pressure
Bạn sẽ thấy kết quả:
Output100
Với cấu hình hiện tại, hệ thống của chúng ta loại bỏ thông tin inode khỏi bộ đệm quá nhanh. Chúng ta có thể đặt điều này thành một cài đặt bảo thủ hơn như 50 bằng cách gõ:
sudo sysctl vm.vfs_cache_pressure=50
Kết quả sẽ là:
Outputvm.vfs_cache_pressure = 50
Một lần nữa, điều này chỉ có hiệu lực cho phiên hiện tại của chúng ta. Chúng ta có thể thay đổi điều đó bằng cách thêm nó vào file cấu hình của mình như chúng ta đã làm với cài đặt swappiness:
sudo nano /etc/sysctl.conf
Ở cuối file, thêm dòng chỉ định giá trị mới của bạn:
vm.vfs_cache_pressure=50
Lưu và đóng file khi bạn hoàn thành. Với những điều chỉnh này, chúng ta đã có một hệ thống swap được tối ưu và sẵn sàng hỗ trợ các ứng dụng một cách mạnh mẽ nhất.
Kết luận
Chúng ta đã cùng nhau khám phá quy trình từ kiểm tra swap hiện có, kiểm tra không gian đĩa, tạo và kích hoạt swap file, cho đến việc thiết lập nó vĩnh viễn và tinh chỉnh các thông số quan trọng như swappiness và vfs_cache_pressure. Tuy nhiên, tôi muốn nhấn mạnh rằng swap là một công cụ dự phòng.
Nếu bạn đang gặp phải lỗi OOM (out of memory) liên tục hoặc thấy hệ thống không thể sử dụng các ứng dụng bạn cần, giải pháp tốt nhất vẫn là tối ưu hóa cấu hình ứng dụng của bạn để chúng sử dụng ít bộ nhớ hơn hoặc nâng cấp phần cứng (thêm RAM) cho server của bạn. Việc này sẽ cung cấp hiệu suất tốt nhất vì RAM luôn nhanh hơn nhiều so với swap trên ổ đĩa.