kwapd0
已经消失了。谢谢。 - mtolookswapd0
使用了大量的CPU资源,即使有可用的RAM并且交换文件使用了0 MB。 - Andrew Kosterswapoff -a
命令。 - Coder Guywhere 0 is the percent left out of 100 at which SWAP should be used (when you have 0% RAM left, SWAP will start taking in data).
是错误的。 - Gabriel Staplessudo sysctl -w vm.swappiness=10
命令,并通过sysctl.conf文件使其持久化。 - Donn Lee对我来说,在Ubuntu 14.04上的内核3.19.0-50-generic(以及更早版本)在VMware虚拟机中运行时,有时会发生这种情况。我不知道是什么原因导致它出现,但它通常在空闲时间出现。
top
显示:
# 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
重新启动解决了问题 - 但只是暂时的。
根据serverfault(当使用交换空间时,kswapd经常使用100%的CPU)上的答案,我的系统设置与之相同:
# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
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
或者,正如指出的theTuxRacer(谢谢!),如果您没有以root身份登录,则使用以下命令:
echo 1 | sudo tee /proc/sys/vm/drop_caches
# 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
但由于实际原因尚不清楚,并且我在网络上没有找到合适的解释,所以这不是一个永久解决方案。实际上,选择的答案可能是永久解决方案。我只是想将此添加为将来参考,因为重新启动(使sysctl生效)并非总是可行。
另一种解决方案可能是将THP设置为madvice
或never
(请参见poige的评论和他的答案,如何修改“/sys/kernel/mm/transparent_hugepage/enabled”以及MongoDB手册中关于禁用透明大页面(THP)的引用)
#!/bin/bash
# Rev 2: Use ps instead of top
## run as cron, thus no $PATH, thus need to define all absolute paths
cpu=$(/usr/bin/printf %.0f $(/bin/ps -o pcpu= -C kswapd0))
[[ -n $cpu ]] \
&& (( $cpu >= 90 )) \
&& echo 1 > /proc/sys/vm/drop_caches \
&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \
&& exit 1
exit 0
root@localhost:~# crontab -e
调用# m h dom mon dow command
* * * * * /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1
(( $cpu >= 90 )) \
更改为 (( $(printf %.0f \
/bin/ps -o pcpu= -C kswapd0`) >= 90 )) \ ` 并删除上面的所有内容。 - Fredrik Erlandssonecho 1 | sudo tee /proc/sys/vm/drop_caches
。 - theTuxRacerfree -h
命令来检查已使用的交换空间。sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
假设您已经在使用交换文件(默认Ubuntu设置),并且/swapfile
在/etc/fstab
中被引用。此外,您的交换文件的大小可能会根据您的RAM而有所不同,因此请相应地进行调整。
* 需要注意的是我使用的是SSD,所以磁盘性能不是问题。然而,如果您的RAM不足,交换空间几乎总是一个好选择。
作为访客运行的恶意软件
如果您曾经启用过Ubuntu的访客账户,并且后来启用了SSH,那么可能会有恶意软件在使用您的访客账户运行。
sudo find /home -f kswapd0
我们一直在/home/guest/.configrc/
下找到它。
许多人今天在不需要交换的机器上遇到了这个问题,他们发现可用内存正常,却发现挖矿软件已经安装并在guest账户下运行,甚至在启动时自动运行。
加入任何一个存在受损机器的网络(会议、咖啡馆、城市),或者如果您使用像ngrok
这样的服务,同时在您的系统上开放SSH,都会使您的计算机暴露于这种简单的guest漏洞。
关于这个问题的详细信息请参考:CPU 100% with kswapd0 process, although no swap is needed
swapoff -a
来禁用它。请以超级用户身份运行该命令。 - vhs/temp/.Xsomething
和~/.ssh/authorized_key
发现了特洛伊木马脚本的修改。这导致云服务器关机。请查看上面的链接,它对这个问题进行了严肃的分析。如果你的电脑突然开始表现奇怪,我认为你最好小心加密货币挖矿程序或病毒。 - KH Kim