CHIA SẺ:

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:

149 Comments

  1. Phuong Nguyen Chu Nam 11

    Hôm trước mình set swap 1024kb thành công
    Song hôm nay muốn nâng lên 2048kb nhưng khi
    thực hiện lệnh swapoff /swapfile
    thì nó báo lỗi
    swapoff: /swapfile: swapoff failed: Cannot allocate memory

      1. Hoàng Lâm 3

        Luân ơi cho mình hỏi, VPS của mình là 1G thì có nên swap lên 2G không hay chỉ cần swap 1G nữa thôi,
        Với lại mình sử dụng lệnh này : sysctl vm.swappiness=10
        thì nó báo lỗi này: error: permission denied on key ‘vm.swappiness’
        Thực hiện đến bước này thì bị thế, kiểm tra lại swap thì :cat /proc/sys/vm/swappiness
        60.
        thì khắc phục thế nào Luân?
        Cảm ơn nhiều

        1. Luân Trần Admin

          Lỗi chỉnh vm.swappiness kia mình cũng không rõ rồi. Mình thì thường chỉ dùng Swap 1GB thôi, không muốn phụ thuộc nhiều quá vào cái này. Khi thiếu RAM thì tăng thêm RAM.

  2. Nate 10

    Luân cho mình hỏi cài mình xài gói ram 4g 2cpu của linnode thì trong phần thiết lập mình chọn cenos 7 và phần swap nó có 3 lượt chọn 128 256 và 512 mình chọn cái 512 ổn ko luân hay phải thiết lập lại cao hơn hơi mù mấy khoản này 😀

    1. The Nguyen Hong 2

      Cơ chế chia đĩa của Linode hơi khác nhé, mặc định Max swap của nó là 512MB thôi, tuy nhiên bạn có thể chia ép swapfile theo hướng dẫn của Luân ở trên nó vẫn cộng dồn vào swap.
      Cách này có thể gây xung đột hệ thống, Linode không khuyến khích điều này.

      Bạn muốn chia trực tiếp trong trang quản trị của Linode thì có thể làm như sau:

      Ví dụ: Gói Linode của bạn là 4 GB Ram theo giá hiện tại thì sẽ có 48 GB SSD tương đương 49152 MB, và bạn muốn chia swap là 8 GB tương đương 8192 MB (gấp đôi dung lượng Ram vật lý).

      – Khi Building Disk Image để chạy Centos thì bạn nên trừ dung lượng của Swap bạn định tạo ra, nghĩa là 49152 – 8192 = 40960 MB (dung lượng thực tế để chạy Centos), phần dưới swap nó vẫn để max là 512 MB bạn cứ chọn nó và Building như thường sẽ Resize lại sau theo hướng dẫn bên dưới.

      – Sau khi Buiding Centos Disk Image xong (40960 MB) bạn sẽ còn dư lại 8192 MB dung lượng đã trừ ở trên, trong Dashboard chỗ Swap Disk Image bạn chọn Edit để Resize lại Swap, trong trang này bạn sẽ thấy dung lượng Swap Max cho phép là 8192 MB.

      – Nhớ khi Building thì trạng thái của Server là OFF làm xong tất cả thì Boot lại.

      – Chúc bạn thành công! 🙂

      – Hình minh họa:

      https://i.imgur.com/krTYJHZ.png
      https://i.imgur.com/Vym8vXV.png
      https://i.imgur.com/SplW7TL.png

  3. vé máy bay 8

    hix mình đang sài thì vào phpmyadmin nó báo như vầy, minh có cài clamv và quét, quét xong thì bị vậy
    #2002 – Connection refused — The server is not responding (or the local server’s socket is not correctly configured).

  4. Hoàng Văn Biên 1

    Chào bạn,
    Mình dùng VPS bên BKNS gói 2GB. Mình tạo /swapfile 4096M và cài đặt vm.swappiness=10 kiểm tra mọi thứ OK.
    Nhưng khi mình thử RAM chạy chỉ còn khoàng 160M mà SWAP used vẫn = 0 đến khi RAM quá tải MySql bị die mà SWAP used vẫn =0. Mình thử cho vm.swappiness=100 rồi kiểm tra nhưng SWAP used vẫn =0.

    Trường hợp này là sao hả bạn?
    Nhờ bạn hướng dẫn giúp cách giải quyết.

    Trân trọng cảm ơn!
    Biên Hoàng

    1. Luân Trần Admin

      Bạn check lại xem tình trạng sử dụng RAM thế nào với lệnh free -m?
      cat /proc/sys/vm/swappiness hiện tại trả về ra sao?

  5. Nhan Nguyen 6

    Mình làm đúng như cách của bạn, và hình như swap của mình đang không hoạt đông.
    http://i.imgur.com/w5W3Ek8.jpg
    Mình đã thử sysctl vm.swappiness=10 và hiện tại =30. kết là die. Bạn xem giúp mình với nhé.
    Cảm ơn admin

    1. Luân Trần Admin

      Bạn đang dùng VPS ở nhà cung cấp nào thế.
      Đã xảy ra trường hợp hết RAM chưa?

  6. Nhan Nguyen 6

    Mình xài ở digitalocean, hình mình gửi là ram đã hết sạch./ Không biết vấn đề ở đây?

  7. HQT86 2

    Mình dùng VPS Digital Ocean, Ram 2GB, thiêt lập Vm.happiness 60 mặc định, nhưng khi Ram vượt quá 60% nó vẫn ko kích hoạt swap là sao nhỉ? Cụ thể , check free -m, dùng đến 1,4GB ram rồi mà ko kích hoạt SWAP.

      1. Hqt86 2

        Trc mình cũng set 10 nhưng có lúc mysql stop vì ram hết mà nó cũng k kích hoạt swap là sao ban nhỉ?

        Check swapon vẫn bt.

  8. Vu Kim Son 8

    Cảm ơn bài viết của bạn. Mình đã tạo thành công Swap dựa trên hướng dẫn.

  9. Tuan Duong The 21

    sao mình dùng lệnh restart lại vps digioncean “sudo shutdown -r now” thì nó không vào được web và phpmyadmin nữa vậy This site can’t be reached refused to connect.

  10. Lữ Phú Hòa 17

    Xin báo admin là mình làm 1ngày 1đêm trên digitalocean tất cả các thể loại nhưng không thành công nhé,mới vô Vultr làm 1 phát là ngon lành luôn đó, chia sẽ để anh em rút kinh nghiệm đây

  11. Sanji 2

    Bạn ơi cho mình hỏi với, mình thuê vps ram 768MB bên vultr chưa cài swap. Mình cho chạy 2 trang wordpress nhưng khi vào trang admin viết bài linh tinh thì trang bị chết, cụ thể là pass của user mysql bị thay đổi hay sao ấy mình phải vào command line reset lại user pass mysql.
    Có khi nào là do “hết RAM hệ thống thường tự động stop service MySQL” như bạn nói ở trên ko vì hiện tại 2 web của mình ít người vào băng thông mỗi tháng cùng lắm 2G/1000G thôi. Mình cảm ơn

    1. Luân Trần Admin

      Khả năng do hết RAM nên chết MySQL rồi, bạn kiểm tra status MySQL mỗi khi sự cố xảy ra xem thế nào?

  12. Kim Dong 1

    Mình đã cài swap như hướng dẫn, đặt 20% nhưng khi ram chạy đến 92% mình thấy swap vẫn không chạy là sao vậy ban?

  13. Hoang Lâm 3

    ” 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. ”
    Luân cho hỏi câu này có phải không nên sử dụng swap trên server vật lý, Còn VPS thì sử dụng tốt đúng ko>

    1. Luân Trần Admin

      Server vật lý hay VPS cũng thế, bản chất Swap là dùng ổ cứng làm RAM tạm mà bạn.

  14. Lộc Đặng 10

    Hi Luân,
    Mình sử dụng VPS của Dedi, mặc định Dedi tạo SWAP trên SSD là 1GB, mình tạo SWAP như bài hướng dẫn này thì thấy “/swapfile” được xếp vào Priority = -2, còn “/dev/vdb” = -1.
    Mình muốn chuyển ưu tiên /swapfile được không?

  15. Chibi 1

    Bác cho hỏi là khi tạo vps ở Ramnode đã có sẵn swap file partition là 1Gb rồi thì có cách nào tăng lên được không ?
    M tạo thêm file swap khác vẫn được thì dùng 2 loại file này 1 lúc có ảnh hưởng gì không ?
    Bác có hướng dẫn cài centos 7 64 từ file iso ở ramnode không cho m xin link với .
    Thanks bác nhiều nhá !

    1. Việt Phương Moderator

      10% tức Ram còn 10% mới sử dụng swap. Bạn kiểm tra xem đã cài đặt để giữ nguyên thông số khi khởi động lại VPS chưa
      Và theo ảnh thì mới dùng 73.21% thôi

  16. Hoang 8

    [root@vps02 ~]# nano /usr/lib/tuned/virtual-guest/tuned.conf
    -bash: nano: command not found
    Anh Luân ơi, cho em hỏi, em làm đến đây rồi nhưng bị lỗi dòng này:
    -bash: nano: command not found
    thành ra vm.swappiness = 30 ko đổi dc =10 mỗi khi reboot lại
    em đang dùng vps digitalOcen…
    Anh cho em hỏi giờ em phải làm sao ạ?

    1. Việt Phương Moderator

      Có nghĩa là nano text editor chưa được cài trong hệ điều hành của bạn.
      Tuy vậy, nếu làm đến bước này thì bạn hẳn đã chỉnh vm.swappiness ở cuối file /etc/sysctl.conf bằng cách # nano /etc/sysctl.conf rồi chứ nhỉ?
      Để cài đặt nano
      Trong CentOS bạn gõ: # yum install nano
      Trong Ubuntu bạn gõ: # apt-get install nano
      http://hocvps.com/cach-su-dung-nano-editor/

  17. Long 1

    Chao anh
    em thuc hien cac lenh ok nhung den lenh kiem tra thi no thong bao nhu sau: swapon failed: Operation not permitted
    Xin hoi em can lam gi
    thanks

    1. Việt Phương Moderator

      Bạn dùng VPS bên nào? 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ọ sẽ hạn chế cho bjan việc add thêm Ram bằng swap, thay vào đó bạn cần upgrade plan cho phú hợp

Comment của bạn

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