Điểm:4

Tại sao máy chủ Ubuntu 20.04 với vm.swappiness = 0 vẫn hoán đổi nơi có nhiều bộ nhớ trống?

lá cờ cn

Lý lịch

Chúng tôi đang chạy một số máy chủ KVM trên Ubuntu 16.04 và đã bắt đầu thử nghiệm nâng cấp lên 20.04. Những gì chúng tôi nhận thấy là mặc dù chúng tôi chưa bao giờ thấy bất kỳ hoạt động sử dụng trao đổi nào trên máy chủ 16.04 của mình, nhưng sau một vài ngày, máy chủ 20.04 sẽ hiển thị mức sử dụng trao đổi vài trăm MB. Đó không phải là vấn đề lớn vì vmstat hiển thị rất ít hoạt động hoán đổi và biểu đồ munin xác nhận rằng hoạt động hoán đổi vào/ra là không đáng kể, nhưng chúng tôi vẫn muốn hiểu hành vi.

Cho đến bây giờ, chúng tôi đã sử dụng Nagios để theo dõi việc sử dụng trao đổi và cảnh báo nếu phát hiện thấy. Hệ thống đã được nâng cấp từ 16.04 đến 20.04 đang chạy năm máy ảo với tải nhẹ. Hệ thống máy chủ hiển thị mem đã sử dụng khoảng 29G trong tổng số khoảng 200GB bộ nhớ. Không có đỉnh hoặc bất cứ điều gì khiến việc sử dụng mem tăng cao như vậy. Việc sử dụng bộ nhớ của VM bị hạn chế và không có quá trình ngốn bộ nhớ nào khác chạy trên chính máy chủ KVM.

root@kvm-xx:~# miễn phí -m
              tổng số buff/bộ đệm được chia sẻ miễn phí đã sử dụng hiện có
Mem: 193336 29495 768 5 163072 162404
Hoán đổi: 6675 240 6435

Trên cùng, ví dụ về hoán đổi quy trình:

    PID VIRT RES SHR S %MEM COMMAND SWAP 
   6447 18,2g 15,8g 22908 S 8,4 qemu-system-x86 239352 
   6160 2661052 1,9g 21880 S 1,0 qemu-system-x86 90788 
   6315 2129436 644388 21856 S 0,3 qemu-system-x86 29724 
   6391 10,4g 7,9g 22832 S 4,2 qemu-system-x86 24028 
   6197 6505584 3,0g 23008 S 1,6 qemu-system-x86 10972 
   5686 9908 2944 2720 S 0,0 cron 60
   5805 24404 14440 4388 S 0,0 nút munin 4 

Đầu ra điển hình từ vmstat, không hiển thị thay đổi trong/ra trao đổi.

root@kvm-xx:~# vmstat 2 10
procs -----------bộ nhớ-------------trao đổi-- -----io---- -hệ thống-- ------cpu -----
 r b swpd free buff cache si so bi bo trong cs us sy id wa st
 0 0 407620 869916 214784 165081536 0 0 270 12 5 2 0 2 98 0 0
 2 0 407620 869900 214784 165081536 0 0 0 28 8533 24140 0 2 98 0 0
 1 0 407620 869836 214784 165081536 0 0 0 28 8642 24682 0 2 98 0 0

Hệ thống này đã chạy được một năm với 0 hoán đổi vào ngày 16.04 với cùng một máy ảo và tải.

Những gì đã được thử và kiểm tra

Sau khi nâng cấp, phát hiện ra rằng numad chưa được cài đặt và VM không được ghim vào vcpu trên cùng một CPU vật lý. Có nghĩa là sử dụng bộ nhớ trên các nút numa. Đã cài đặt numad và xác minh ghim. Tôi tin rằng mức sử dụng hoán đổi cao hơn trước thay đổi đó, nhưng không thể nói chắc chắn.

Dự kiến ​​hành vi này có liên quan đến hạt nhân, vì vậy đã nâng cấp từ hạt nhân 5.4 lên HWE 5.11. Hành vi tương tự trên cả 5.4 và 5.11.

Đã cố gắng vô hiệu hóa KSM (Hợp nhất cùng trang hạt nhân), vì chúng tôi không cần nó và loại bỏ nó như một nguồn sử dụng trao đổi có thể có.

Đã cố gắng vô hiệu hóa hoàn toàn trao đổi để xem liệu có tình trạng thiếu bộ nhớ thực sự mà kẻ giết người OOM sẽ đến bữa tiệc hay không. Điều này đã không xảy ra, vì vậy đối với tôi, có vẻ như việc hoán đổi không bắt buộc, nhưng vẫn được sử dụng vì một số lý do.

Ý tưởng và suy nghĩ

Tôi tin rằng vì một lý do nào đó, nhân quyết định hoán đổi các trang không hoạt động để hoán đổi, ngay cả với swappiness = 0. Đây có thể là một hành vi đã thay đổi với các nhân mới đi kèm với 20.04.

Lý tưởng nhất là chúng tôi muốn hạt nhân chỉ hoán đổi ở phương sách cuối cùng, như hành vi trước đó và sử dụng giám sát việc sử dụng hoán đổi để phát hiện việc sử dụng hoán đổi và đưa ra cảnh báo Nagios.

Tôi đã đọc một số chủ đề về các chủ đề tương tự, nhưng tìm thấy thông tin mâu thuẫn về những gì có thể là lời giải thích.

Điều tôi thực sự muốn tránh là tình huống chúng tôi nâng cấp một số máy chủ 16.04 được tải nặng hơn lên 20.04 và thấy vấn đề này leo thang thành một vấn đề thực sự trong quá trình sản xuất.

Tôi biết về hoán đổi/hoán đổi khi di chuyển bộ nhớ ra khỏi trao đổi theo cách thủ công, nhưng câu hỏi đặt ra là tại sao nó lại hoán đổi ngay từ đầu.

Nếu bất cứ ai có một số cái nhìn sâu sắc về điều này, sẽ được đánh giá rất cao.

Cảm ơn!

Raffa avatar
lá cờ jp
Điều này có trả lời câu hỏi của bạn không? [Làm cách nào để tự động di chuyển hoán đổi trở lại RAM?](https://askubuntu.com/questions/1347219/how-to-auto-move-swap-back-to-ram)
vanadium avatar
lá cờ cn
@Raffa đây không phải là câu hỏi ở đây, vì vậy chắc chắn không phải là câu hỏi trùng lặp. @Stian vui lòng xác minh `cat /proc/sys/vm/swappiness` báo cáo 0, bởi vì những gì bạn mô tả là rất bất ngờ trừ khi có một bộ nhớ tải nặng tại một số điểm kể từ lần khởi động lại cuối cùng.
Stian avatar
lá cờ cn
Vâng, swappiness thực sự là số không. Tôi cũng thấy điều này rất bất ngờ và chưa bao giờ thấy hành vi này trên Ubuntu 16.04 kernel 4.4. root@kvm-xx:~# mèo /proc/sys/vm/swappiness 0
Stian avatar
lá cờ cn
Tôi đã thêm đầu ra từ trên cùng, hiển thị quy trình nào đang sử dụng bộ nhớ trao đổi. Chủ yếu là qemu, nhưng một số quy trình ngẫu nhiên khác cũng xuất hiện. Trong trường hợp này, cron và munin-node.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.