linux只能用一半的内存,linux可用内存足够为什么还用swap
原标题: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相关推荐
- linux 8g内存 swap,linux可用内存足够为什么还用swap
讨论这个问题前,我们先来看当前系统状态: 1[root@localhost ~]# free -m 2 total used free ...
- Android手机总内存和可用内存
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...
- Android 获取手机总内存和可用内存等信息
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...
- 台式计算机的8g,win10系统台式机配置8G内存显示可用内存只有3.4G的教程
win10系统使用久了,好多网友反馈说win10系统台式机配置8G内存显示可用内存只有3.4G的问题,非常不方便.有什么办法可以永久解决win10系统台式机配置8G内存显示可用内存只有3.4G的问题, ...
- 获取Android手机总内存和可用内存
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...
- 已安装内存和可用内存不一致 4GB内存在win1064位系统中显示为可用 3.87GB解决办法
问题如图:64位系统已经安装了4G内存,却在括号内显示3.87GB可用? 正常情况下如图:仅显示已安装的内存为8G,后面没有括号提示! 实际分析: 排除硬件保留内存寻址可能 Windows 将部分内存 ...
- Redis所需内存 超过可用内存怎么办
爬虫和转载请注明原文地址:博客园蜗牛 http://www.cnblogs.com/tdws/p/5727633.html 我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用 ...
- android每个程序的内存大小,如何获取Android手机全部内存和可用内存尺寸
通过读取文件"/proc/meminfo"的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo(ActivityManager.M ...
- 获取Android手机总内存和可用内存最佳方案
Android手机的内存大小信息存放在手机系统的/proc/meminfo文件中,可以通过读取这个文件来获取内存信息. adb shell查看 通过adb shell命令,进入终端 adb shell ...
最新文章
- 在IIS7里配置 ISAPI,运行dll程序,总提示下载dll
- yield return的理解
- code vs 1026 逃跑的拉尔夫
- Linux Man手册的使用示例
- 5G是什么?5G能做什么?5G在未来将带来什么?
- 大航海北斗星导航系统V1.10
- memcpy、strcpy、snprintf的区别
- Unity WebGL Input输入中文
- 图像处理基础操作一(几何变换、平滑处理、形态学操作)
- 微信小程序开发详细步骤是什么?
- Tomb Raider(暴力模拟)
- ES文件浏览器访问电脑共享文件夹,输入正确的密码、账号,始终在登录界面
- 深入理解以太坊 P2P 网络设计
- 限期4个月:苹果严控版号,开发者将如何自救?
- SpringMVC笔记(4):RESTFul详解
- Andriod PDA RFID感应盘点
- 《Linux Kernel Development》读书笔记
- FEG创始人ROX:SmartDefi将会是整个去中心化金融市场的标杆
- 利用百度AI开放平台的语言处理基础技术(Python)
- USB3.0/3.1信号完整性分析仿真
热门文章
- 反演控制 matlab,基于matlab的反演程序
- react dispatch_记 react 项目在 TypeScript 化中的一个坑,以及相应的类型改动
- php 分布式 session,浅析PHP分布式中Redis实现Session的方法
- 使用opencv和python实现图像的智能处理_机器学习:使用opencv和python进行智能图像处理...
- python 在软件自己自动输入-Python模拟百度自动输入搜索功能的实例
- C++之指针探究(十二):指针、下标、数组及其作函数参数
- java类加载器分类_Java 类加载器的种类
- verilog的“==”与“===”
- C语言丨比较浮点数的大小
- 解封装(六):通过遍历获取AVStream音视频流信息并打印参数