Làm thế nào để tôi biết quá trình nào đang khiến kswapd được sử dụng?


23

Tôi thấy kswapd sử dụng CPU 100% ... làm thế nào tôi có thể biết kswapd thay mặt cho quá trình nào đang được sử dụng nhiều như vậy?


1
Ừm. kswapd là quá trình. Nó chạy thay mặt cho kernel.
mailq


2
@mailq ... có, nhưng nó không trao đổi bộ nhớ của người dùng? và nếu vậy, làm thế nào để tôi biết bộ nhớ mà nó đang hoán đổi tại thời điểm đó?
Deshawn

Câu trả lời:


18

kswapd đang quản lý không gian hoán đổi để đáp ứng nhu cầu bộ nhớ lớn hơn khả năng vật lý cho tất cả các quy trình.

Đó là quá trình bất khả tri, nó chỉ quan tâm đến những trang nào được truy cập và khi nào (nó phức tạp hơn điều này tất nhiên nhưng để giữ cho mọi thứ đơn giản, chúng tôi cũng có thể xem nó theo cách này).

Vì vậy, câu hỏi thực sự là "quá trình nào có gánh nặng lớn nhất đối với bộ nhớ đang khiến kswapd cần phải trang mọi lúc".

Điều đó được trả lời dễ dàng nhất bằng cách sử dụng 'top' và chuyển sang chế độ sắp xếp sử dụng bộ nhớ.


Cảm ơn!. Doe skswapd chỉ CHỈ khi các trang thực tế chạm vượt quá vật lý hoặc nó khởi động mặc dù một quá trình đã phân bổ bộ nhớ hoặc ánh xạ vùng SHM nhưng không sử dụng nó? Đó là, chỉ khi sự cố xảy ra hay nó mới giữ sổ sách và trao đổi mọi thứ trong và ngoài mặc dù có sẵn bộ nhớ vật lý nhưng chỉ vì một số quy trình đã không hoạt động, v.v.?
Deshawn

Theo tôi hiểu, kswapd trong các trường hợp thông thường sẽ xóa bất kỳ trang nào khỏi bộ nhớ chính không cần ở đó, bởi vì bất kỳ trang nào được giải phóng là một trang có thể được sử dụng để lưu vào bộ đệm hoặc các quá trình khác. Tức là, tốt hơn là có một trang cũ chưa sử dụng đã có trên đĩa thay vì phải chịu chi phí chậm chạp trong việc di chuyển nó để đáp ứng yêu cầu bộ nhớ từ một quá trình khác.
Paul

Ngay cả khi một máy cần sử dụng nhiều dung lượng trao đổi, nó cũng không cần 100% CPU để thực hiện. Một cái gì đó là kỳ lạ.
Zaz

@Zaz Không phải là nó sử dụng sức mạnh xử lý của CPU để hoán đổi, mà CPU được sử dụng 100% do IOWAIT. Mỗi lần bộ nhớ cần được hoán đổi từ đĩa, CPU phải ngồi đó và chờ đợi - IOWAIT, và không làm gì khác (trung bình).
Paul

@Paul: Bạn có chắc không? topđang nói với tôi rằng không có thời gian nào được sử dụng trong IO chờ đợi và gần như 100% thời gian đang được sử dụng trong hệ thống. Thông tin thêm: kswapd thường sử dụng CPU 100% khi trao đổi được sử dụng
Zaz

9

Bạn có thể viết kịch bản .. nhưng bạn cũng có thể thực hiện qua đầu

Chạy đầu rồi nhấn O theo sau là p rồi vào

Bây giờ tất cả các quy trình được sắp xếp theo cách sử dụng trao đổi và bạn có thể thấy những quy trình nào đang sử dụng nó


2
O hiển thị các tùy chọn bộ lọc cho tôi, nhấn p rồi nhập sẽ cung cấp cho tôi "'bao gồm' dấu phân cách bộ lọc bị thiếu"
Shadow

@Shadow Vấn đề tương tự, ở đây một lệnh thay thế unix.stackexchange.com/questions/128953/iêu
Bjorn

8

Nếu bạn đang sử dụng Ubuntu 15.10 trở lên, đây thực sự có thể là kết quả của một lỗi , đặc biệt nếu hệ thống của bạn là máy ảo thiếu phân vùng trao đổi (ví dụ: AWS EC2). Vấn đề tồn tại trên các bản phân phối khác , nhưng, khi viết, không rõ liệu cùng một bản sửa lỗi có hoạt động phổ biến hay không.

Một cách giải quyết tạm thời:

sudo ln -s /dev/null /etc/udev/rules.d/40-vm-hotadd.rules
sudo reboot

Lưu ý rằng điều này sẽ vô hiệu hóa RAM / CPU hotadding cho các máy ảo Xen và Hyper-V.


Nếu điều này xuất hiện từ đâu trên hệ thống của tôi trên Kubfox 16.10 với cách giải quyết đã được kích hoạt cách đây một thời gian.
26 phút

@jeteon Có nhiều vấn đề có thể gây ra hành vi này; điều này chỉ xảy ra là một đặc biệt phổ biến.
Zenexer

Vâng. Tôi đã thấy rằng echo 3 > /proc/sys/vm/drop_cacheslàm giảm bớt nó một khi nó bắt đầu xảy ra. Bây giờ tôi đã có lệnh về một công việc định kỳ và nó dường như có ích, hoặc ít nhất là hạn chế thời gian của vụ thảm sát OOM khi tôi rời khỏi máy tính.
jeteon

6

Dường như cũng có một lỗi ở kswapdmột nơi nào đó, hy vọng chỉ có trên các hạt nhân cũ.

Gần như mỗi ngày bây giờ kswapd đi ngẫu nhiên trên một số máy trong một cụm lớn hơn (mặc dù với một nhân không phải là hiện tại). 100% CPU trên cả hai quá trình kswapd. Không có quá trình chạy nào khác (ngoại trừ ssh shell), nhiều RAM miễn phí (hơn 700 MB) và hoàn toàn không sử dụng SWAP. Không hoán đổi, không trao đổi là tốt.

Không có gì giải thích được, tại sao một máy cụ thể bị tấn công và một máy khác thì không. Có vẻ như không phải là hoàn toàn ngẫu nhiên, bởi vì nó thường đánh nhiều hơn một máy trong một khoảng thời gian ngắn. Có vẻ như máy móc, không hoạt động, cũng như máy móc, chịu áp lực cao, ít có khả năng bị ảnh hưởng. Vì vậy, nó phải làm một cái gì đó với tải công việc và chỉ nhấn nếu máy không nhàn rỗi cũng không quá bận.

Nếu vấn đề đình công không có gì giúp đỡ nữa. Giết tất cả các quy trình (không trở thành không thể thực hiện được), ngắt kết nối tất cả các hệ thống tập tin, không có gì. kswapdvẫn ở mức CPU 100%. Tôi nghi ngờ một số chủng tộc spinlock trong hạt nhân SMP, nhưng cũng có khả năng là tôi đã sai.

Có lẽ hãy xem câu trả lời của tôi serverfault.com/questions/316995/#493257

Ghi chú:

  • Khởi động lại máy bị ảnh hưởng thường thất bại vì quá trình tắt máy bắt đầu treo ở đâu đó.
  • Không có kết nối trực tiếp với Internet. Nguyên nhân nước ngoài là không thể.
  • Nó dường như phụ thuộc vào loại khối lượng công việc mà máy xử lý theo quan điểm của tải, bởi vì chúng tôi có các máy chưa bao giờ bị ảnh hưởng (chưa).
  • Xin lỗi, tôi không thể cụ thể hơn về những gì chúng tôi làm và tại sao.
  • Vâng, tôi đang suy đoán. Bởi vì đó là một hiệu ứng cực kỳ khó hiểu, ngày hôm nay.

Đây là lịch sử. RedHat đã xác nhận: Đó là sự cố của kernel 2.6.18-194.el5 kết hợp với máy khách NFS. Nó đã được sửa vào năm 2012 rồi. Xem câu trả lời được liên kết trong văn bản của tôi để biết thêm một chút thông tin. Nếu bạn nhấn vào ngày hôm nay, nó có thể là một số nguyên nhân khác.
Tino

1
Đây vẫn là một vấn đề ở một số nơi. Tôi đã thấy hàng tấn những cái này bật lên. đây , và đây là một số ví dụ
trueCamelType
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.