Swap là khái niệm bộ nhớ ảo được sử dụng trên hệ điều hành Linux. Khi VPS/Server hoạt động, nếu hết RAM hệ thống sẽ tự động sử dụng một phần ổ cứng để làm bộ nhớ cho các ứng dụng hoạt động.

Với những server không có swap, khi hết RAM hệ thống thường tự động stop service MySQL, do đó hay xuất hiện thông báo lỗi Establishing a Database Connection.

Do sử dụng ổ cứng có tốc độ chậm hơn RAM, nhất là với những server dùng ổ cứng thường không dùng SSD, do đó không nên thường xuyên sử dụng Swap sẽ làm giảm hiệu năng hệ thống. Nếu tình trạng hết RAM hay xảy ra, bạn hãy tối ưu server, tăng cache và nâng cấp bổ sung thêm RAM.

Với các VPS dùng công nghệ ảo hóa OpenVZ, có thể bạn sẽ không tạo được swap do hệ thống đã tự động kích hoạt sẵn.

Hướng dẫn tạo Swap

Áp dụng được cả trên CentOSUbuntu.

1. Kiểm tra swap

Trước khi tiến hành tạo file swap cần kiểm tra xem hiện tại hệ thống đã kích hoạt swap hay chưa bằng cách chạy:

swapon -s

Nếu không có thông tin gì hoặc trả về như hình dưới chứng tỏ server chưa có swap và bạn có thể tạo.

Swap chua duoc tao

2. Kiểm tra dung lượng trống

Sử dụng lệnh df -h để kiểm tra dung lượng trống. Còn 13GB, vẫn thoải mái để tạo swap:

Kiem tra dung luong trong

3. Tạo swap

– Chạy lệnh dd. Ở đây mình tạo 1GB swap (count=1024k) cho VPS 768MB RAM

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k

Lệnh trên sẽ tạo swap có dung lượng 1Gb. Bạn có thể thay count=1024k bằng count=2048k… để tạo swap dung lượng 2Gb. Dung lượng Swap tối đa chỉ nên gấp đôi RAM vật lý.

Tao swap

– Tạo phân vùng swap

mkswap /swapfile

Tao phan vung Swap

– Kích hoạt swap

swapon /swapfile

Đoạn này có thể gặp thông báo warning insecure permissions 0644, không sao cả bạn cứ bỏ qua. Chúng ta sẽ chỉnh lại ở bước sau.

– Kiểm tra lại tình trạng swap bạn sẽ thấy như sau:

swapon -s

Kiem tra lai Swap

– Thiết lập swap tự động được kích hoạt mỗi khi reboot

echo /swapfile none swap defaults 0 0 >> /etc/fstab

– Bảo mật file swap bằng cách chmod

chown root:root /swapfile 
chmod 0600 /swapfile

4. Cấu hình Swappiness

Swappiness là mức độ ưu tiên sử dụng swap, khi lượng RAM còn lại bằng giá trị của swappiness (tính theo tỷ lệ phần trăm) thì swap sẽ được sử dụng. Swappiness có giá trị trong khoảng 0 – 100.

  • swappiness = 0: swap chỉ được dùng khi RAM được sử dụng hết.
  • swappiness = 10: swap được sử dụng khi RAM còn 10%.
  • swappiness = 60: swap được sử dụng khi RAM còn 60%.
  • swappiness = 100: swap được ưu tiên như là RAM.

Do tốc độ xử lý dữ liệu trên RAM cao hơn nhiều so với Swap, do đó bạn nên đặt giá trị này về gần với 0 để tận dụng tối đa sức mạnh hệ thống. Tốt nhất nên chỉnh về 10.

– Kiểm tra mức độ sử dụng file swap của hệ thống bằng cách chạy dòng lệnh sau

cat /proc/sys/vm/swappiness

– Chỉnh thông số swappiness bằng cách dùng lệnh sysctl

sysctl vm.swappiness=10

– Kiểm tra lại bạn sẽ thấy kết quả trả về 10

cat /proc/sys/vm/swappiness

Để đảm bảo giữ nguyên thông số này mỗi khi khởi động lại VPS bạn cần điều chỉnh tham số vm.swappiness ở cuối file /etc/sysctl.conf (nếu không có bạn hãy add thủ công vào)

nano /etc/sysctl.conf

Thêm dòng sau vào cuối nếu chưa có, nếu có rồi thì update lại giá trị:

vm.swappiness = 10

Dieu chinh swappiness

Nhấn Ctrl + O để lưu, Enter và Ctrl + X để thoát.

– Khởi động lại VPS và kiểm tra lại kết quả:

swapon -s
cat /proc/sys/vm/swappiness

Kiem tra ket qua

Lưu ý

– Với CentOS 7.2 có thể tune profile sẽ overwrite vm.swappiness mỗi lần reboot, bạn cần kiểm tra profile nào đang overwrite để cấu hình lại thủ công.

grep vm.swappiness /usr/lib/tuned/*/tuned.conf

Output có thể như sau:

[root@hocvps ~]# grep vm.swappiness /usr/lib/tuned/*/tuned.conf
/usr/lib/tuned/latency-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/throughput-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/virtual-guest/tuned.conf:vm.swappiness = 30

Lúc này, bạn hãy mở file /usr/lib/tuned/virtual-guest/tuned.conf, tìm vm.swappiness và thay đổi vm.swappiness = 30 thành vm.swappiness = 10.

nano /usr/lib/tuned/virtual-guest/tuned.conf

Nhấn Ctrl + O để lưu, Enter và Ctrl + X để thoát.

Khởi động lại VPS và kiểm tra lại kết quả.

Thay đổi dung lượng swap

Nếu bạn đã theo các hướng dẫn trên để tạo swap file và muốn thay đổi dung lượng swap, hãy thực hiện ngược lại quá trình.

– Tắt swap

swapoff /swapfile

– Xóa file swap

rm -f /swapfile

– Tạo mới file swap với dung lượng mong muốn. Ví dụ mình tạo 2GB (2048k)

sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048k

– Tạo phân vùng swap

mkswap /swapfile

– Kích hoạt swap

swapon /swapfile

– Bảo mật file swap bằng cách chmod

chown root:root /swapfile 
chmod 0600 /swapfile

– Kiểm tra lại tình trạng swap

swapon -s

Khi thay đổi dung lượng swap, các cài đặt từ trước như tự động kích hoạt khi server reboot, thông số Swappiness được giữ nguyên nên bạn không cần phải thao tác gì thêm.

Giờ khởi động lại server rồi kiểm tra lại kết quả thôi.

Tagged:

190 Comments

  1. Huu Duc 8 comment

    Chào Luân,

    VPS bên Vultr mình thuê:
    CPU: 2 vCore
    RAM: 2048 MB
    Storage: 45 GB SSD

    Chạy có 1 website, ngày khoảng 300-400 view là cao. Còn nhiều web khác chỉ dựng lên để đó k có traffic, mà Ram free lúc nào cũng thiếu. Làm việc trong admin cứ bị báo lỗi Erro database …

    Vậy là tại sao vậy Luân ? Có cách nào khắc phục không ?

    1. Việt Phương Moderator

      free -m của bạn ra kết quả gì. Và phần Real-time Data Server trong domain:port/serverinfo/ của bạn ntn

      1. Huu Duc 8 comment

        Free -m:
        total used free shared buff/cache available
        Mem: 1839 1097 296 92 445 475
        Swap: 0 0 0

        domain:port/serverinfo/
        [root@ns1 ~]# domain:port/serverinfo/
        -bash: domain:port/serverinfo/: No such file or directory
        Gõ 2 lệnh trên thì nó ra như vậy đó Phương.

        1. Việt Phương Moderator

          à domain:port/serverinfo/ là nếu bạn sử dụng HocVPS thì có công cụ nền web là ServerInfo để kiểm tra
          Còn theo mình thấy, bạn không cài swap.
          Ram thì hiện dùng 60%. Free = Total – (Used + Buff/Cache).Free thực sự của bạn là 296+445
          Mình nghĩ sv bình thường. Lỗi “Error Establishing a Database Connection” thì bạn kiểm tra thêm trong MySQL log xem.

  2. Huu Duc 8 comment

    Trong directAdmin mình nhận được rất nhiều mess như sau:

    Brute-Force Attack detected in service log from IP(s) 58.218.199.105 02/14/2017
    000000339 Brute-Force Attack detected in service log on User(s) root 02/14/2017
    000000338 Brute-Force Attack detected in service log from IP(s) 113.195.145.79, 122.194.229.11 02/14/2017
    000000337 Brute-Force Attack detected in service log from IP(s) 116.31.116.18 02/14/2017
    000000336 Brute-Force Attack detected in service log from IP(s) 116.31.116.11 02/14/2017
    000000335 Brute-Force Attack detected in service log from IP(s) 182.100.67.4 02/14/2017
    000000334 Brute-Force Attack detected in service log from IP(s) 58.218.199.105 02/14/2017
    000000333 Brute-Force Attack detected in service log on User(s) root 02/14/2017
    000000332 Brute-Force Attack detected in service log from IP(s) 122.194.229.11

    Như vậy là server mình đang bị tấn công hả Phương?

    1. Việt Phương Moderator

      Bạn đang bị tấn công rồi. Brute Force là kỹ thuật đoán thử đúng sai liên tục vào phần đăng nhập nào đó, nhằm dò pass. Ví dụ của VPS user root hoặc phần quản trị website.

      1. Huu Duc 8 comment

        Nếu mình muốn chặn hết IP từ China thì làm sao giờ Phương?

        Chặn trong directAdmin hay trên vps ?

        Nó cứ Brute Force hoài cũng làm chậm VPS của mình đúng k ?

    1. richard 2 comment

      Nhân tiện cho mình hỏi lúc ở bước :
      sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k

      Mình tạo nhầm là bs2048 count=2048k
      Rồi cho ra 4GB Ram, server vẫn chạy bình thường vậy admin?

      1. Việt Phương Moderator

        Bạn đã tạo 2GB swap. Tất nhiên sv vẫn chạy bình thg. Mình chưa hiểu ý câu hỏi bạn lắm

  3. Huấn Phạm 3 comment

    cho mình hỏi một chút, mình sử dụng vps của linode lúc build thì mình đã tạo swap theo cấu hình trong linode rồi. Sau đó mình tiếp tục tạo swap theo hướng dẫn của bài viết này và nhận được thông số cấu hình như sau:
    Filename Type Size Used Priority
    /dev/sdb partition 524284 0 -1
    /swapfile file 2097148 0 -2

    Câu hỏi của mình là: Nếu tạo 2 vùng swap thế này thì có vấn đề gì không? VPS có chạy bình thường không hay chỉ nên để 1 vùng swap thôi. Nếu để 1 vùng, thì làm thế nào để xóa phân vùng mà mình đã tạo trước đó ở /dev/sdb? Cảm ơn nhiều.

    1. Việt Phương Moderator

      Bạn để 1 vùng thôi. Bạn có thể xóa phân vùng swap đã tạo như bài hướng dẫn: Tắt swap > Xóa file swap

  4. Huu Nhat 2 comment

    Anh cho e hỏi e tạo VPS cấu hình ram 4GB, giờ muốn tạo swap thì tạo khoảng bao nhiu GB hả a. Với sao e vào xem thông tin ở sever info thì thấy phần Total Memory toàn Full thế a. E tạo vps mới nó cũng full vậy, toàn 90% trở lên. Không biết có lỗi gì không

    1. Việt Phương Moderator

      4GB thì bạn tạo 2GB Swap thôi nhé. Bạn đọc dòng real use ý, vì VPS sẽ dùng 1 phần RAM là cached, lúc nào cần dùng thì lôi ra.
      Tổng RAM = (thực use + buff/cached) + free

  5. khanhtran 10 comment

    Bạn phương ơi, mình làm theo tấc cả các bước rồi . đến phần kích hoạt swap theo code này swapon /swapfile thì bị lỗi này “swapon failed: Operation not permitted” nó bị vậy là sao ạ

    1. Việt Phương Moderator

      1. Bạn chạy bằng user quyền root chứ? VPS bạn không phải là OpenVZ chứ?
      Bạn cho mình kết quả của hostnamectl status
      2. Trước đó bạn tạo swapfile chưa? sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024kmkswap /swapfile

  6. khanhtran 10 comment

    Bạn phương cho mình hỏi, khi chạy setup vps bằng hocvps tự động rồi thì giờ mình muốn conect vps qua giao thức ssh bằng phần mềm ZOC thì sử dụng thông tin đăng nhập mới hoàn toàn ạ, hay chỉ thay port 22 thành port 2222 thôi ạ

      1. khanhtran 10 comment

        mình dùng zoc login vào bằng thông tin củ + đỗi port 22 thành 2222 mah login mãi ko được bạn ơi

      2. khanhtran 10 comment

        Nó báo thế này nè bạn.
        Connecting to sever1.viralphy.com:2222 (press Esc to cancel)…

        [SSH] FAIL: sever1.viralphy.com:2222 – A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

        Vps mình vẫn đang hoạt động bt, pass vẫn như củ

        1. Việt Phương Moderator

          Bạn connect trên web terminal(chỗ quản lý VPS của nhà cung cấp) được không? Do VPS vừa cài xong reboot thì không đăng nhập ngay được, chờ tầm 30s-1 phut là ok

    1. khanhtran 10 comment

      Bạn ơi, do web của mình có vấn đề nên mình giờ muốn xây dựng lại vps. giờ mình cần xóa hết dữ liệu đi để chạy lại cái hocvps khác, mình bấm rebuild rồi thì thông tin đăng nhập + port về lại như củ bạn nhỉ

      1. Việt Phương Moderator

        Bạn rebuild VPS thì về VPS mới. Mật khẩu sẽ được reset (Vultr thì xem tại trang quản lý, DO thì gửi về mail). Port SSH sẽ là 22

    1. Việt Phương Moderator

      Việc tạo được swap không liên quan đến hệ quản lý đâu bạn mà nằm ở bản chất của VPS. Bạn không tạo được có thể do không có quyền root hoặc VPS sử dụng công nghệ ảo hóa OpenVz…

  7. Duy 1 comment

    Cảm ơn bạn, đúng thứ mình đang cần, mình đã thực hiện đúng các bước.
    Tuy nhiên,khi kiểm tra lại với
    free -m
    thì thấy kết quả:

    total used free shared buff/cache available
    Mem: 990 427 57 142 505 381
    Swap: 2047 0 2047

    Free = 5% nhưng sao không thấy Swap được dùng vậy, mình làm sao gì chăng?

    1. Việt Phương Moderator

      Free là chỉ số cứng thôi. VPS sẽ lấy trước 1 phần RAM làm buff/cache, sẽ sử dụng khi cần nên free thực tế không phải chỉ là 57 bạn à

  8. Hoang 5 comment

    mình sài VPS trên Linode chọn gói 5$ 1GB được tối đa swap là 512MB thôi. mình có cập nhật lại là 2048MB như bạn nhưng khi reboot nó lại về 512MB.

    1. Luân Trần Admin

      Linode thì khi tạo disk, bạn bớt lại dung lượng để add thêm cho swap. Sau đó bạn resize lại kích thước swap là được. Mọi thao tác làm trên trang manager nhé.

  9. Ngoc Tu 1 comment

    Cảm ơn bạn, bài viết hữu ích và mình đã cài thành công.
    Cho mình hỏi thêm là sao của mình như thế này:
    http://prntscr.com/fgddc5
    Thì Ram Free thực tế còn nhiều mà sao đã dùng đến Swap rồi. Mình kiểm tra vài lần nhưng chỗ free hơn 100 thì vẫn dùng một ít Swap kiểu thế này.

    1. Việt Phương Moderator

      Có thời điểm nhu cầu tăng lên sẽ sử dụng đến SWAP nên kể cả khi RAM free lại thì thông số vẫn hiện đã dùng swap bạn à

  10. Thiện 2 comment

    sau khi cài đến đây hệ thống báo không tìm thấy trên centos 7.3
    “nano /usr/lib/tuned/virtual-guest/tuned.conf ”
    “nano /etc/sysctl.conf”

    1. Việt Phương Moderator

      2 bước khác nhau mà bạn. Bạn không thấy /etc/sysctl.conf hay /usr/lib/tuned/virtual-guest/tuned.conf

Comment của bạn

Your email address will not be published. Required fields are marked *