Thứ năm, 30/05/2019 | 00:00 GMT+7

Cách thêm không gian swap trên Debian 8

Một trong những cách dễ nhất để 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 Debian 8.

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 sử dụng swap với SSD có thể gây ra sự cố xuống cấp phần cứng theo thời gian. Do sự cân nhắc này, ta không khuyên bạn nên bật tính năng swap trên DigitalOcean hoặc bất kỳ nhà cung cấp nào khác sử dụng bộ nhớ SSD. Làm như vậy có thể ảnh hưởng đến độ tin cậy của phần cứng cơ bản đối với bạn và những người hàng xóm của bạn. Hướng dẫn này được cung cấp để tham khảo cho những user có thể có hệ thống đĩa quay ở nơi khác.

Nếu bạn cần cải thiện hiệu suất của server của bạn trên DigitalOcean, ta khuyên bạn nên nâng cấp Server của bạn . Điều này sẽ dẫn đến kết quả tốt hơn nói chung và sẽ giảm khả năng góp phần vào các vấn đề phần cứng có thể ảnh hưởng đến dịch vụ của bạn.

Swap là gì?

Swap là một khu vực trên ổ cứng đã được chỉ định làm nơi hệ điều hành có thể tạm thời lưu trữ dữ liệu mà nó không còn có thể lưu 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à server của bạn có thể lưu giữ trong “bộ nhớ” đang 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 buffers cached Mem: 1.0G 331M 668M 4.3M 11M 276M -/+ buffers/cache: 44M 955M 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
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

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 946 triệu). 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ể bắt đầu tạo một file swap trong hệ thống file của bạn .

Ta sẽ tạo một file có tên là swapfile trong folder root (/) của ta . Tệp phải phân bổ dung lượng mà ta muốn cho file swap của ta . Có hai cách chính để làm điều này:

Cách truyền thống, chậm

Theo truyền thống, ta sẽ tạo một file với không gian được phân bổ trước bằng cách sử dụng lệnh dd . Tiện ích đĩa đa năng này ghi từ vị trí này sang vị trí khác.

Ta có thể sử dụng điều này để ghi các số không vào file từ một thiết bị đặc biệt trong hệ thống Linux đặt tại /dev/zero chỉ xuất ra nhiều số không theo yêu cầu.

Ta chỉ định kích thước file bằng cách sử dụng kết hợp bs cho kích thước khối và count số khối. Những gì ta gán cho mỗi tham số gần như hoàn toàn tùy ý. Điều quan trọng là kết quả của việc nhân lên chúng sẽ ra sao.

Ví dụ, trong ví dụ của ta , ta đang tìm cách tạo file 1 Gigabyte. Ta có thể làm điều này bằng cách chỉ định kích thước khối là 1 megabyte và số lượng là 1024:

  • sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
Output
1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.36622 s, 786 MB/s

Kiểm tra lệnh của bạn trước khi nhấn ENTER vì điều này có khả năng phá hủy dữ liệu nếu bạn trỏ of (viết tắt của file kết quả ) đến sai vị trí.

Ta có thể thấy rằng 1 Gigabyte đã được phân bổ bằng lệnh :

  • ls -lh /swapfile
Output
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

Nếu bạn đã hoàn thành lệnh trên, bạn có thể nhận thấy rằng nó mất vài giây. Chỉ 1,3 giây cho file swap nhỏ này, nhưng điều đó có thể tăng đáng kể đối với file lớn hơn trên ổ cứng chậm hơn.

Nếu bạn muốn tìm hiểu cách tạo file nhanh hơn, hãy xóa file swap file bằng sudo rm /swapfile , sau đó làm theo bên dưới:

Con đường nhanh hơn

Cách nhanh hơn để lấy cùng một file là sử dụng chương trình fallocate . Lưu ý lệnh này chỉ hoạt động với các hệ thống file hiện đại hơn, vì vậy nếu bạn đang sử dụng hệ thống ext3 , chẳng hạn, tùy chọn này không khả dụng cho bạn.

Lệnh fallocate tạo một file có kích thước được phân bổ trước ngay lập tức mà không cần phải ghi nội dung giả.

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

sudo fallocate -l 1G /swapfile 

Dấu nhắc sẽ được trả lại cho bạn gần như ngay lập tức. 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
Output
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

Như bạn thấy , file của ta được tạo với lượng không gian 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ỉ những 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 May 29 17:34 /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
Output
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ể 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
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -1

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 buffers cached Mem: 1.0G 925M 74M 4.3M 13M 848M -/+ buffers/cache: 63M 936M Swap: 1.0G 0B 1.0G

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
Output
60

Đố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
Output
vm.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:

/etc/sysctl.conf
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 inoderă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
Output
100

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
Output
vm.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:

/etc/sysctl.conf
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.


Tags:

Các tin liên quan