荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 1952|回复: 0

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

[复制链接]

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
发表于 2019-7-22 12:38 | 显示全部楼层 |阅读模式
http://www.ps-aux.com/linux可用内存足够为什么还使用了swap.html

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

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          31768        9809         363        9601       21595       11838
Swap:          8191        8191           0
为什么 buffer/cache 会占用这么多的内存?
buffer/cache使用过高通常是程序频繁存取文件后,物理内存会很快被用光,
当程序结束后,内存不会被正常释放,而是成为cache状态.
通常我们不需要手工释放swap,Linux会自动管理.
如果非要释放,请继续看.

如何释放占用的swap呢?
## 将内存缓冲区数据立刻同步到磁盘
[root@localhost ~]# sync
## 关闭所有的swap
[root@localhost ~]# swapoff -a
## 启用所有swap
[root@localhost ~]# swapon -a
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          31768       10853         217       16740       20698        3658
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,不同发行版可能略微不同.
查看命令具体如下:

[root@localhost ~]# cat /proc/sys/vm/swappiness
60
什么意思呢?
就是说,你的内存在使用率到40%(100%-60%)的时候,系统就会开始出现有交换分区的使用。
大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。

调整值
[root@localhost ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@localhost ~]# cat /proc/sys/vm/swappiness
10
重启依旧生效,需要在/etc/sysctl.conf修改:

[root@localhost ~]# cat /etc/sysctl.conf
vm.swappiness = 10
[root@localhost ~]# sysctl -p
题外话
通常我们还经常看到shared占用大量内存,shared表示共享内存的占用,
起决定参数的两个分别是:

# 定义单个共享内存段的最大值
kernel.shmmax = 68719476736   
# 定义共享内存页数
kernel.shmall = 4194304  ##(16G)
当前系统内存页大小查看:

[root@localhost ~]# getconf  PAGESIZE
4096
当前系统共享内存段大小(bytes):

[root@localhost ~]# cat /proc/sys/kernel/shmmax
16777216000
共享内存段个数查看:

[root@localhost ~]# ipcs -m
内存页和内存段是两种不同的内存管理方式,详细了解可以自行谷歌.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-6-18 14:03 , Processed in 0.016050 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表