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

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

282 Comments

  1. Bui Thang 7 comment

    Luân cho mình hỏi, mình sử dụng ram 512 tạo swap chạy vẫn khá ổn, giờ mình nâng cấp lên 2GB ram có nên tạo swap ko?

  2. Tung 25 comment

    Cái phần Thay đổi dung lượng swap chắc bác Luân mới cập nhật sau này.
    Đợt trước mình có hỏi thấy Luân gửi hướng dãn cho mình cái link khá phức tạp.
    Vừa rồi cần thay đổi swap lại phải setup lại cả VPS, cay qúa cơ.

  3. Quan Nguyên Phát 40 comment

    Hiện tại mình nâng cấp ram gấp đôi lên ram cũ. Và mình muốn thay đổi dung lượng Swap thì làm sao? Mình thử chạy rm -f /swapfile để xóa swap nhưng thông báo rm: cannot remove ‘/swapfile’: Operation not permitted.
    Cảm ơn bạn.

  4. Le Long 8 comment

    Mình làm tới bước # nano /etc/sysctl.conf thì báo
    -bash: nano: command not found
    VPS này là cái mới mua bên OVH. Còn bên Vultr và Digital Ocean thì mình vẫn làm theo hướng dẫn này dễ dàng.
    Mình thử lệnh vim để edit file cũng không được. Không biết phải làm sao ?
    Bạn chỉ giúp mình với.
    Thanks

    1. Le Long 8 comment

      À, có phải do VPS không phải SSD nên không thể tạo swap được phải không bạn ? 😀

      1. Việt Phương Moderator

        Không phải. Thông báo kia chỉ là bạn chưa cài nano. Nếu là CentOS thì bạn chạy yum install nano để cài nano rồi dùng nano để edit

  5. Trung 1 comment

    Mình cài swap bị lỗ này. nhờ xem giúp mình với

    [root@vps192170 ~]# mkswap /swapfile
    mkswap: /swapfile: warning: don’t erase bootbits sectors
    on whole disk. Use -f to force.
    Setting up swapspace version 1, size = 2097148 KiB
    no label, UUID=b89ff6fb-3e79-4bfe-a3cc-63d1c73ec3a8

    1. Việt Phương Moderator

      Bạn vẫn chạy được bình thường, chỉ là thông báo lưu ý. Hình như hệ điều hành của bạn là bản cũ?

        1. Việt Phương Moderator

          Cho mình dòng lệnh tạo swap và kết quả của bạn
          Cùng kết quả của df -ah

          1. Vikwi 11 comment

            VPS có ram 1GB
            sudo dd if=/dev/zero of=/swapfile bs=2048 count=2048k
            swapon -s:
            Filename Type Size Used Priority
            /swapfile file 4194300 272 -1
            df -ah:
            Filesystem Size Used Avail Use% Mounted on
            /dev/vda1 25G 6.4G 17G 28% /

            VPS ram 8GB
            sudo dd if=/dev/zero of=/swapfile bs=4096 count=4096k
            /swapfile file 16777212 0 -1
            /dev/vda1 99G 20G 75G 21% /

          2. Vikwi 11 comment

            Theo như bài viết thì swap có thể tạo với dung lượng gấp đôi RAM, nhưng em tạo vậy thì /dev/vda1 chiếm hết dung lượng. VPS của em có 8GB RAM, mà em chỉ dám tạo tạo 4GB swap thôi.

          3. Việt Phương Moderator

            Tầm 4GB RAM trở lên thì mức swap chỉ nên tạo là 1 nửa. Tùy hệ thống thôi bạn.

          4. Việt Phương Moderator

            Với mức RAM bé thôi. Mức lớn thì swap quá nhiều không cần thiết

          5. Vikwi 11 comment

            Tạo swap nhiều ngoài việc tốn dung lượng ổ cứng thì có ảnh hưởng gì khác tới hệ thống hay tốc độ web không anh?

  6. Mai Minh 1 comment

    VPS Azdigi chạy nó báo “swapon failed: Operation not permitted”. LÀm sao cài đây?

    1. Việt Phương Moderator

      VPs không cho kích hoạt swap.
      1. Bạn kiểm tra công nghệ ảo hóa của VPS
      yum install virt-what && virt-what
      2. Bạn dùng user có quyền root chứ

  7. Andy 32 comment

    Hello Admin!

    Minh sử dụng VPS OVH 2 core ram 2Gz.
    Mỗi khi tạo swap 2GZ và reboot lạ VPS là không thể kết nối SSH được nữa
    VPS hoàn toàn mới reinstall và chưa cài đặt gì ngoài swap. Đã thử Cenos 6, 7 đề bị

    Xin admin chỉ dùm! Cám ơn bạn.

    1. Việt Phương Moderator

      1. Bạn kết nối qua console thì service SSH ntn?
      2. Bạn ping IP VPS thì ntn
      3. Bạn login qua SSH thông báo gì

      1. Andy 32 comment

        Chao Phương

        Mình kêt nối SSH với Bitvise thì bao lỗi:
        The SSH2 session has terminated with error. Reason: FlowSocketReader: Error receiving bytes. Windows error 10060: 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.

        Con Ping trong cmd thi không kết nối được luôn
        Có thông báo với OVH thì họ bảo chuyển qua chế độ Resuse Mode thi ping bình thường. Họ báo đây là do minh phần mền cài lên VPS loi84 config.

        Làm rất nhiều lần mãi vẫn bị.

        Xin cám ơn

      2. Andy 32 comment

        Helo Phương

        Minh thấy thông báo lỗi từ OVH gửi về cho mình như thế náy:

        Our monitoring system has just detected a fault on your VPS
        The fault was noticed on 2018-02-17 12:14:00

        Your VPS may function correctly,
        though a few false positives may appear:
        – following a reboot of the VPS with a fsck which
        would be launched automatically, delaying the reboot
        – on setting up firewall rules that block the
        monitoring requests (139.99.104.72)

        Xin cám ơn!

        1. Việt Phương Moderator

          Nếu vậy tức bạn config xong VPS off luôn chứ chả phải là không kết nối qua SSH được. Bạn thử deploy VPS mới gửi qua support@hocvps.com mình xem cài swap cho

          1. Andy 32 comment

            Cám ơn Phương. Hiện nay nó vẫn đang chạy tốt. để theo dõi vài ngày xem sao. Nếu vẫn bị mình lại email bạn giúp minh nha!

            Xin cám ơn!

          2. Việt Phương Moderator

            Tưởng bạn bảo ping IP VPS không được thì sao chạy được?

  8. Duy 10 comment

    đến phần mkswap /swapfile mình bị báo lỗi /swapfile: Permission denied
    Khắc phục như thế nào vậy bạn

    thanks

    1. Việt Phương Moderator

      Bạn không có quyển chỉnh sửa đối với swapfile. Bạn dùng tài khoản root chứ?

  9. Hapida 8 comment

    Chào bạn!
    Mình cài swap xong, khởi động lại server thì site ko truy cập được nữa. Nhưng FPT và ZOC vẫn vào bình thường, PING ip vẫn tới. Không hiểu bị lỗi gì. Bạn đã gặp trường hợp này chưa?

    1. Việt Phương Moderator

      Site không truy cập được thì bạn kiểm tra Nginx và PHP-FPM kết quả ntn?

  10. Bui Thang 9 comment

    Cảm ơn admin rất nhiều. Bài viết rất chi tiết, mình tạo swap trên centos 6 rất ngon nhưng khi chuyển sang Centos 7 (mình sử dụng bản 7.4, ram 512MB của Digital Ocean) thì không thể tạo đưowjc nó báo lỗi: “swapon: /swapfile: swapon failed: Invalid argument”. Mọi người giúp mình với.

  11. TrungAZ 9 comment

    Cho mình hỏi sao mình làm hết các bước rồi mà khi bấm lệnh: swapon -s nó không hiện ra gì hết vậy ạ?

    Như vậy ko biết đã cài xong Swap chưa nữa 🙁

    1. TrungAZ 9 comment

      Cái trên mình ổn rồi, Swap mình khi mình Free m

      total used free shared buff/cache available
      Mem: 1016380 94116 798232 12984 124032 777904
      Swap: 4194300 0 4194300

      Ổn chưa ạ? Mình dùng Vultr 1G

  12. Thái Tài 1 comment

    Chào ad mình đang chạy Swap theo hướng dẫn của ad, nhưng chạy được 1 thời gian ổ cứng của mình bị full, mình kiểm tra lệnh : df -h thì thấy ở phần /dev/vdal đã sử dụng 100% mặc dù website mình không thêm gì cả. Lúc trước mình có tìm thấy bài hướng dẫn kiểm tra những file chiếm dung lượng lớn để xóa đi mà giờ tìm không ra nữa. Hy vọng Ad có thể hướng dẫn trong trường hợp này nên làm như thế nào ạ . Thanks

  13. quyenlinh 1 comment

    Bài viết rất hay và rất chi tiết. Làm đến đâu xem hình minh họa đến đó. Không như các bài viết ở site khác –> Làm theo hướng dẫn bài này không gặp bất kỳ sự trở ngại nào. Tôi rất cảm ơn tác giả đã soạn bài viết này.

  14. Joker 13 comment

    Em đang muốn xóa đi tạo lại file swap thì bị lỗi này
    swapoff failed: Cannot allocate memory
    Nhờ anh Việt Phương hướng dẫn giúp em với ạ

    1. Việt Phương Moderator

      Bạn post full cả lệnh lúc bạn thực hiện nhé, cho mình thêm kết quả của free -mdf -ah

      1. Joker 13 comment

        – 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

        Em làm theo trên mà anh Phương

      2. Joker 13 comment

        free -m
        total used free shared buff/cache available
        Mem: 992 773 73 73 145 25
        Swap: 1023 1017 6

        df -ah em còn 11GB trống

          1. Việt Phương Moderator

            Bạn xem có file swapfile ở ngoài cùng, ngang hàng với /root/ /etc không?
            ls -al /

          2. Việt Phương Moderator

            Lỗi hình như liên quan đến memory. Tuy vậy thấy free -m của bạn hoàn toàn bình thường
            Bạn tạo 1 cái swap khác (đặt tên khác swapfile1 chẳng hạn). Tạo xong thì off cái cũ đi xem được không

  15. 28 comment

    Chào các bạn.
    Mình mới mua VPS HostHatch, đã tạo sẵn 127MB swap. Mình muốn thay đổi dung lượng swap theo hướng dẫn, nhưng khi tắt swap với lệnh: swapoff /swapfile, thì mình nhận được thông báo:
    “swapoff failed: No such file or directory”

    1. Việt Phương Moderator

      File swap họ để ở đâu thì bạn vào tắt ở đó nhé. Bài viết hướng dẫn là swapfile ở ngay ngoài cùng, ngang với /root/ hay /etc/

      1. 28 comment

        Bạn hướng dẫn mình cách kiểm tra file swap ở đâu với nhé.
        Mình thử làm theo cách mà HostHatch hỗ trợ, thì dường như nó tạo 2 file swap rồi, ko biết có tốt ko:
        Mình kiểm tra = lệnh: swapon -s
        [root@vinael ~]# swapon -s
        Filename Type Size Used Priority
        /mnt/1GB.swap file 1048572 0 -2
        /dev/vda2 partition 131068 0 -1

          1. 28 comment

            Mặc định là 131068KB đó bạn, mình làm theo họ hướng dẫn lên tạo thêm 1 cái 1048572 nữa bạn.

          1. 28 comment

            Mình làm như bạn hướng dẫn, kiểm tra lại = test tốc độ thì swap =0, nhưng khi reboot lại thì swap vẫn còn như cũ

  16. V An. 8 comment

    Mình làm đến bước này nano /etc/sysctl.conf thì nó báo command not found. Mình dùng VPS Ram 1G của DO. Vẫn như thế nhưng khi làm ở Vultr gói 1G thì lại bình thường. Cả hai đều dùng CentOS. Có ai biết lỗi này là sao không ạ? Và làm thế nào để khắc phục?
    Cảm ơn.