kswapd0 đang dùng rất nhiều cpu


45

kswapd0 đang chiếm 99,9% CPU của tôi khi top cho tôi thấy, vấn đề xuất hiện ngày hôm nay khi chơi game và lần đầu tiên nó biến mất sau 6 phút và bây giờ nó đã hoạt động được khoảng 20 phút. Làm thế nào là điều này có thể sửa chữa và những gì gây ra điều này?


Điều này cũng xảy ra với tôi trong Ubuntu 14.04.
eri0o

Điều này cũng xảy ra với tôi vào ngày 18.04. Chi tiết tại đây: Askubfox.com/questions/1118932/ Mạnh
Yuvraj Jaiswal

Câu trả lời:


48

Quá trình kswapd0 là quá trình quản lý bộ nhớ ảo. Máy của bạn nên có RAM, SWAP và EXT4 trên ổ cứng / SSD. Ext4 là nơi lưu trữ mọi thứ và nó luôn truy cập chậm hơn RAM. RAM giống như một không gian chạy nửa chiều để các chương trình truy cập thông tin nhanh chóng. Hầu hết các máy tính có ít nhất 4GB RAM, trong điều kiện bình thường là rất nhiều. Tuy nhiên, khi chơi trò chơi, bạn có thể cạn kiệt dung lượng RAM, đó là nơi SWAP xuất hiện.

SWAP là RAM giả nằm trên ổ cứng / SSD bên cạnh EXT4 của bạn. Nó truy cập nhanh hơn EXT4, nhưng chậm hơn nhiều so với RAM thực tế. Khi bạn thiếu bộ nhớ, kswapd0 sẽ di chuyển các chương trình mà bạn không sử dụng / không sử dụng nhiều như các chương trình khác sang SWAP, điều này gây ra độ trễ cực lớn cho các quy trình đó. Nếu trò chơi của bạn cần RAM 5 GB, 1 GB tại LEAST sẽ ở chế độ SWAP. Điều đó có nghĩa là khi nó cố gắng truy cập thông tin đó, nó phải đợi lâu hơn để có được thông tin đó.

Toàn bộ quá trình này gây ra việc sử dụng CPU cực độ, chuyển thông tin từ và sang SWAP và RAM và xử lý tất cả yêu cầu thông tin cùng một lúc. Làm thế nào để giải quyết vấn đề này?

  1. Yêu cầu kswapd0 chỉ di chuyển công cụ sang SWAP khi bạn hoàn toàn hết RAM. Đây là phương pháp hiệu quả nhất để giải quyết các vấn đề SWAP. Chạy

    echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf

    nơi 0là phần trăm còn lại ra khỏi 100mà SWAP nên được sử dụng (khi bạn có 0% RAM trái, SWAP sẽ bắt đầu dùng trong dữ liệu). Bạn cũng có thể chỉnh sửa /etc/sysctl.conf theo ý thích của mình thay vì thêm lệnh này vào cuối lệnh bằng cách sử dụng gedit hoặc nano hoặc bất cứ điều gì, hãy chắc chắn rằng sudo mặc dù, tập tin này là sở hữu gốc. Khởi động lại và bạn đã thiết lập!

  2. Giảm mức tiêu thụ RAM của các quá trình khác hoặc đóng các chương trình khác trong khi chạy các chương trình bộ nhớ cao. Đây là lý do tại sao hầu hết các trò chơi yêu cầu bạn đóng tất cả các cửa sổ khác trước khi chơi hoặc cài đặt cũng làm như vậy. Những thứ như dịch vụ đồng bộ hóa tập tin có xu hướng chiếm rất nhiều bộ nhớ.
  3. Mua thêm RAM. Cài đặt RAM không khó như âm thanh. Một hoặc hai ốc vít trên một ngăn nhỏ (nếu bạn đang ở trên máy tính xách tay) và một cú nhấp chuột đơn giản. Chỉ cần chắc chắn rằng bạn đang mua đúng loại!
  4. Các tiến trình thấp hơn của CPU giống như bạn đã làm với RAM. Điều này sẽ giúp các bộ nhớ RAM để SWAP hoạt động mượt mà hơn nhiều.

Đó là điều tốt nhất mà bạn có thể làm. Những người khác có thể nói vô hiệu hóa trao đổi hoàn toàn, nhưng điều đó là nguy hiểm và tôi sẽ KHÔNG khuyến nghị điều đó. Điều đó có thể khiến toàn bộ hệ thống bị đóng băng nếu có rò rỉ bộ nhớ hoặc quá nhiều ứng dụng đang chạy. Chỉ cần nhận ra rằng SWAP là một lỗi không an toàn cho RAM. Nó chắc chắn không nhanh hoặc hiệu quả như RAM, nhưng nó tốt hơn so với Pagefile của Window! (hoàn thành cùng một mục đích)

EDIT: Nếu bạn muốn tìm hiểu thêm về SWAP, xem tại đây .


Tôi không thể nhớ chính xác những gì đã khắc phục vấn đề cho tôi nữa, nhưng tôi cảm ơn bạn vì câu trả lời được viết tốt giải thích rất nhiều.
Kaspar

Theo câu trả lời của bạn, tôi chấm dứt một số quy trình để ít trao đổi được sử dụng. Bây giờ quá trình kwapd0đã biến mất. Cảm ơn.
mtoloo

28

kswapd0 chạy ở 99,9% của một CPU nhưng thực tế không hoán đổi chút nào

Đối với tôi, điều đó xảy ra vào các thời điểm trên Ubuntu 14.04 với kernel 3.19.0-50 (và trước đó) đang chạy trong VMware vm. Tôi không có manh mối, những gì làm cho nó xuất hiện, nhưng nó đến trong thời gian nhàn rỗi.

top trình diễn:

# top
top - 09:49:35 up 5 days, 18:35,  1 user,  load average: 1.00, 1.00, 0.99
Tasks: 219 total,   2 running, 217 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 74.7 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   3028784 total,  1874468 used,  1154316 free,  1010276 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.   234928 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    52 root      20   0       0      0      0 R  99.7  0.0 122:15.21 kswapd0
     3 root      20   0       0      0      0 S   0.3  0.0   0:29.86 ksoftirqd/0
     7 root      20   0       0      0      0 S   0.3  0.0   9:49.47 rcu_sched

Giải pháp tạm thời

khởi động lại đã giải quyết vấn đề - tạm thời.

theo câu trả lời trên serverfault (kswapd thường sử dụng 100% CPU khi sử dụng trao đổi) ở đó có cùng cài đặt trên hệ thống của tôi:

# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

giải pháp thực sự là # echo 1 > /proc/sys/vm/drop_caches:

# cat /proc/sys/vm/drop_caches
0
# echo 1 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
1

bây giờ thì ổn rồi:

# top
top - 10:08:58 up 5 days, 18:55,  1 user,  load average: 0.72, 0.95, 0.98
Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3028784 total,   681704 used,  2347080 free,     2916 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.    81924 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     9 root      20   0       0      0      0 S   0.3  0.0  14:10.40 rcuos/0
     1 root      20   0   45652   8124   2888 S   0.0  0.3   1:54.98 init

Giải pháp vĩnh viễn (sẽ được tìm thấy)?

nhưng vì lý do thực tế vẫn chưa được biết và tôi đã không phạt bất kỳ lời giải thích phù hợp nào trên mạng, đây không phải là một giải pháp lâu dài. Trên thực tế, câu trả lời được chọn có thể là giải pháp lâu dài. Tôi chỉ muốn thêm cái này để tham khảo trong tương lai, vì việc khởi động lại (để làm cho sysctl có hiệu lực) không phải lúc nào cũng có thể.

Một giải pháp khác có thể là để thiết lập THP cho một trong hai madvicehoặc never(xem poige của bình luận cho mình câu trả lời , Làm thế nào để tôi sửa đổi “/ sys / kernel / mm / transparent_hugepage / kích hoạt” và tham chiếu MongoDB tay vào Vô hiệu hoá trang lớn trong suốt (THP) )

công việc lương thấp

Tôi đã thiết lập lô sau dưới dạng công việc định kỳ như một giải pháp "vĩnh viễn":

#!/bin/bash


## run as cron, thus no $PATH, thus need to define all absolute paths
top=/usr/bin/top
grep=/bin/grep


top=$($top -bn1 -o \%CPU -u0 | $grep -m2 -E "%CPU|kswapd0")

IFS='
'
set -f

i=0

for line in $top
do
        #echo $i $line

        if ! (( i++ ))
        then
                pos=${line%%%CPU*}
                pos=${#pos}
                #echo $pos
        else
                cpu=${line:(($pos-1)):3}
                cpu=${cpu// /}
                #echo $cpu
        fi

done

[[ -n $cpu ]] && \
(( $cpu >= 90 )) \
&& echo 1 > /proc/sys/vm/drop_caches \
&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \
&& exit 1

exit 0

gọi với

# m h  dom mon dow   command
  * *  *   *   *     /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1


Câu trả lời rất hay, cảm ơn. Hạt nhân RPi được cập nhật và đây là những gì tôi nhận được, berserking kswap.
Paul B

Cảm ơn, @PaulB. Tôi đã thêm vào câu trả lời của mình công việc định kỳ mà tôi sử dụng như một giải pháp lâu dài trên hệ thống của mình.
Martin Rüegg

Như @Veger đã chỉ ra một cách chính xác , điều này cũng hoạt động vào ngày 16.04. Như tôi hiện đang sử dụng bản thân mình. Vì vậy, thêm thẻ. Cảm ơn!
Martin Rüegg

Cảm ơn một lần nữa, @Veger ! - Tôi đã sửa dấu chấm than bị thiếu trong kịch bản Sha-Bang.
Martin Rüegg

1
"echo 1> / Proc / sys / vm / drop_caches" đã sửa lỗi sử dụng CPU cao cho tôi - sự khác biệt giữa ngày và đêm! kswapd0 đã chuyển từ CPU 100% xuống 0%. Một lời giải thích cho lý do tại sao và một giải pháp lâu dài sẽ là tuyệt vời. (Lưu ý bên lề: Tôi đang chạy kernel linux 4.8.0-36 với mem 16 GB và trao đổi 16 GB.)
josephdpurcell
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.