Cách thêm không gian swap trên Ubuntu 20.04
Một cách để bảo vệ khỏ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 server của bạn. Trong hướng dẫn này, ta sẽ trình bày cách thêm file swap vào server Ubuntu 20.04. Cảnh báo: Mặc dù swap thường được khuyến khích cho các hệ thống sử dụng ổ cứng quay truyền thống, nhưng việc swap trên SSD có thể gây ra sự cố xuống cấp phần cứng theo thời gian. Do đó, ta khuyên bạn không nên bật swap trên DigitalOcean hoặc bất kỳ nhà cung cấp nào khác sử dụng bộ nhớ SSD.
Swap là gì?
Swap là một phần dung lượng ổ cứng đã được dành cho hệ điều hành để lưu trữ tạm thời dữ liệu mà nó không còn có thể lưu giữ trong RAM. Điều này cho phép bạn tăng lượng thông tin mà server của bạn có thể lưu giữ trong bộ nhớ hoạt động của nó, với một số lưu ý. Không gian swap trên ổ cứng sẽ được sử dụng chủ yếu khi RAM không còn đủ dung lượng để chứa dữ liệu ứng dụng đang sử dụng.
Thông tin được 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 tiếp tục chạy dữ liệu ứng dụng trong bộ nhớ và sử dụng swap cho dữ liệu cũ hơn. Nhìn chung, việc có không gian swap như một phương án dự phòng khi RAM của hệ thống 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 trường hợp ngoại lệ hết bộ nhớ trên các hệ thống có bộ nhớ không phải SSD.
Bước 1 - Kiểm tra hệ thống thông tin swap
Trước khi bắt đầu, ta có thể kiểm tra xem hệ thống đã có sẵn một số dung lượng swap chưa. Có thể có nhiều file swap hoặc swap phân vùng, nhưng nhìn chung chỉ cần một file là đủ.
Ta có thể xem liệu hệ thống có bất kỳ swap được cấu hình nào không bằng lệnh :
- sudo swapon --show
Nếu bạn không nhận lại bất kỳ kết quả nào, điều này nghĩa là hệ thống của bạn hiện không có dung lượng swap .
Bạn có thể xác minh không có swap đang hoạt động bằng cách sử dụng trình free
:
- free -h
Output total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B
Như bạn thấy trong hàng Swap của kết quả , không có swap nào đang hoạt động 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 khi tạo file swap , ta sẽ kiểm tra mức sử dụng đĩa hiện tại đảm bảo có đủ dung lượng. Làm điều này bằng lệnh :
- df -h
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 ta trong trường hợp này. Ta có nhiều dung lượng trống trong ví dụ này (chỉ sử dụng 1,4G). Cách sử dụng của bạn có thể sẽ khác.
Mặc dù có nhiều ý kiến về kích thước thích hợp của không gian swap , nhưng nó thực dependencies vào sở thích cá nhân và yêu cầu ứng dụng của bạn. Nói chung, một số lượng bằng hoặc gấp đôi dung lượng RAM trên hệ thống của bạn là một điểm khởi đầu tốt. Một nguyên tắc nhỏ khác là bất kỳ thứ gì qua 4G trao đổi có thể không cần thiết nếu bạn chỉ sử dụng nó như một bộ nhớ RAM dự phòng.
Bước 3 - Tạo file swap
Bây giờ ta biết dung lượng ổ cứng còn trống của bạn , ta có thể tạo một file swap trên hệ thống file của bạn . Ta sẽ phân bổ một file có kích thước mà ta muốn gọi là swapfile
trong folder root ( /
) của ta .
Cách tốt nhất để tạo file swap là sử dụng chương trình fallocate
. Lệnh này ngay lập tức tạo một file có kích thước được chỉ định.
Vì server trong ví dụ của ta có 1G RAM, ta sẽ tạo file 1G trong hướng dẫn này. Điều chỉnh điều này để đáp ứng nhu cầu của server của bạn :
- sudo fallocate -l 1G /swapfile
Ta có thể xác minh lượng không gian chính xác đã được đặt trước bằng lệnh :
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Tệp của ta đã được tạo với dung lượng chính xác được dành riêng.
Bước 4 - Bật file swap
Bây giờ ta đã có một file có kích thước chính xác, ta cần thực sự biến file này thành không gian swap .
Đầu tiên, ta cần khóa quyền của file để chỉ user có quyền root mới có thể đọc nội dung. Điều này ngăn user bình thường có thể truy cập file , điều này sẽ có tác động bảo mật đáng kể.
Đặt file chỉ có thể truy cập root bằng lệnh :
- sudo chmod 600 /swapfile
Kiểm tra thay đổi quyền bằng lệnh :
- ls -lh /swapfile
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Như bạn thấy , chỉ user root mới được bật cờ đọc và ghi.
Bây giờ ta có thể đánh dấu file là không gian swap bằng lệnh :
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Sau khi đánh dấu file , ta có thể bật file swap , cho phép hệ thống của ta bắt đầu sử dụng nó:
- sudo swapon /swapfile
Xác minh giao dịch swap khả dụng bằng lệnh :
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
Ta có thể kiểm tra lại kết quả của tiện ích free
để chứng thực những phát hiện của ta :
- free -h
Output total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi
Giao dịch swap của ta đã được cài đặt thành công và hệ điều hành của ta sẽ bắt đầu sử dụng nó khi cần thiết.
Bước 5 - Làm cho file swap vĩnh viễn
Những thay đổi gần đây của ta đã kích hoạt file swap cho phiên hiện tại. Tuy nhiên, nếu ta khởi động lại, server sẽ không tự động giữ lại cài đặt swap . Ta có thể thay đổi điều này bằng cách thêm file swap vào file /etc/fstab
của ta .
Backup file /etc/fstab
trong trường hợp xảy ra 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 lệnh :
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Tiếp theo, ta sẽ xem xét một số cài đặt mà ta có thể cập nhật để điều chỉnh không gian swap của ta .
Bước 6 - Điều chỉnh Cài đặt Swap của bạn
Có một số tùy chọn mà bạn có thể cấu hình sẽ có tác động đến hiệu suất hệ thống của bạn 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 của bạn swap dữ liệu từ RAM sang không gian swap . Đây là giá trị từ 0 đến 100 thể hiện phần trăm.
Với các giá trị gần bằng 0, kernel sẽ không swap dữ liệu vào đĩa trừ khi thực sự cần thiết. Lưu ý , các tương tác với file swap "đắt" ở chỗ chúng mất nhiều thời gian hơn so với tương tác với RAM và chúng có thể làm giảm hiệu suất đáng kể. Nói với hệ thống không dựa vào swap nhiều nói chung sẽ làm cho hệ thống của bạn nhanh hơn.
Các giá trị gần hơn 100 sẽ cố gắng đưa nhiều dữ liệu hơn vào swap để cố gắng giữ cho nhiều dung lượng RAM trống hơn. Tùy thuộc vào cấu hình bộ nhớ ứng dụng của bạn hoặc những gì bạn đang sử dụng server của bạn , điều này có thể tốt hơn trong một số trường hợp.
Ta có thể thấy giá trị swappiness hiện tại bằng lệnh :
- cat /proc/sys/vm/swappiness
Output60
Đối với Máy tính để bàn, cài đặt swappiness là 60 không phải là một giá trị tồi. Đối với một server , bạn có thể cần di chuyển nó gần hơn về 0.
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, ta có thể nhập:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Cài đặt này sẽ vẫn tồn tại cho đến lần khởi động lại tiếp theo. 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 ta :
- sudo nano /etc/sysctl.conf
Ở dưới cùng, bạn có thể thêm:
vm.swappiness=10
Lưu file khi bạn hoàn tất.
Điều chỉnh cài đặt áp suất bộ nhớ cache
Một giá trị liên quan khác mà bạn có thể cần sửa đổi là vfs_cache_pressure
. Cài đặt này cấu hình mức độ hệ thống sẽ chọn để lưu vào bộ nhớ cache thông tin inode và răng cưa trên dữ liệu khác.
Về cơ bản, đây là dữ liệu truy cập về hệ thống file . Điều này nói chung là rất tốn kém để tra cứu và rất thường xuyên được yêu cầu, vì vậy đó là một điều tuyệt vời để hệ thống của bạn lưu vào bộ nhớ cache. Bạn có thể thấy 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
Output100
Vì nó hiện đang được cấu hình , hệ thống của ta xóa thông tin inode khỏi bộ nhớ cache quá nhanh. Ta có thể đặt cài đặt này thành cài đặt thận trọng hơn như 50 bằng lệnh :
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
, điều này chỉ hợp lệ cho phiên hiện tại của ta . Ta có thể thay đổi điều đó bằng cách thêm nó vào file cấu hình của ta giống như ta đã làm với cài đặt swappiness:
- sudo nano /etc/sysctl.conf
Ở dưới cùng, thêm dòng chỉ định giá trị mới của bạn:
vm.vfs_cache_pressure=50
Lưu file khi bạn hoàn tất.
Kết luận
Làm theo các bước trong hướng dẫn này sẽ cung cấp cho bạn một số phòng thở trong các trường hợp có thể dẫn đến ngoại lệ mất trí 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 này.
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 server của bạn.
Các tin liên quan
Cách cài đặt Jenkins trên Ubuntu 18.042020-05-04
Cách thiết lập firewall với UFW trên Ubuntu 20.04
2020-05-04
Cách cài đặt và sử dụng Composer trên Ubuntu 20.04
2020-05-04
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 20.04
2020-04-30
Cách thiết lập và cấu hình Tổ chức phát hành chứng chỉ (CA) trên Ubuntu 20.04
2020-04-28
Cách thiết lập khóa SSH trên Ubuntu 20.04
2020-04-23
Cách thiết lập khóa SSH trên Ubuntu 20.04
2020-04-23
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 18.04
2020-04-22
Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 18.04
2020-04-21
Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04
2020-04-16