kswapd0 进程CPU占用过高

Linux挖矿病毒(kswapd0进程使cpu爆满) 事情起因:有台测试服务器很久没用了,突然监控到CPU飙到了95以上,并且阿里云服务器厂商还发送了通知消息,【阿里云】尊敬的xxh: 经检测您的阿里云服务(ECS实例)i-xxx存在挖矿活动。因此很明确服务器中挖矿病毒。 阅读详情
AI摘要

本文探讨了kswapd0进程与Linux内存管理的关系,包括如何通过调整swappiness参数来优化内存与swap空间的使用,以及如何理解Linux内存机制。

前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况。又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了。

然后看进程的情况。我以为会是nginx和php-fpm 这两个一半一半这样子的情况,结果发现 kswapd0 这个进程直接99%。然后马上又降下去了。前几天一直没时间找原因,今天抽出点时间把这个整理下。


总结下:

swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。

kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。

  可以通过修改  /etc/sys/vm/swappiness  里面的数值来修改swap分区使用与否,默认 60,数值越大表示更多的使用swap分区

swap 分区和内存 都有缓存区,缓存的内容为之前使用过的数据,用于加快第二次打开时访问速度。

swap分区 可以使用多个交换区(使用多硬盘?) 来加快swap访问速度

swap 分区使用的为硬盘的内容,速度比直接访问内存慢几千倍

真正使用的内存 used -(buffers+ cached) buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,

我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。

Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。

	Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。
	Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
	通俗点:
	cache是高速缓存,用于CPU和内存之间的缓冲;
	buffer是I/O缓存,用于内存和硬盘的缓冲


 




操作系统都用分页机制来管理物理内存,操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中,由于内存持续不足,这个换页动作持续进行,kswapd0是虚拟内存管理中负责换页的,当服务器内存不足的时候kswapd0会执行换页操作,这个换页操作是十分消耗主机CPU资源的。如果通过top发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。问题描述:kswapd0 进程占用了系统大量 CPU 资源。处理办法:Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。而由于换页操作非常消耗 CPU 资源,所以会导致该进程持续占用较高 CPU 资源。如果通过 top 等监控发现 kswapd0 进程持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,则通常是由于系统在持续的进行换页操作所致。则可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。



physical mem 不足,引起 swap 频繁读写。

kswapd0 是系统的虚拟内存管理程序,如果物理内存不够用,系统就会唤醒 kswapd0 进程,由 kswapd0 分配磁盘交换空间作缓存,因而占用大量的 CPU 资源。

查看内存及swap使用率:发现还有空余的内存,但是已经开始用swap了。

wKioL1RcJ2yhkZ7QAACHMu7teHo211.jpg

内存使用到多少开始使用swap?

vm.swappiness   这个内核参数控制
/proc/sys/vm/swappiness

这个交换参数控制内核从物理内存移出进程,移到交换空间。该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。

The defaultvalue I’ve seen on both enterprise level Red Hat and SLES servers is 60.
To find out what the default value is on aparticular server, run:
sysctl vm.swappiness
The value is also located in/proc/sys/vm/swappiness.

 

PS:设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,设置vm.swappiness=100的话,则表示尽量使用swap分区,默认的值是60

调整内存参数,当内存使用率不足10%(开始是默认值60)时在使用swap,尽量避免使用swap,减少唤醒软中断进程,从而降低ksoftirqd进程对cpu的占用。

wKiom1RcJ0qihaBdAAAy0LKeCzE718.jpg

关于linux内存分配机制

在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

一.  我们先来查看一个内存使用的例子:
[oracle@db1 ~]$ free -m
total       used      free     shared    buffers    cached
Mem:       72433     67075     5357      0       558       62221
-/+ buffers/cache:    4295      68138
Swap:       72096      91      72004
上述结果显示了67075M的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,所以当前进程实际占用内存是4296M。
可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。
如上面的例子:使用了72433M的内存,67075M被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。
因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

二. Swap配置对性能的影响
分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。
通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。
另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

三.  Linux 内存机制
Linux支持虚拟内存(VirtualMmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其它目的。当需要用到原始的内容时,它们被重新读入内存。这些操作对用户来说是完全透明的;Linux下运行的程序只是看到有大量的内存可供使用而并没有注意到时不时它们的一部分是驻留在硬盘上的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为交换空间(Swap Space)。
一般,在交换空间中的页面首先被换入内存;如果此时没有足够的物理内存来容纳它们又将被交换出来(到其他的交换空间中)。如果没有足够的虚拟内存来容纳所有这些页面,Linux就会波动而不正常;但经过一段较长的时间Linux会恢复,但此时系统已不可用了。
有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种情况是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用很多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。对此并没有什么可担心的,但是知道了是怎么一回事,也就无所谓了。
许多操作系统使用了虚拟内存的方法。因为它们仅在运行时才需要交换空间,以解决不会在同一时间使用交换空间,因此,除了当前正在运行的操作系统的交换空间,其它的就是一种浪费。所以让它们共享一个交换空间将会更有效率。
注意:如果会有几个人同时使用这个系统,他们都将消耗内存。然而,如果两个人同时运行一个程序,内存消耗的总量并不是翻倍,因为代码页以及共享的库只存在一份。

Linux系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。可以将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访问模式,这样做可以提高性能。

与访问物理内存相比,磁盘的读写是很慢的。另外,在相应较短的时间内多次读磁盘同样的部分也是常有的事。例如,某人也许首先阅读了一段E-mail消息,然后为了答复又将这段消息读入编辑器中,然后又在将这个消息拷贝到文件夹中时,使得邮件程序又一次读入它。或者考虑一下在一个有着许多用户的系统中 ls命令会被使用多少次。通过将信息从磁盘上仅读入一次并将其存于内存中,除了第一次读以外,可以加快所有其它读的速度。这叫作磁盘缓冲(Disk Buffering),被用作此目的的内存称为高速缓冲(Buffer Cache)。但是,由于内存是一种有限而又不充足的资源,高速缓冲不可能做的很大(它不可能包容要用到的所有数据)。当缓冲充满了数据时,其中最长时间不用的数据将被舍弃以腾出内存空间用于新的数据。

对写磁盘操作来说磁盘缓冲技术(非缓存)同样有效。一方面,被写入磁盘的数据常常会很快地又被读出(例如,原代码文件被保存到一个文件中,又被编译器读入),所以将要被写的数据放入缓冲中是个好主意。另一方面,通过将数据放入缓冲中,而不是将其立刻写入磁盘,程序可以加快运行的速度。以后,写的操作可以在后台完成,而不会拖延程序的执行。
大多数操作系统都有高速缓冲(尽管可能称呼不同),但是并不是都遵守上面的原理。有些是直接写(Write-Through):数据将被立刻写入磁盘(当然,数据也被放入缓存中)。如果写操作是在以后做的,那么该缓存被称为后台写(Write-Back)。后台写比直接写更有效,但也容易出错:如果机器崩溃,或者突然掉电,缓冲中改变过的数据就被丢失了。如果仍未被写入的数据含有重要的薄记信息,这甚至可能意味着文件系统(如果有的话)已不完整。
针对以上的原因,出现了很多的日志文件系统,数据在缓冲区修改后,同时会被文件系统记录修改信息,这样即使此时系统掉电,系统重启后会首先从日志记录中恢复数据,保证数据不丢失。当然这些问题不再本文的叙述范围。
由于上述原因,在使用适当的关闭过程之前,绝对不要关掉电源,Sync命令倾空(Flushes)缓冲,也即,强迫所有未被写的数据写入磁盘,可用以确定所有的写操作都已完成。在传统的UNIX系统中,有一个叫做update的程序运行于后台,每隔30秒做一次sync操作,因此通常无需手工使用sync命令了。Linux另外有一个后台程序,Bdflush,这个程序执行更频繁的但不是全面的同步操作,以避免有时sync的大量磁盘I/O操作所带来的磁盘的突然冻结。
在Linux中,Bdflush是由update启动的。通常没有理由来担心此事,但如果由于某些原因bdflush进程死掉了,内核会对此作出警告,此时你就要手工地启动它了(/sbin/update)。


缓存(Cache)实际并不是缓冲文件的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,它们通常是1KB)。这样,目录、超级块、其它文件系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了。缓冲的效力主要是由它的大小决定的。缓冲太小的话等于没用。它只能容纳一点数据,因此在被重用时,所有缓冲的数据都将被倾空。实际的大小依赖于数据读写的频次、相同数据被访问的频率。只有用实验的方法才能知道。
如果缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存,Linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小。
这就是一般情况下Linux内存的一般机制,真正的Linux内存的运行机制远远比这个复杂。

转自:转自

Linux的进程kswapd0占用CPU过高导致卡顿问题 最近发现服务器访问速度变慢,内存占得很满,操作经常卡顿,因为部署了不少的服务,有应用服务,也有数据库服务都很吃内存,但是查看还剩余2G左右内存,应该不至于卡顿,于是准备处理一下。看了系统经常发现一个进程kswapd0 一阵一阵的占用超高的CPU资源。查了一些资料说,系统物理内存不足时,kswapd0 会频繁的进行换页操作(使用swap分区与内存换页操作交换数据),而换页操作非常消耗 CPU 资源,所以导致该进程持续占用 CPU 资源过高。 阅读详情

相关推荐

新手教学系列——kswapd0 CPU占用100%问题解析与解决

通过这次异常问题的解决,我深刻认识到,即使是看似常规的问题,也可能有不寻常的原因。遇到类似情况时,务必要仔细排查各个细节,切勿掉以轻心。检查系统进程的用户:任何异常进程的执行用户都可能是问题的关键。及时终止异常进程:发现异常进程后,及时终止可以避免问题恶化。清理废弃账号:确保系统中没有多余的账号,以减少潜在的安全隐患。关注系统日志:定期检查系统日志,及时发现潜在问题。总而言之,系统运维中要时刻保持警惕,深入分析和解决问题的能力是确保系统稳定运行的关键。相信一句话,“事出反常必有妖”。

weixin_41701856的博客 2136

服务器(Linux)挖矿木马病毒(kswapd0进程使cpu爆满)

服务器(Linux)挖矿木马病毒(kswapd0进程使cpu爆满)

小韩的博客 3万+

Linux kswapd0进程CPU占用过高,病毒清理

<div id="bgchange" style="width: 660px;"> <div class="fontsize_bgcolor_controler"> <div class="a_bgcolor"> <img src="http://pubimage.360doc.com/NewArticle/bgcolor.jpg"> <div class="a_colorlist"> <span class="a_color1" oncli

zhangjunli的博客 1万+

linux kswapd0进程cpu占用一直居高不下

kswapd0是 Linux 内核中的一个进程,负责管理虚拟内存和交换(swap)操作。当该进程的 CPU 占用率居高不下时,通常表示系统正在频繁地进行交换操作,可能由于内存不足或内存使用不合理。

u010674101的专栏 4921

深入解析Linux进程kswapd0的CPU高占用问题及优化策略

本文深入解析了Linux系统中kswapd0进程导致CPU高占用的原因及优化策略。通过分析内存管理机制、诊断工具使用和参数调优(如swappiness设置),帮助系统管理员有效解决内存压力导致的卡顿问题,提升服务器性能。

weixin_29254673的博客 397

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 188

kswapd0进程CPU占用过高

不过通常的操作下,二者是在一起配合产生作用的,例如对一个文件进行写入的时候,page cache 的内容会被改变,而 buffer cache 则负责将 page 标记为不同的缓冲区,并记录修改了哪一个缓冲区,这样如果后续需要执行脏数据的回写,内核就只需要写回修改的部分而不用将整个 page 写回。而如果设置有多个swap交换区,swap空间的分配会以轮流的方式操作于所有的swap。需要注意的是,一般情况下,系统将内存管理的很好,我们在生产环境中的服务器不要频繁的去释放内存,只在必要时候清理内存即可。

记录自己学习计算物理的过程;也欢迎关注同名公众号、知乎和个人博客! 2923

threejs加载3dtiles(倾斜摄影)数据

1、安装3dTilesRenderer 插件 使用npm 安装 npm install 3d-tiles-renderer --save 或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 2、使用 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRend..

weixin_39481659的博客 1万+

python进程占用cpu过高_kswapd0 进程CPU占用过高

前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况。又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了。然后看进程的情况。我以为会是nginx和php-fpm 这两个一半一半这样子的情况,结果发现 kswapd0 这个进程直接99%。然后马上又降下去了。前几天一直没时间找原因,今天抽出点时间把这个整理下。总结下:swap分区的作用是当物...

weixin_39545895的博客 793

人工智能学习之机器人路径规划优化

A* AStar 人工智能 机器人路径规划优化

RongLin02的博客 7073

EDA开源仿真工具verilator入门4:访问函数介绍

访问函数(Visitor Function)是verilator算法实现的主要工作方式之一,本节将介绍一下访问函数。

fangfanglovezhou的博客 1074

kswapd0进程在CentOS下CPU占用率过高

kswapd0进程在CentOS下CPU占用率过高问题并不是内存不够那么简单我自己解决问题的过程记录 问题并不是内存不够那么简单 今早到公司,开晨会,发现华为云上的测试环境应用访问不到了.晨会开完后,就连上了测试环境进行问题排查.发现了一个名为 kswapd0 的进程,CPU占用率300%多… 其实这个问题前些天也出现过,当时在优快云中找答案,发现都说是内存不够用了的问题. 当时有过怀疑是木马或者病毒,但没有深究. 因为那段时间,服务器密码也不知道是被谁改了,出过一些问题… 但这次又是这个进程在作妖,

moshi_monian的博客 4704

【Unity实战】HybridCLR热更快速集成

本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。

u012587406的博客 4994

Linux kswapd0 进程CPU占用过高

图便宜买了个1核1G虚拟机,启动两个jar后cpu飙升直接卡死,查看cpu及内存占用 发现kswapd0进程cpu占用一直居高不下,于是查询资料,总结如下。 swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。 kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。 可以通过修改 /etc...

ako881010的博客 2818

2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件) 3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下 4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下 5. 将FreeRTOSv9.0.0\FreeRTOS

Car12 1233

泛微系统流程表单获取节点操作者

泛微系统流程表单获取节点操作者 select typename 流程类型, workflowname 流程名称, nodename 节点名称, (case when nodetype=0 then '创建' when nodetype=1 then '审批' when nodetype=2 then '提交' when nodetype=3 then '归档' else '' end) as 节点类型, groupname 节点操作组, (case when type=1 then '部门+安

烧硬盘 4611

linux 进程 kswapd0 cpu占用过高

1核1G虚拟机,启动两个jar后cpu飙升直接卡死,查看cpu及内存占用 发现kswapd0进程cpu占用一直居高不下,于是查询资料,总结如下。 swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。 kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。 可以通过修改 /etc/sys/vm/swappiness 里面的数值来修改swap分区使用与否,默认 60,数值越大表示更多的使用swap分区。这个交换...

whatday的专栏 1518

DICOM图像知识:深入详解DICOM的层级关系

解析DICOM的四个主要层级:Patient(患者)、Study(检查)、Series(序列)和SOP(服务-对象对),探讨它们之间的关系、各自的唯一标识符以及在实际应用中的用途

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 3304

深入解析Linux中kswapd0进程高CPU占用的优化策略

本文深入解析了Linux系统中kswapd0进程导致CPU占用过高和系统卡顿的根本原因,并提供了从内核参数调优到应用架构升级的完整优化策略。文章详细探讨了物理内存不足、Swap配置不当、vm.swappiness参数设置、内存泄漏等五大元凶,并给出了包括调整swappiness、优化Swap性能、监控诊断在内的实战解决方案,帮助运维人员彻底解决这一常见性能瓶颈。

weixin_29210727的博客 535

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: array_walk()使用
下一篇: 高性能MYsql读书笔记-加快alter table操作的速度
o王o
博客等级 码龄13年 32粉丝 97原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值