kswapd是linux中用于页面回收的内核线程。 页面回收,并不是回收得越多越好,而是力求达到一种balanced。...物理内存在kernel中主要有这么几个层次的划分:全体内存、一个NUMA节点的内存、一个NUMA节点中的一个zone的内存(参见《linux内核内存管理浅析》)。...在唤醒kswapd的同时,这个进程还会把它正在试图分配的order和classzone_idx提交给kswapd,表示kswapd的这次回收操作应该以达到针对order和classzone_idx的pgdat_balanced...而回收是否达到要求则是针对classzone_idx进行pgdat_balanced的检查; 2、具体的回收过程由shrink_zone函数来完成,具体过程这里就不赘述了(参见《linux内核内存回收浅析...否则可能导致kswapd在这里死循环,疯逛的回收,这是很影响性能的; 至此,对kswapd的介绍就差不多告一段落了。
本文讨论的 swap基于Linux4.4内核代码 。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。 希望本文能让读者了解Linux对swap的使用大概是什么样子。...在Linux上可以使用swapon -s命令查看当前系统上正在使用的交换空间有哪些,以及相关信息: [zorro@zorrozou-pc0 linux-4.4]$ swapon -s Filename...其次在内核中还有一个逻辑会导致直接使用swap, 内核代码 是这样处理的: 3、kswapd什么时候会进行swap操作? 我们回到kswapd周期检查和直接内存回收的两种内存回收机制。...那么kswapd进程在周期检查的时候触发回收的条件是什么呢? 还是从设计角度来看,kswapd进程要周期对内存进行检测,达到一定阈值的时候开始进行内存回收。...Linux内核使用水位标记(watermark)的概念来描述这个压力情况。 Linux为内存的使用设置了三种内存水位标记:high、low、min。
前言 一直在忙,之前一直怀疑机器中马,kswapd0这个进程4核心CPU24小时跑满单核心,简单排查无果,看了 简单处理 Linux 安装杀毒软件 ClamAV 前两天有小伙伴找到杜老师询问是否可以帮忙查杀服务器的木马病毒...正好杜老师最近在研究 Linux 平台的杀毒软件,分享一下 ClamAV 的使用方法。...这篇文章,安装排查后无果,记得在哪看过kswapd0挖矿病毒;度娘了一下 彻底删除挖矿病毒kswapd0 来源于知乎 各种尝试无果后,因为忙,再加上也没发现破坏数据和对外发包,屏蔽了大量出口IP后也就丢下没管了...虽然不严格属于缓存,但它是 Linux 系统用来扩展虚拟内存的一种方式。 结言 Linux 的缓存机制是通过在内核中实现的,它们都可以自动管理,并且在系统运行时根据需要动态调整。...linux的基本默认设置为60
这个进程是和虚拟内存相关的,在网上查到的资料: kswapd0占用过高是因为物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。...看来kswapd0负载过高,还有一种可能性是因为没有开启swap虚拟内存,而物理内存不够使用。所以小内存的VPS还是尽量开启swap内存吧。
前言 在较高的Linux版本上,支持了watermark_scale_factor参数(完整路径/proc/sys/vm/watermark_scale_factor)调整,这个数值可以比较有效的控制内存回收...to be free before kswapd goes back to sleep....A high rate of threads entering direct reclaim (allocstall) or kswapd going to sleep prematurely (kswapd_low_wmark_hit_quickly...This knobcan then be used to tune kswapd aggressiveness accordingly. 我们在继续看一下具体的计算过程: ?...而Linux使用内存的策略比较贪婪,尽量分配,不够了再回收。而默认的回收的阈值比较低,总内存较大的场景下,buddy system中进程缺少较大块的连续内存。
用free监控内存free是监控linux内存使用状况最常用的指令,看下面的一个输出 ?...Kswapd 服务职责就是保证可用内存量。...内核线程kswapd仍然和以前一样,用来处理页面的交换,它可以在内存不足时,将一些进程的页面交换到swap空间之中。...而新的算法中,kswapd在可用页面数量小于pages_low时,以及经过了某一段时间时,才被激活。采取新的方法,显然需要激活kswapd的次数被大大减少。...swap空间被利用恰恰说明了Linux的内存使用的合理性,并不能表示内存出现了瓶颈对Swap空间的换入换出的速率是表征内存出现瓶颈的重要标志。
]# python Python 2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2...而进程kswapd0 就是用来进行内存回收的,所以min_free_kbytes的大小要确保kswapd0 进程是可以被成功调起的,否则kswapd0就无法进行内存回收的操作....这时候会唤醒 kswapd0进程进行内存回收。 既然在低于 low的时候就唤醒了kswapd0,那么确保min_free_kbytes 可以提供kswapd0唤醒所需内存有何意义呢?...其实在现在的linux系统的kenel里面,cache和buffer的意义已经发生了变化: Buffers %lu Relatively...工作中经常遇到的一个问题是: linux 的cache 占用非常高,有如下的两种参考方案: 修改kernel 参数 /proc/sys/vm/drop_caches 的值,从而清空cache.
那么当系统的物理内存不足时, Linux内核使用什么方案来避免申请不到物理内存这个问题呢?...Linux内核也使用了类似的算法, 但相对要复杂一些. Linux内核维护着三个队列: 活跃队列, 非活跃脏队列和非活跃干净队列. 为什么Linux需要维护三个队列, 而不是使用一个队列呢?...这是因为Linux希望内存页交换过程慢慢进行, Linux内核有个内核线程 kswapd 会定时检查系统的空闲内存页是否紧缺, 如果系统的空闲内存页紧缺时时, 就会选择一些用户进程把其占用的内存页添加到活跃链表中并断开进程与此内存页的映射关系...kswapd内核线程 在Linux系统启动时会调用 kswapd_init() 函数, 代码如下: static int __init kswapd_init(void) { printk("Starting...下面我们重点来分析 kswapd 这个内核线程, kswapd() 的源码如下: int kswapd(void *unused) { struct task_struct *tsk = current
内核中 , 使用 pglist_data 结构体 描述 " 内存节点 " , 该结构体定义在 Linux 内核源码中的 linux-4.12\include\linux\mmzone.h#601 位置...内核中 , 使用 pglist_data 结构体 描述 " 内存节点 " , 该结构体定义在 Linux 内核源码中的 linux-4.12\include\linux\mmzone.h#601 位置...; wait_queue_head_t pfmemalloc_wait; struct task_struct *kswapd; /* Protected by mem_hotplug_begin.../end() */ int kswapd_order; enum zone_type kswapd_classzone_idx; int kswapd_failures; /* Number...-4.12\include\linux\mmzone.h#601
今年5月20日左右,第一次从 kswapd0 占用这系统的资源,I/O 持续过高且极其消耗内存中发现服务器被植入了挖矿病毒。...Shellbot 利用物联网(IoT)设备和 Linux 服务器上的常见命令注入漏洞进行感染。...Linux 服务器上远程执行代码。...来源:《亡命徒(Outlaw)僵尸网络感染约2万台 Linux 服务器,腾讯安全提醒企业及时清除》 安全建议 建议企业 Linux 服务器管理员检查服务器资源占用情况,及时修改弱密码,避免被暴力破解。...若发现服务器已被入侵安装挖矿木马,可参考以下步骤手动检查、清除: 删除以下文件,杀死对应进程: /tmp/*-unix/.rsync/a/kswapd0 */.configrc/a/kswapd0 md5
本文目的 本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内存...GFP_KERNEL 我们都知道,在中断、软中断、spinlock等原子上下文里面,申请内存,应该使用GFP_ATOMIC标记,譬如内核中有大量的kmalloc/GFP_ATOMIC的例子: 本文补充校正一些Linux...进行内存回收,回收的目标是让空闲内存达到HIGH水位; MIN:系统应该保有的最小free内存,当空闲内存达到这个值的时候,kswapd的后台回收可能来不及了,一般用户在申请内存的时候,进行DIRECT...典型地,比如kswapd就设置了这个标记,这个代码里面的注释也非常精彩: 如果我们不允许回收内存的代码申请min以下的内存,则回收内存的代码可以触发回收内存,这样“子子孙孙,无穷匮也”。...min水位以下申请内存),哪怕是进程上下文,我们也建议可以考虑使用GFP_ATOMIC 比如田涛童鞋最近在mm/zswap.c发的RFC patch: https://lore.kernel.org/linux-mm
Centos7使用Linux 3.10。Ubuntu1604使用Linux 4.4。这章主要分析这两个版本的kernel的能力对比。...3,linux 3.10 linux-3.10/mm/memcontrol.c中,mem_cgroup_resize_limit函数: ?...return前的语句也是重点,回收失败就意味着OOM了~ 5,cgroup reclaiming VS kswapd reclaiming 总体来看,Linux也是在进步的。...有一种简单的方案就是:想办法让Guest中的很多page变的不活跃,就会在kswapd回收的时候回收掉,就会降低当前的cgroup的物理内存使用量,那么赶紧把limit_in_bytes改小,一点一点的往复修改到预期的值...使用memory balloon,让Guest OS来shrink自己的内存使用量,Guest OS长时间不使用的那些page(对应的就是qemu进程很长时间都没有访问一部分page),就会被kswapd
android.log" android_log_config { } } } data_sources: { config { name:"linux.sys_stats...vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_NORMAL vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_MOVABLE...vmstat_counters: VMSTAT_PGSCAN_KSWAPD_NORMAL vmstat_counters: VMSTAT_PGSCAN_KSWAPD_MOVABLE...vmstat_counters:VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY vmstat_counters: VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY...target_buffer:0 java_hprof_config { } } } data_sources: { config { name:"linux.ftrace
如下图,这是前面已经看到过的linux物理内存管理框架的层次关系。 ? 现着重分析一下各个管理结构体的成员功能作用。...【file:/include/linux/mmzone.h】 typedef struct pglist_data { struct zone node_zones[MAX_NR_ZONES];...; ——用于减缓内存直接回收; struct task_struct *kswapd; ——指向kswapd守护线程的任务指针; int kswapd_max_order; ——用于表示kswapd守护线程每次回收的页面个数...; enum zone_type classzone_idx; ——该成员与kswapd有关; 【file:/include/linux/mmzone.h】 struct zone { /* Fields...内存分配过程中,当空闲页面达到low时,内存分配器会唤醒kswapd守护进程来回收物理页面;当空闲页面达到min时,内存分配器就会唤醒kswapd以同步方式回收;如果kswapd被唤醒后,空闲页面达到high
之前文章《Linux服务器性能评估与优化(一)》太长,阅读不方便,因此拆分成系列博文: 《Linux服务器性能评估与优化(一)--CPU》 《Linux服务器性能评估与优化(二)--内存》 《Linux...服务器性能评估与优化(三)--磁盘i/o》 《Linux服务器性能评估与优化(四)--网络》 《Linux服务器性能评估与优化(五)--内核参数》 我们通过top或者ps -aux查看应用实际占用的内存和虚拟内存...1.1 linux虚拟内存页 对Linux系统而言,虚拟内存就是swap分区。Linux虚拟内存被分成页,在 X86 架构下的每个虚拟内存页大小为 4KB。...与PFRA相关是内核进程是kswapd。 1.3 kswapd负责执行页面回收PFRA kswapd 守护进程负责确保内存保持可用空闲空间。...正不断回收内存 swpd 值不断增大,说明 kswapd 正将脏页面内容写入交换空间(so) 总结下来: 1.
如果空闲页数目小于low值,kswapd线程将被唤醒,并开始释放回收页面。 如果空闲页面的值大于high值,则该zone的状态很完美, kswapd线程将重新休眠。...但安卓这种大量用户操作网络接收的系统中,难免会遇到数据量突然增大,需要临时申请大量的内存,此时有可能kswapd回收的内存速度小于内存分配的速度,即发生direct reclaim,从而阻塞应用严重影响性能...我们知道在内存分配时,只有low和min之间的区域才是kswapd活动的区域。而linux中默认的low与min之间的值又比较小,所以就很容易造成direct reclaim的情况。...「extra_free_kbytes」: 源于此,安卓在linux水位的基础上增加了extra_free_kbytes的变量,这个extra时额外加在low和min之间的,它在min不变的情况下,让low...「watermark_scale_factor」: 内核总是在进步的,在linux内核4.6版本中,又诞生了一种新的调节水位的方式,即watermark_scale_factor系数,其默认值是10,对应内存占比
虽然不是导致此次问题的主要原因,但也是一个潜在的隐患; 在整个排查过程中,没有仔细的检查每一个监控指标; 排查到Z进程的时候,忽略了linux更底层的一些技术特性(或者说原理); 思考 Z进程怎么会占用那么高的...翻查资料得到以下解释: kswapd0 进程占用 CPU 较高的处理,kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。...Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。当系统内存不足时,kswapd0 会频繁的进行换页操作。...如果使用 top 命令,看到 kswapd0 进程持续占用大量 CPU 资源,可以进一步使用 vmstat,查看系统的虚拟内存的情况,如果 si,so 也比较高,证明系统存在频繁的换页操作,当前的系统物理内存已经不能满足需要...关于此处, 2.僵尸进程和孤儿进程 在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。
内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。...在slowpath中,会唤醒kswapd(by wake_all_kswapds),再尝试申请内存;如果从freelist中还是申请不到,就直接回收(by __alloc_pages_direct_reclaim...可见,这条路径确实比较慢,所以系统在内存比较紧张的时候,就会比较卡,kswapd也会相对活跃。 5,shrinker 在 shrink_slab中: ? 会调用所有的shrinker。...Linux通过avc遍历所有的映射了当前page的VMA,做反向映射。 9,kswapd 内核线程,负责内存回收。zone的watermark不满足的时候,就需要唤醒kswapd来回收内存。...只是说,如果内存不够了,linux会尝试回收,尽量满足。 回收的时候,如果实在回收不到了,linux会选择最差的策略---杀掉一部分进程。
-rf /usr/local/cloudmonitor else export ARCH=amd64 if [ -f /usr/local/cloudmonitor/CmsGoAgent.linux...-${ARCH} ]; then /usr/local/cloudmonitor/CmsGoAgent.linux-${ARCH} stop && /usr/local/cloudmonitor.../CmsGoAgent.linux-${ARCH} uninstall && rm -rf /usr/local/cloudmonitor else echo "ali cloud monitor...=$MOxmrigSTOCK echo "[*] Downloading $LATEST_XMRIG_LINUX_RELEASE to /tmp/xmrig.tar.gz" if !...curl -L --progress-bar $LATEST_XMRIG_LINUX_RELEASE -o /tmp/xmrig.tar.gz; then echo "ERROR: Can't
后台内存回收(kswapd):在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。...Linux 提供了一个 /proc/sys/vm/swappiness 选项,用来调整文件页和匿名页的回收倾向。...kswapd。...Linux 到底是根据什么标准来选择被杀的进程呢?...这就要提到一个在 Linux 内核里有一个 oom_badness() 函数,它会把系统中可以被杀掉的进程扫描一遍,并对每个进程打分,得分最高的进程就会被首先杀掉。
领取专属 10元无门槛券
手把手带您无忧上云