原标题:linux可用内存足够为什么还用swap

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

1

[root@localhost ~]# free -m

2

total used free shared buff/cache available

3

Mem: 31768 9809 363 9601 21595 11838

4

Swap: 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

9

Mem: 31768 10853 217 16740 20698 3658

10

Swap: 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

2

60

什么意思呢?

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

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

调整值

1

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

2

vm.swappiness = 10

3

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

4

10

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

1

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

2

vm.swappiness = 10

3

[root@localhost ~]# sysctl -p

题外话

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

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

1

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

2

3

4

# 定义共享内存页数

5

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

1

[root@localhost ~]# getconf PAGESIZE

2

4096

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

1

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

2

共享内存段个数查看:

1

[root@localhost ~]# ipcs -m

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

转载自:http://navo.top/neUb22返回搜狐,查看更多

责任编辑:

linux只能用一半的内存,linux可用内存足够为什么还用swap相关推荐

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

    讨论这个问题前,我们先来看当前系统状态: 1[root@localhost ~]# free -m 2              total        used        free       ...

  2. Android手机总内存和可用内存

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

  3. Android 获取手机总内存和可用内存等信息

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

  4. 台式计算机的8g,win10系统台式机配置8G内存显示可用内存只有3.4G的教程

    win10系统使用久了,好多网友反馈说win10系统台式机配置8G内存显示可用内存只有3.4G的问题,非常不方便.有什么办法可以永久解决win10系统台式机配置8G内存显示可用内存只有3.4G的问题, ...

  5. 获取Android手机总内存和可用内存

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

  6. 已安装内存和可用内存不一致 4GB内存在win1064位系统中显示为可用 3.87GB解决办法

    问题如图:64位系统已经安装了4G内存,却在括号内显示3.87GB可用? 正常情况下如图:仅显示已安装的内存为8G,后面没有括号提示! 实际分析: 排除硬件保留内存寻址可能 Windows 将部分内存 ...

  7. Redis所需内存 超过可用内存怎么办

    爬虫和转载请注明原文地址:博客园蜗牛 http://www.cnblogs.com/tdws/p/5727633.html 我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用 ...

  8. android每个程序的内存大小,如何获取Android手机全部内存和可用内存尺寸

    通过读取文件"/proc/meminfo"的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo(ActivityManager.M ...

  9. 获取Android手机总内存和可用内存最佳方案

    Android手机的内存大小信息存放在手机系统的/proc/meminfo文件中,可以通过读取这个文件来获取内存信息. adb shell查看 通过adb shell命令,进入终端 adb shell ...

最新文章

  1. 在IIS7里配置 ISAPI,运行dll程序,总提示下载dll
  2. yield return的理解
  3. code vs 1026 逃跑的拉尔夫
  4. Linux Man手册的使用示例
  5. 5G是什么?5G能做什么?5G在未来将带来什么?
  6. 大航海北斗星导航系统V1.10
  7. memcpy、strcpy、snprintf的区别
  8. Unity WebGL Input输入中文
  9. 图像处理基础操作一(几何变换、平滑处理、形态学操作)
  10. 微信小程序开发详细步骤是什么?
  11. Tomb Raider(暴力模拟)
  12. ES文件浏览器访问电脑共享文件夹,输入正确的密码、账号,始终在登录界面
  13. 深入理解以太坊 P2P 网络设计
  14. 限期4个月:苹果严控版号,开发者将如何自救?
  15. SpringMVC笔记(4):RESTFul详解
  16. Andriod PDA RFID感应盘点
  17. 《Linux Kernel Development》读书笔记
  18. FEG创始人ROX:SmartDefi将会是整个去中心化金融市场的标杆
  19. 利用百度AI开放平台的语言处理基础技术(Python)
  20. USB3.0/3.1信号完整性分析仿真

热门文章

  1. 反演控制 matlab,基于matlab的反演程序
  2. react dispatch_记 react 项目在 TypeScript 化中的一个坑,以及相应的类型改动
  3. php 分布式 session,浅析PHP分布式中Redis实现Session的方法
  4. 使用opencv和python实现图像的智能处理_机器学习:使用opencv和python进行智能图像处理...
  5. python 在软件自己自动输入-Python模拟百度自动输入搜索功能的实例
  6. C++之指针探究(十二):指针、下标、数组及其作函数参数
  7. java类加载器分类_Java 类加载器的种类
  8. verilog的“==”与“===”
  9. C语言丨比较浮点数的大小
  10. 解封装(六):通过遍历获取AVStream音视频流信息并打印参数