linux 8g内存 swap,linux可用内存足够为什么还用swap

news/2024/11/24 7:56:09/

讨论这个问题前,我们先来看当前系统状态:

1[root@localhost ~]# free -m

2              total        used        free      shared  buff/cache   available

3Mem:          31768        9809         363        9601       21595       11838

4Swap:          8191        8191           0

为什么 buffer/cache 会占用这么多的内存?

buffer/cache使用过高通常是程序频繁存取文件后,物理内存会很快被用光。

当程序结束后,内存不会被正常释放,而是成为cache状态.

通常我们不需要手工释放swap,Linux会自动管理.

如果非要释放,请继续看.

如何释放占用的swap呢?

1## 将内存缓冲区数据立刻同步到磁盘

2[root@localhost ~]# sync

3## 关闭所有的swap

4[root@localhost ~]# swapoff -a

5## 启用所有swap

6[root@localhost ~]# swapon -a

7[root@localhost ~]# free -m

8              total        used        free      shared  buff/cache   available

9Mem:          31768       10853         217       16740       20698        3658

10Swap:          8191           0        8191

那么回到最初的问题:

linux可用内存足够为什么还用swap?

上面可以看到服务器共有32G内存,其中buff/cache占用了21G+.

明明还有可以将近12G的内存可以使用.但系统却偏偏占用完了swap的8G内存.

可知系统并没有自动释放buff/cache最大化利用内存.

原因:

内核参数 swappiness 的值的大小,决定着linux何时开始使用swap。

swappiness=0 时表示尽最大可能的使用物理内存以避免换入到swap.

swappiness=100 时候表示最大限度使用swap分区,并且把内存上的数据及时的换出到swap空间里面.

此值linux的基本默认设置为60,不同发行版可能略微不同.

查看命令具体如下:

1[root@localhost ~]# cat /proc/sys/vm/swappiness

260

什么意思呢?

就是说,你的内存在使用率到40%(100%-60%)的时候,系统就会开始出现有交换分区的使用。

大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。

调整值

1[root@localhost ~]# sysctl vm.swappiness=10

2vm.swappiness = 10

3[root@localhost ~]# cat /proc/sys/vm/swappiness

410

重启依旧生效,需要在/etc/sysctl.conf修改:

1[root@localhost ~]# cat /etc/sysctl.conf

2vm.swappiness = 10

3[root@localhost ~]# sysctl -p

题外话

通常我们还经常看到shared占用大量内存,shared表示共享内存的占用,

起决定参数的两个分别是:

1# 定义单个共享内存段的最大值

2kernel.shmmax = 68719476736

3

4# 定义共享内存页数

5kernel.shmall = 4194304  ##(16G)

当前系统内存页大小查看:

1[root@localhost ~]# getconf  PAGESIZE

24096

当前系统共享内存段大小(bytes):

1[root@localhost ~]# cat /proc/sys/kernel/shmmax

216777216000

共享内存段个数查看:

1[root@localhost ~]# ipcs -m

内存页和内存段是两种不同的内存管理方式,详细了解可以自行谷歌.

63b764cfb98f

学习安排上!


http://www.ppmy.cn/news/819468.html

相关文章

JVM内存调优

在Linux环境下设置Tomcat JVM,在/opt/tomcat/bin/catalina.sh文件中找到"# ----- Execute The Requested Command"位置,设置JVM如下: # ----- Execute The Requested Command ----------------------------------------- JAVA_OPTS…

android手机8g内存够用嘛,8G内存都撑不住,为何安卓杀后台越来越严重,多大内存才够呢?...

安卓系统发展到现在,已经进入到LPDDR5时代,3200MHz频率,内存最大为16GB,究其原因还是因为安卓系统对于硬件的开销太大了,Java虚拟机不仅运行效率低,而且吃内存更是疯狂,安卓党肯定有一个习惯那就…

win7 64位系统更换16G内存条

前不久更换了win7 64位系统 旗舰版 的内存条,由之前的8G 升级为16G。 更换完成后,没有感觉啥变化,打开计算机的属性查看,显示“安装内存16G(6.78GB可用)”。 奇怪看来要修改一下设置啊!&#xf…

C# --- 设置常量 constant, readonly

C# --- 设置常量 constant, readonly 如何设置常量 如何设置常量 constant 用constant修饰的变量, 编译器会在编译时静态的求值. 也就是直接将变量替换成值. constant可以是bool, char, string, 任何内置的数值类型或者枚举类型 public static double Circumference (double r…

Blazor 自定义可重用基础组件之 限制输入日期范围的DateBox

输入日期是一个非常重要的基础组件,可能也需要限定日期范围。这里只对日期进行定义,即设定type"date",其他的不常用,就略去了。DateTime 是一个结构体,像int有为0的初始值一样,它有一个初始值{00…

wordpress 单页中子页面列表制作方法

一、目标&#xff1a; 1、父页面显示所有子页面&#xff0c;如果是子页面就显示子页面对应父页面下的所有子页面。 2、选中的子页面链接显示不一样的样式。 二、代码 <?php$current_page_id get_the_ID(); // 获取当前页面的ID// 判断当前页面是否为父页面$is_parent_…

NBA 本周五将空场复赛,球迷可用微软 Teams 现场互动

By 超神经 内容概要&#xff1a;2019-2020 赛季的 NBA 复赛&#xff0c;将于美东时间 7 月 30 日重启&#xff0c;为了保持社交距离&#xff0c;这次 NBA 做出了诸多调整&#xff0c;并与微软 Teams 达成合作&#xff0c;以为球迷带来了全新的沉浸式观影体验。 关键词&#xff…

淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道

&#xfeff;&#xfeff; 淘宝杨志丰&#xff1a;OceanBase--淘宝结构化大数据解决之道 时至今日&#xff0c;“Big data”&#xff08;大数据&#xff09;时代的来临已经毋庸置疑&#xff0c;尤其是在电信、金融等行业&#xff0c;几乎已经到了“数据就是业务本身”的地步。这…