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:

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

303 Comments

  1. Hoa 3 comment

    “Để đả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)”
    Thêm file thủ công làm sao vậy a? E ko bít về lunix nên không biết cách làm 😀

    1. Luân Trần Admin

      File đó có sẵn rồi, bạn ko phải thêm. Lệnh edit em nó là nano /etc/sysctl.conf đó bạn

  2. Nguyen 1 comment

    Bạn ơi cho mình hỏi chút mình đang sử dụng vps wordpress của vultr. Mình đang chạy site trên đó rồi, nhưng nó chỉ chạy đc 1 site mà thôi. Mình muốn cài luôn cái script này vào thì có được ko hay phải xóa hết đi cài lại. Với lại cái wordpress vps này mình k biết truy cập FPT và phpmyadmin cho site như nào. Truy cập bằng IP, Root, Pass và họ cung cấp cho mình mình k chạy đc URL dụng domain.com/wp-content/plugin/….file.php

    1. Luân Trần Admin

      Nếu muốn cài HocVPS Script thì bạn phải xóa hết đi cài lại VPS từ đầu mới được nhé. Bạn có thể backup toàn bộ site dùng plugin (vd Duplicator), cài xong VPS up website lên lại.
      Hướng dẫn sử dụng WordPress trên Vultr bạn xem ở đây: https://www.vultr.com/docs/one-click-wordpress

  3. Trung 19 comment

    Khi hết ram thì dùng đến swap, vậy có phải restart lại vps để server quay trở lại dùng ram k?

    1. Luân Trần Admin

      Không cần đâu bạn, hệ thống tự động thực hiện các việc đó rồi.

  4. Nguyễn Hồng Kỳ 27 comment

    Mình có chỉnh thông số swappiness và đến bước chỉnh vm.swappiness ở cuối file /etc/sysctl.conf thì nó không hiện thông số vm.swappiness như của bạn để chỉnh được. Nó trống trơn như trong ảnh nè. Và mỗi khi reboot VPS thì nó lại trở về 30 trong khi mình muốn chỉnh cho nó về 10.

    http://imgur.com/6Uart2v

      1. Nguyễn Hồng Kỳ 27 comment

        Mình có thêm dòng đó nhưng vẫn không được, khi reboot VPS lại trở về như cũ.

        1. Luân Trần Admin

          Bạn cho mình hỏi bạn thực hiện trên VPS có OS gì, của nhà cung cấp nào để mình test lại?

          1. Luân Trần Admin

            Mình mới kiểm tra lại kĩ hơn, đây là một bug của CentOS 7.2 (CentOS 7.0 vẫn hoạt động bình thường), do tune profile. Mình đã update lại bài viết bổ sung đoạn cuối rồi, bạn tham khảo nhé.

  5. Mr Green 5 comment

    Cho mình hỏi thông số swappiness này là như thế nào? Nếu để là 10 thì mặc định nó chỉ sử dụng 10% dung lượng swap ah. Nếu mình không sửa để mặc định thì có đc không, Còn nếu sửa VPS của mình 1GB ram ở Vurl thì nên để thông số bao nhiêu là hợp lý

  6. Phúc Việt 3 comment

    @Luân Trần,
    Cho mình hỏi nếu VPS của mình đang chạy Vesta Cp và website đã chạy rồi. Bây giờ thực hiện tạo Swap nó có ảnh hưởng gì tới hệ thống trên không?
    Cảm ơn Luân Trần!

  7. NguyenHao 6 comment

    Mình setup theo thông số bạn hướng dẫn , do ram mình 2GB nên mình set up Swap thành 4GB , nhưng ko hiểu sao nó set thành 16gb làm giờ nó báo ổ cứng mình đã xài hết 16gb @@ . Hơn nữa mình dùng lệnh -free trong ssh để check thì thấy nó Swap báo Used = 0 , hình như nó ko hoạt động thì phải . Mình có kèm hình , bạn phân tích và chỉ bik mình là do tại sao ko
    https://3.bp.blogspot.com/-DtPKNBlo0Z8/VxhDyoW61PI/AAAAAAAAMcU/oZgKDC9GDaIndkpebL9aFRESYI-oasTagCK4B/s1600/Untitled.png

    1. NguyenHao 6 comment

      Có cách nào để mình giảm dung lượng swap trở lại ko, chứ để vậy tốn SSD quá .

  8. Phong 7 comment

    VPS của wable có hỗ trợ swap ko b?

    tớ dùng CentOS 7, làm mấy bước đều hiện kết quả giống hình của bạn

    nhưng tới swapon /swapfile thì nó báo:
    swapon: /swapfile: insecure permissions 0644, 0600 suggested.
    swapon: /swapfile: read swap header failed: Invalid argument

  9. Thanh Trần 1 comment

    Cho mình hỏi phát swap file đang có sẵn h mình mún thêm dung lượng cho nó thì làm sao?

    1. Luân Trần Admin

      Đúng rồi, cái đó do nhà cung cấp qui định, mình ko can thiệp được.

      1. Luân Trần Admin

        Version mà lại hỏi bên bài SWAP à bạn 😀
        Hiện bạn dùng version bao nhiêu, muốn nâng lên bao nhiêu? Server đang cài theo hướng dẫn nào rồi?

  10. LeHoan 2 comment

    Có lé đồng chí cần tìm hiểu thêm về vấn đề này đi. Nó cực kỳ đơn giản

    Chạy lệnh sau để off phân vùng/file swap vừa tạo ( sai hoặc muốn thay đổi)
    swapoff /swapfile

    Chạy lại từ bước đầu tiên như bài hướng dẫn này, chú ý thay đổi tên file swapfile thành swapfile1 hay xx tùy các bạn

    ./hết

  11. Hoàng 3 comment

    Cho mình hỏi mình đang chạy VPS 2gb nhưng do ko để ý nên làm theo bài thành ra swap chỉ có 1gb, giờ mình muốn sửa lại thành x2 ram (4096) thì làm như thế nào ạ ?

    1. Luân Trần Admin

      Bạn nên sao lưu dữ liệu và tạo lại VPS thôi, thao tác chỉnh sửa SWAP rất phức tạp. Dù sao thì chạy 1GB Swap cũng ok hết.

  12. AnhSau 2 comment

    Em chạy lệch swapon -s thì nó hiển thị là
    —–
    Filename Type Size Used Priority
    /dev/xvda2 partition 524284 0 -1
    —–
    vậy là vps e có sẫn file swap rồi phải k anh ?
    Và em tiếp tục cài hocvps script bình thường phải k anh ? file swap liệu có chạy được không ?
    Vì em thấy bài của anh file swap ở /swapfile
    Còn của em ở /dev/xvda2
    Như thế có làm sao k ?
    (lần đầu e xài vps ^^ )

    1. Luân Trần Admin

      VPS của bạn có sẵn rồi. Cài HocVPS Script bình thường thôi. Swap này chắc do nhà cung cấp tự cài trước, dùng bình thường thôi ko có vấn đề gì phải lo cả nhé.

  13. Hùng Thế 5 comment

    A cho e hỏi là lúc đầu OS của em là Cent OS 6, e cài theo hướng dẫn thì ok. Sau e chuyển qua Cent OS 7 (để dùng MariaDB), nhưng giờ e kiểm tra thì nó không hiện ra gì cả? Vậy có cần phải cài lại từ đầu không a?

      1. Hùng Thế 5 comment

        Dạ em dùng Script của anh xong giờ ổn rồi ạ. Mà a cho e hỏi là làm sao để trỏ domain của em về VPS được hả a?

          1. Hùng Thế 5 comment

            Ok a. E làm được rồi, đang đợi nó update rồi test :D.

  14. Nguyen Tung 43 comment

    Bác có thể hướng dẫn bằng tiếng việt cách xoá swap đi và setup lại được không ạ

  15. Nguyen Tung 43 comment

    Em thấy cả 2 bài đều phức tạp
    Bác có thể chỉ rõ bằng tiếng việt cách nào đơn giản không ạ

    Cảm ơn bác nhiều lắm

    1. Luân Trần Admin

      Mình chưa bao giờ resize nên không giúp được bạn vụ này. Bạn có thể backup rồi Deploy lại VPS ko?

  16. Le Kien 8 comment

    Sau khi chỉnh sửa file thì ấn phìm tắt nào để về con trỏ gõ lệnh vậy các bác?
    E chỉnh file xong ấn Ctrl + X sau đó ấn Y thì nó vẫn cứ ở file đó. E mới làm quen với ZOC Terminal ạ.

      1. Le Kien 8 comment

        E chưa cài nano nhưng thấy Zoc có sẵn phím tắt. sử dụng thì thấy ko được. e bắt đầu thấy loạn hết lên rồi.

        1. Luân Trần Admin

          ZOC là chương trình kết nối SSH thôi, chứ ko sửa được file gì cả.

    1. Web Thần Tốc 17 comment

      và cũng trong ảnh đó VPS mình vừa tạo luôn, chưa có post bài gì cả, chỉ mới update wordpress len bản mới nhất, nó báo RAM xài 231.59 MiB, có ổn ko vậy, bác phía trên kia nói online 100 người mà RAM co 70mb

      1. Loi 21 comment

        Site của mình giờ giảm xuống còn hơn 3k traffic/ngày, tầm giờ chỉ có tầm 20 người onsite mà còn thừa có 7MB ram thôi này :3

      2. Luân Trần Admin

        Chỉ khi nào server hết sạch RAM nó mới dùng đến swap nhé bạn. RAM xài như thế là bình thường, bạn cứ sử dụng thôi.

  17. Loi 21 comment

    Mình thử tạo swap trên vps của DO
    VPS của mình có 512 ram nhưng mà lượng người onsite đến tầm ~100 người thì ram còn có 70mb mà mình thấy swap vẫn không sử dụng.
    Vậy là swap của mình đã hoạt động hay chưa?

    1. Luân Trần Admin

      Phải khi nào hết sạch RAM thì mới dùng đến swap nhé bạn. Swap chưa sử dụng chứng tỏ server của bạn vẫn đủ RAM xài

  18. Dương Thể 16 comment

    Mình dùng câu lệnh:
    sudo dd if=/dev/zero of=/swapfile bs=4096 count=4096k
    Sau khi tạo swap xong, kiểm tra lại thì thấy:

    Filename Type Size Used Priority
    /swapfile file 16777212 0 -1

    Mình thấy hơi bất ngờ. Vì Size = 16777212 thì lên tới tận 16GB.
    Vậy có phải có sai sót gì không.
    Và mình muốn xóa hoặc giảm size phân vùng Swap xuống phải làm sao ?
    Mong nhận được sự giúp đỡ của bạn
    🙂

    1. Luân Trần Admin

      Bạn dùng lại lệnh này đi: sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k

      Khi đã tạo swap rồi thì rất khó để đổi size, tốt nhất bạn nên cài lại từ đầu.

    2. zhiqiang 1 comment

      Type the following command to create 4096K swap file (1024 * 4096k = 4194304 block size):

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

      if=/dev/zero : Read from /dev/zero file. /dev/zero is a special file in that provides as many null characters to build storage file called /swapfile1.

      of=/swapfile : Read from /dev/zero write storage file to /swapfile.

      bs=1024 : Read and write 1024 BYTES bytes at a time.

      count=4096k : Copy only 4096k BLOCKS input blocks.

    1. Luân Trần Admin

      Bạn có thể setup 2GB hoặc 4GB cũng được. Mình thì thường chỉ setup = RAM thôi vì muốn sử dụng bộ nhớ chính là ở RAM, hiệu suất hoạt động cao hơn.

  19. quangnhut123 1 comment

    Anh luân sao của em vầy nè
    free -m
    total used free shared buff/cache available
    Mem: 992 646 104 12 241 186
    Swap: 1023 0 1023

    Nó không chịu xài trong khi ram hệ thống gần hết em chỉnh cái vm.swapiness là 50 lận cũng ko xài swap !

    1. Luân Trần Admin

      Khi nào hết sạch RAM nó mới dùng đến swap, mà tốt nhất không nên điều chỉnh thông số vm.swapiness. Phương án cuối cùng hãy dùng swap.

  20. Nguyễn Duy 10 comment

    Của mình đang chạy Minecraft Server, tạo fileswap xong đánh lệnh swapon -s nó hiện Used = -1. Chắc là ko dùng, làm sao chuyển nó về 0 vậy bạn

        1. Luân Trần Admin

          Quá trình tạo swap của bạn ok chứ? Chạy mấy lệnh free -m và swapon -s gửi mình xem kết quả thế nào?

          1. Nguyễn Duy 10 comment

            free -m:
            total used free shared buff/cache available
            Mem: 993 880 71 0 41 31
            Swap: 2047 540 1507

            swapon -s:
            Filename Type Size Used Priority
            /swapfile file 2097148 512320 -1

            Cảm ơn bạn

          2. Luân Trần Admin

            Mình thấy mọi thứ đang hoạt động bình thường rồi đấy chứ, swap đang dùng 540MB

          3. Nguyễn Duy 10 comment

            Cảm ơn bạn, tại mình thấy nó hiển thị là -1 ở Used nên hơi lo.
            Vây tốt rồi

  21. Tuấn Lê 5 comment

    Bạn ơi, nó báo như thế này là VPS mình ko có hỗ trợ à( có phải VPS rơi vào hàng openVZ à), khi mua ko để ý lắm bạn à?
    swapon: /swapfile: swapon failed: Operation not permitted

    1. Luân Trần Admin

      OpenVZ vẫn có thể có swap nhưng do nhà cung cấp qui định, bạn ko tự tạo swap được.

    1. Luân Trần Admin

      Ừ để tầm khoảng đó. Lưu ý ổ cứng phải là SSD thì mới nên tạo swap nhé.

  22. Jason Neygun 13 comment

    Mình muốn thay đổi dung lượng swap, mà mình thấy có 1 partition dành cho Swap nó cứ 2GB, trong khi file Swap mình đã đổi dung lượng lớn hơn, Luân có thể giải thích giúp mình chổ này với. Làm thế nào để tăng dung lượng Swap Partition?

  23. Hung 5 comment

    Cho mình hỏi 1 vps có thể tạo mấy file swap nhỉ?

    vps của mình là 1gb, mình có thể tạo 2 file swap ko, mình dùng digitalocean ssd

      1. Hung 5 comment

        vậy mình đã tạo 1 file swap rồi, mình có thể chỉnh sửa dung lượng của file swap đó ko vậy? và chỉnh ntn nếu được

  24. Thu thuat hay 2 comment

    Mình tạo cái swap nó báo
    [root@vps ~]# sudo mkswap /swapfile
    mkswap: /swapfile: warning: don’t erase bootbits sectors
    on whole disk. Use -f to force.
    Setting up swapspace version 1, size = 1048572 KiB
    no label, UUID=10b3e195-3112-4556-b296-679dc0ff246c

    Lỗi này là gì vậy Luân?

    1. Luân Trần Admin

      VPS của bạn thiếu RAM rồi, tuyệt đối ko nên để swap phải chạy > 70%, hãy nâng RAM nên nhé.

  25. Tung Anh Seo 4 comment

    Thông số VPS:
    250GB SSD Cached RAID-10 Disk Space
    4GB Dedicated RAM
    5TB Monthly Bandwidth
    4 Cores @ 3.5GHz

    Bạn hướng dẫn mình tạo file swap trên CentOS 6 64bit để cài Zpanel 10.1.1 nhé
    Cảm ơn

    1. Luân Trần Admin

      SSD-Cached mình không chắc có nên tạo swap hay không nữa, có thể làm giảm performance hệ thống. Bạn hãy thử liên hệ support hỏi về swap xem ntn?

  26. tunganh 2 comment

    Cấu hình VPS của mình như sau, mình cấu hình như thế nào cho phù hợp.
    Thanks
    [code]
    250GB SSD Cached RAID-10 Disk Space
    4GB Dedicated RAM (Burst or vSwap available)
    5TB Monthly Bandwidth
    4 Cores @ 3.5GHz[/code]