# 内存还剩余很多,却使用 swap 分区
## 原因
今天早上 AI 部门工程师来找我说,你会给 ubuntu 设置 swap 分区吗,我们机器内存好像不咋够用了,给我搞个 swap 分区吧!我说好的,这么简单分分钟钟的事情,我三下五除二的就给他搞定了,给他说好了,你用吧,但是过一会他就跑来说,你给我弄好 swap 分区之后这台机器就特别特别卡,你能帮我看看什么问题吗?
## 排查
我登录到机器上,查看机器内存`free -h`结果如下图
![](https://ask.qcloudimg.com/http-save/2114712/3sh8u6xfwj.png?imageView2/2/w/1620)
image-20200618110616351
从结果可以看出来,机器在内存还剩 148G 但是 swap 分区却完全被使用完了,这说明我给他创建好 swap 分区之后完全他完全不使用内存了,这是什么情况,查阅资料得到如下解决办法
## 解决问题
swappiness的值的大小对如何使用swap分区是有着很大的联系的。
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
**当该参数= 0**,表示只要有可能就尽力避免交换进程移出物理内存; 该 **参数=100**,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。
这个值只是一个Linux在判断是否交换内存(swap)的一个“**倾向**”参考值,而并不是说,设置为0以后,Linux就完全不会使用内存交换空间
然后 ubuntu 和 centos 一般默认都是 60 ,就是当内存使用=(100%-60%)\*内存总量
~~~js
cat /proc/sys/vm/swappiness
60
~~~
复制
所以才会出现我们上面那种情况,这个时候我们只需要调整这个值即可,
~~~js
sysctl vm.swappiness=10 #临时修改
echo "vm.swappiness=10" >> /etc/sysctl.conf #永久修改
sysctl -p #生效
~~~
复制
改完之后就会使用物理内存了,刚才卡的情况也解决了
- linux基础篇
- 开机启动流程
- 软件包管理
- 系统服务管理
- systemd
- NFS SSH TFTP搭建
- vim使用
- shell基本功能和基本概念
- linux 常用命令使用
- linux管理篇
- 用户管理和密码管理
- 文件系统管理
- git使用
- Git大全
- 网卡网桥管理
- 网络管理与应用
- linux下以其他用户身份执行命令
- iptables
- docker
- linux下获取程序路径
- shell自动输入密码
- swap创建
- timedatectl
- startup application
- iproute2
- nginx开发
- Mosquitto
- linux编程基础篇
- shell编程
- gcc编译器
- cmake
- cmake基础
- vscode cmake cpack
- cmake gtest
- vscode camke tools
- ros gtest
- Makefile
- linux系统编程
- system获取返回值
- 常用头文件和功能
- linux网络编程
- can socket编程
- linux can文档
- linux系统调用函数
- 定时器
- 进程组,会话,作业
- linux优化
- 常用工具
- 尽量不使用swap