Linux中swap几乎耗尽,但物理内存还有空余的现象

2023-09-16 22:52:24

故障现象:

产生此现象的原因:
swappiness 配额设置了偏高的值。
还有一个潜在的因素是某个程序因其自身对内存管理的缺陷,形成了zombie进程、且为及时关闭的处理任务还在持续消耗Mem及swap。
解决办法:
调低swappiness 配额值,或者直接将swappiness 配额设定为0 。

查看当前OS中的swappiness配额
cat /proc/sys/vm/swappiness

设定当前OS中的swappiness配额值

临时设定:sysctl vm.swappiness=10

永久设定:
tee -a /etc/sysctl.conf <<-’EOF’
# Configure the maximum number of shared memory segments
#kernel.shmall = 4294967296
vm.swappiness=10
EOF

sysctl -p

扩展知识:
Linux在内存被用完之前开始交换。这是为了提高性能和响应能力:性能提高是因为一些内存放磁盘缓存比方内存更合适。因此,最好将一个已经停用了一段时间的程序交换出去,而将经常使用的文件保存在缓存中。当系统处于空闲状态时、而不是当内存满时,一些程序正在运行并请求更多的RAM来完成任务时,响应能力会得到改善。
不建议关闭交换分区。的确,使用交换时,服务器性能会降低,但至少它是可操作的和可访问的。如果服务器需要更多的内存、但没有获得足额的内存,服务器将崩溃。因此有一个交换分区时(在某种程度上)可以避免这种情况的发生。
swappiness是Linux内核参数,作用在于控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间,较低参数值会让内核充分使用武力Mem。Linux的默认设置为60,当物理Mem使用到100-60=40%的时候,就开始使用交换分区。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时地搬运到swap空间里面。
如果物理Mem用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误、程序进程将无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。
通常情况下,swap应大于或等于物理内存的大小,最小不应小于64M,通常swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的swap空间,而复杂的业务系统服务器则视情况不同需要不同大小的swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。
另外,swap分区的数量对Linux及其上的程序进程运行性能也有很大的影响。因为swap交换是磁盘IO的操作,如果有多个swap交换区,swap空间的分配会以轮询的方式操作于所有的swap,这样会大大均衡IO的负载,也会加快swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。此时的CPU并不很忙,而系统却慢。

更多推荐

Docker Volume(存储卷)

文章目录DockerVolume(存储卷)1.什么是存储卷?2.为什么需要存储卷?3.存储卷的分类1)管理卷Volume方式一:Volume命令操作方式二:-v或者--mount指定方式三:Dockerfile匿名卷小结Docker卷生命周期Docker卷共享2)绑定卷bindmount-v参数创建卷3)临时卷tmpf

python+vue理发店管理系统

理发店管理系统主要实现角色有管理员和会员,管理员在后台管理用户表模块、token表模块、收藏表模块、商品分类模块、热卖商品模块、活动公告模块、留言反馈模块、理发师模块、会员卡模块、会员充值模块、会员模块、服务预约模块、服务项目模块、服务类别模块、热卖商品评论表模块、服务项目评论表模块、订单信息模块、配置文件模块。为项目

操作系统期末复习笔记

文章目录操作系统第1章计算机系统概述1指令执行的基本指令周期2中断分类与中断处理过程2.1中断的定义2.2中断分类2.3中断的意义2.4无中断2.5有中断2.6中断和指令周期2.7中断处理的过程3处理多中断的两种方法3.1顺序中断处理(禁止中断)3.2嵌套中断处理4存储器4.1存储器层次层次结构的特点4.2二级存储器(

语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)

文章目录一、语义分割介绍1.1语义分割和实例分割的区别1.2DeepLab系列对比二、代码下载2.1代码测试2.2视频学习三、数据集准备3.1Json转png3.2数据集划分四、模型训练五、模型测试六、模型评估一、语义分割介绍语义分割是计算机视觉中的一项技术,旨在将图像中的每个像素分配给特定的类别。它与目标检测不同,目

【map、set的封装】

目录前言一、map、set的框架搭建二、map、set的迭代器的封装2.1、map、set的迭代器的初步封装2.2、map、set的const迭代器的封装2.2.1、set的const迭代器的封装2.2.2、map的const迭代器的封装三、operator[]四、代码实现前言本文的代码是基于前一篇文章的红黑树的代码来

vue类与样式的绑定&&列表渲染

目录1.类与样式的绑定1.1绑定HTMLclass1.2绑定数组1.3绑定内联样式绑定数组2.列表渲染2.1v-for​2.2v-for与对象2.3在v-for里使用范围值​1.类与样式的绑定1.1绑定HTMLclass我们可以给:class(v-bind:class的缩写)传递一个对象来动态切换class:<div:

java操作es集群模糊查询等

首先引入依赖<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.13</version></dependency

linux安装配置 flume

目录一解压安装包二配置部署(1)修改配置(2)下载工具(3)创建配置文件(4)启动监听测试(5)flume监控文件一解压安装包这里提供了网盘资源链接:https://pan.baidu.com/s/1Z0aItCHMybYpXkt3_RUaVw?pwd=s6pg提取码:s6pg这里安装包是放到/opt/install文

Java中List转字符串的方法

一、使用String.join方法在Java8之后,String类增加了一个静态方法join(),可以方便地将列表中的元素连接成字符串。//创建ListList<String>list=Arrays.asList("Google","Baidu","Taobao");//以逗号分隔的形式输出整个列表Stringresu

微服务保护

1.初识Sentinel1.1.雪崩问题及解决方案1.雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则t

在c#中使用CancellationToken取消任务

目录🚀介绍:🐤简单举例🚀IsCancellationRequested🚀ThrowIfCancellationRequested🐤在控制器中使用🚀通过异步方法的参数使用cancellationToken🚀api结合ThrowIfCancellationRequested()🚀介绍:Cancellatio

热文推荐