Giới thiệu

Một trong những cách dễ nhất để tăng khả năng đáp ứng của máy chủ và bảo vệ chống lại lỗi hết bộ nhớ (Out Of Memory) trong các ứng dụng là thêm một số dung lượng swap. Trong hướng dẫn này, Chúng ta sẽ đề cập đến cách thêm tệp Swap vào máy chủ Ubuntu 18.04 (có thể áp dụng với các phiên bản ubuntu khác).

Mặc dù swap thường được khuyến nghị cho các hệ thống HDD truyền thống, sử dụng swap với 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, tôi không khuyên bạn nên bật swap trên bất kỳ nhà cung cấp cloud nào khác sử dụng bộ lưu trữ SSD. Làm như vậy có thể ảnh hưởng đến độ tin cậy của phần cứng bên dưới.

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 mà nó không còn có thể giữ trong RAM. 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ó, với một số cảnh báo. 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ớ và sử dụng swap cho dữ liệu cũ hơn. Nhìn chung, việc có không gian Swap là dự phòng khi RAM của hệ thống bị cạn kiệt có thể là một cách an toàn tốt chống lại các trường hợp ngoại lệ ngoài bộ nhớ trên các hệ thống có bộ nhớ không có SSD.

Kiểm tra hệ thống để biết thông tin Swap

Trước khi bắt đầu, Chúng ta có thể kiểm tra xem hệ thống đã có sẵn dung lượng swap chưa. Có thể có nhiều tệp Swap hoặc phân vùng swap, nhưng nói chung một tệp là đủ.

Chúng ta có thể xem hệ thống có bất kỳ swap được cấu hình nào không bằng cách gõ:

sudo swapon --show

Nếu bạn không nhận lại bất kỳ đầu ra nào, điều này có nghĩa là hệ thống của bạn hiện không có không gian Swap.

Bạn có thể xác minh rằng không có swap hoạt động bằng cách sử dụng tool free:

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         36M        104M        652K        348M        426M
Swap:            0B          0B          0B

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

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

Cách phân bổ không gian phổ biến nhất để swap là sử dụng một phân vùng riêng dành cho nhiệm vụ. Tuy nhiên, việc thay đổi sơ đồ phân vùng không phải lúc nào cũng có thể. Chúng ta có thể dễ dàng tạo một tệp Swap nằm trên một phân vùng hiện có.

Trước khi thực hiện việc này, chúng ta nên kiểm tra mức sử dụng ổ đĩa hiện tại bằng cách gõ:

df -h
OutputFilesystem      Size  Used Avail Use% Mounted on
udev            238M     0  238M   0% /dev
tmpfs            49M  624K   49M   2% /run
/dev/vda1        20G  1.1G   18G   6% /
tmpfs           245M     0  245M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           245M     0  245M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1001

Thiết bị dưới /devlà đĩa của chúng ta trong trường hợp này. Chúng ta có nhiều không gian có sẵn trong ví dụ này (chỉ sử dụng 1.1G). Cách sử dụng của bạn có thể sẽ khác nhau.

Mặc dù có nhiều ý kiến ​​về kích thước phù hợp của không gian Swap, 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. Nói chung, một lượng bằng hoặc gấp đôi dung lượng RAM trên hệ thống của bạn là điểm khởi đầu tốt. Một nguyên tắc tốt khác là mọi thứ trên 4G có thể không cần thiết nếu bạn chỉ sử dụng nó làm dự phòng RAM.

Tạo một tập tin 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 tệp Swap trong hệ thống tệp của mình. Chúng ta sẽ tạo một tệp có kích thước Swap mà Chúng ta muốn gọi swapfile trong thư mục gốc (/).

Cách tốt nhất để tạo một tập tin swap là với chương trình fallocate. Lệnh này tạo ra một tệp có kích thước preallocated ngay lập tức.

Vì máy chủ trong ví dụ của chúng ta có 512MB RAM, chúng ta sẽ tạo tệp 1 Gigabyte trong hướng dẫn này. Điều chỉnh điều này để đáp ứng nhu cầu của máy chủ của 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 bảo lưu bằng cách nhập:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Tập tin của Chúng ta đã được tạo với số lượng không gian chính xác được đặt sang một bên.

Kích hoạt tệp Swap

Bây giờ chúng ta có một tệp có kích thước chính xác có sẵn, chúng ta cần thực sự biến nó thành không gian Swap.

Trước tiên, chúng ta cần khóa các quyền của tệp để chỉ những người dùng có đặc quyền root mới có thể đọc nội dung. Điều này ngăn người dùng bình thường có thể truy cập tệp, điều này có ý nghĩa bảo mật quan trọng.

Làm cho tập tin chỉ có thể truy cập root bằng cách gõ:

sudo chmod 600 /swapfile

Xác nhận thay đổi quyền bằng cách nhập:

ls -lh /swapfile
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ó cờ đọc và ghi.

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

sudo mkswap /swapfile
Output Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

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

sudo swapon /swapfile

Chúng ta có thể xác minh rằng swap có sẵn bằng cách gõ:

sudo swapon --show
Output    NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

Chúng ta có thể kiểm tra đầu ra free một lần nữa để chứng thực những thay đổi của chúng ta:

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         37M         96M        652K        354M        425M
Swap:          1.0G          0B        1.0G

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.

Làm cho tập tin Swap vĩnh viễn

Những thay đổi gần đây của chúng ta đã kích hoạt tệp 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 tệp Swap vào tệp  /etc/fstab.

Sao lưu /etc/fstab tệp trong trường hợp có lỗi xảy ra:

sudo cp /etc/fstab /etc/fstab.bak

Bạn có thể thêm thông tin tệp Swap vào cuối tệp /etc/fstab bằng cách nhập:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

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ể đị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ý swap.

Điều chỉnh thuộc tính Swappiness

Các điều chỉnh swappinesscấu hình thông số mức độ thường xuyên hệ thống của bạn sử dụng Swap dữ liệu trên RAM vào không gian Swap. Đây là một giá trị từ 0 đến 100 đại diện cho tỷ lệ 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. Hãy nhớ rằng, các tương tác với tập tin Swap là những thứ đắt đỏ, vì 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 rằng 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 hơn 100 sẽ cố gắng đưa thêm dữ liệu vào swap trong nỗ lực giữ nhiều không gian RAM hơn. Tùy thuộc vào bộ nhớ của ứng dụng của bạn hoặc những gì bạn đang sử dụng máy chủ của mình, điều này có thể tốt hơn trong một số trường hợp.

Chúng ta có thể thấy giá trị swap hiện tại bằng cách gõ:

cat /proc/sys/vm/swappiness
Output60

Đối với máy tính để bàn, cài đặt swappiness 60 không phải là một giá trị xấu. Đối với một máy chủ, bạn có thể muốn di chuyển nó gần hơn đến 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.

Chẳng hạn, để đặt swappiness thành 10, chúng ta có thể gõ:

sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10

Cài đặt này sẽ tồn tại cho đến lần khởi động lại tiếp theo. Chúng ta có thể tự động đặt giá trị này khi khởi động lại bằng cách thêm dòng vào tệp /etc/sysctl.conf của mình:

sudo nano /etc/sysctl.conf

Ở phía dưới, bạn có thể thêm: /etc/sysctl.conf

vm.swappiness=10

Lưu và đóng tệp khi bạn hoàn thành.

Điều chỉnh cài đặt áp suất bộ đệm

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 định cấu hình hệ thống sẽ chọn bao nhiêu để lưu trữ thông tin inode và thông tin trên các dữ liệu khác.

Về cơ bản, đây là dữ liệu truy cập về hệ thống tập tin. Điều này thường rất tốn kém để tra cứu và rất thường xuyên được yêu cầu, vì vậy đây là một điều tuyệt vời cho hệ thống của bạn để lưu trữ. Bạn có thể thấy giá trị hiện tại bằng cách truy vấn lại prochệ thống tập tin:

cat /proc/sys/vm/vfs_cache_pressure
Output100

Vì hiện tại nó được cấu hình, 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 cài đặt này thành cài đặt thủ công hơn như 50 bằng cách nhập:

sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50

Một lần nữa, điều này chỉ hợp lệ cho phiên làm việc 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 tệp cấu hình như chúng ta đã làm với cài đặt swappiness của mình:

sudo nano /etc/sysctl.conf

Ở dưới cùng, thêm dòng chỉ định giá trị mới của bạn: /etc/sysctl.conf

vm.vfs_cache_pressure=50

Lưu và đóng tệp khi bạn hoàn thành.

Phần kết luận

Thực hiện 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 trường hợp có thể dẫn đến ngoại lệ hết bộ nhớ (OOM). Swap không gian có thể cực kỳ hữu ích trong việc tránh một số vấn đề phổ biến.

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.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments