Hướng dẫn thêm bộ nhớ swap trên Ubuntu

2
thêm swap space

Một trong những cách dễ nhất để tăng cường khả năng phản hồi của server cũng như đề phòng lỗi tràn bộ nhớ trong các ứng dụng – chính là thêm dung lượng bộ nhớ swap. Trong bài viết này, mình sẽ hướng dẫn cách thêm một file swap vào Ubuntu server.

Swap là gì?

Swap là một khu vực trên ổ đĩa cứng được chỉ định là nơi hệ điều hành có thể sử dụng để lưu trữ các dữ liệu tạm thời – có thể không được giữ lại trên RAM nữa. Về cơ bản, điều này giúp bạn tăng khả năng lưu giữ được thêm một lượng lớn thông tin mà server có thể giữ lại trong khi vẫn đang làm việc với bộ nhớ. Dung lượng swap trên ổ đĩa cứng sẽ được dùng chủ yếu khi mà không còn đủ dung lượng RAM để chứa dữ liệu mà ứng dụng đang chạy nữa.

Thông tin được ghi vào đĩa sẽ chậm đáng kể hơn nhiều so với các thông tin được giữ lại trong RAM, nhưng hệ điều hành sẽ giữ các dữ liệu ứng dụng đang chạy trong RAM và dữ liệu không được sử dụng nữa trong bộ nhớ swap. Nói chung, việc có không gian bộ nhớ swap là giải pháp dự phòng khi RAM hệ thống của bạn bị cạn – có thể dẫn đến lỗi tràn bộ nhớ (out-of-memory error) gây ra tình trạng treo máy.

Xem thêm: Phân biệt swapping và paging memory

Hướng dẫn kiểm tra thông tin Swap trên hệ thống

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

Chúng ta có thể kiểm tra xem hệ thống đã cấu hình bộ nhớ swap hay chưa bằng cách gõ lệnh sau:

$ sudo swapon --show

Nếu bạn không thấy bất kỳ output nào, nghĩa là hệ thống chưa cấu hình Swap.

Bạn có thể xác minh thêm bằng cách sử dụng tiện ích free trên Linux bằng câu lệnh sau:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi        10Gi       344Mi       2,7Gi       4,0Gi       1,4Gi
Swap:            0B          0B          0B

Như bạn có thể thấy ở bên trên toàn bộ phần Swap đều là con số 0.

Hướng dẫn kiểm tra không gian trống trên phân vùng ổ đĩa cứng

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

Trước khi bắt đầu, chúng ta nên kiểm tra xem dung lượng ổ đĩa hiện tại ra sao bằng cách gõ lệnh sau:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7,7G     0  7,7G   0% /dev
tmpfs           1,6G  3,1M  1,6G   1% /run
/dev/nvme0n1p6   82G   33G   46G  42% /
tmpfs           7,7G  393M  7,3G   6% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           7,7G     0  7,7G   0% /sys/fs/cgroup

Ổ đĩa đằng sau /dev chính là ổ đĩa trên hệ thống của mình. Trên hệ thống của mình có khá nhiều dung lượng trống (46GB).

Mặc dù có nhiều ý kiến về kích thước của một không gian bộ nhớ swap thích hợp khác nhau, tuy nhiên theo mình thấy kích cỡ phụ thuộc vào sở thích cá nhân và ứng dụng chạy trên hệ thống của bạn. Nói chung, hệ thống nên có một lượng dung lượng Swap lớn bằng hoặc gấp đôi lượng RAM trên hệ thống của bạn – thường là điểm khởi đầu tốt cho những người chưa biết cách lựa chọn kích cỡ thích hợp. Một quy tắc khác là dung lượng Swap trên 4GB có thể không cần thiết nếu bạn chỉ sử dụng nó trong trường hợp dự phòng vượt quá RAM.

Cách tạo file swap

Bây giờ chúng ta đã biết dung lượng ổ cứng trên hệ thống đang trống bao nhiêu rồi, chúng ta có thể tạo ra một file swap bên trong filesystem. Mình sẽ tạo một file swap có kích thước mình muốn gọi là swapfile nằm trong thư mục (/).

Cách tốt nhất để tạo một file swap là sử dụng chương trình fallocate. Lệnh này tạo ra một file có kích thước được chỉ định ngay lập tức.

Vì server trong ví dụ này của mình chỉ có 16GB RAM, mình sẽ tạo ra một file có kích thước 1GB trong ví dụ này. Điều chỉnh lại con số này để đáp ứng với nhu cầu và sở thích của bạn sao cho hợp lý.

$ sudo fallocate -l 1G /swapfile

Mình có thể xác nhận được dung lượng file vừa tạo đã đúng chưa bằng cách chạy câu lệnh sau:

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

File mình vừa tạo có dung lượng đúng với câu lệnh mình chạy ở trên.

Xem thêm: Kali linux là gì

Hướng dẫn kích hoạt File Swap

Bây giờ mình đã có một file được tạo ra với đúng kích thước đã tạo, mình cần phải biến file này thành không gian bộ nhớ swap.

Đầu tiên, mình cần khóa quyền sử dụng file này lại, chỉ người dùng với quyền root mới có thể đọc được nội dung trong đó. Để ngăn chặn người dùng thông thường truy cập tới file này – sẽ mang một ý nghĩa quan trọng về mặt bảo mật.

Để làm cho file này chỉ được truy cập bởi quyền root, gõ vào lệnh sau:

$ sudo chmod 600 /swapfile

Xác nhận lại quyền trên file này sử dụng lệnh:

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

Như bạn có thể thấy bên trên, chỉ người dùng root được gán cờ đọc và ghi file. Bây giờ mình sẽ đánh dấu file này như không gian bộ nhớ swap, sử dụng lệnh:

$ sudo mkswap /swapfile
Setting 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 bắt đầu sử dụng không gian bộ nhớ swap.

$ sudo swapon /swapfile

Để xác nhận file swap đã được kích hoạt thực sự chưa, sử dụng câu lệnh sau:

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

Bây giờ quay trở lại sử dụng tiện ích free một lần nữa để kiểm tra tính đúng đắn.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi        10Gi       344Mi       2,7Gi       4,0Gi       1,4Gi
Swap:          1.0G          0B        1.0G

Vậy là swap đã được thiết lập thành công rồi đấy và hệ điều hành sẽ bắt đầu sử dụng nó ngay khi cần thiết.

Sử dụng File Swap vĩnh viễn

Những thay đổi như mình đã trình bày bên trên khi hệ thống sử dụng Swap chỉ được kích hoạt ở phiên hiện tại. Tuy nhiên, nếu chúng ta khởi động lại hệ thống, thì server sẽ không giữ lại các thiết lập swap ở trên một cách tự động. Chúng ta có thể thay đổi bằng cách thêm thông tin file swap vào file /etc/fstab.

Backup file /etc/fstab lại trong trường hợp sai xót gì đấy.

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

Bây giờ thêm thông tin file swap vào cuối file /etc/fstab bằng cách sử dụng lệnh sau:

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

Như vậy là hệ thống của bạn sẽ tự động sử dụng file swap mỗi khi hệ thống khởi động lại. Sử dụng Swap sẽ giúp bạn dự phòng được một số trường hợp dẫn đến tràn bộ nhớ. Không gian bộ nhớ swap có thể cực kỳ hữu ích trong việc phòng tránh một số vấn đề phổ biến trên hệ thống. Nếu bạn đang gặp phải lỗi OOM (out-of-memory), hay cho rằng hệ thống không thể sử dụng được các ứng dụng khi cần, giải pháp tốt nhất lúc này chính là tối ưu hóa cấu hình ứng dụng hoặc nâng cấp server của bạn.

5/5 (2 Reviews)