linux换页空间,关于 Linux swap 的一切

一个问题

51放假前的时候,一个以前的同事说他们的系统出现 物理空闲内存为 0, swap 分区使用增长,增长到 3G 左右就会引起应用异常退出。但是 JVM 监控看到堆还是有大量空闲空间的。昨天又看到他在朋友圈求助这个问题,决定研究下。

按以前的理解,物理内存不够时,就会把一些不常用的内存页交换到 swap 空间,以释放内存。他碰到物理内存耗尽、swap 空间增长,这是很正常的。只是这些增长的内存干嘛用了。

free -m 命令能只看到物理内存、交换空间各使用了多少,但看不到是每个进程具体用了多少。

还是得靠 top 命令,进入 top 命令的显示界面后,按下 Shift+m 就可以按内存使用排序,如下图:

aa57d639bd55c995b60bdda141fb8a8a.png

假如排在第一的是个 Java 进程,占用了 6G 内存,而JVM配置的最大堆内存是 4G,说明非堆内存(本地内存、线程栈等)占用了 2G。

后面跟那个同事求证,是他们最近上线的一个组件用了 Netty,使用不当导致本地内存泄漏。

关于 swap 的一切

Linux 把物理内存(RAM)分为一块一块,称为 页(page)。

交换是把内存页拷贝到提前配置在硬盘上的空间(称为交换空间)的过程,以释放页的内存。

物理内存和交互空间的组合就是可用的虚拟内存。

交互有两个重大意义:

* 首先,系统需要的内存比物理内存更大时,内核交换出较少使用的页,给当前应用(进程)立即需要的内存。

* 其次,应用启动阶段需要大量页可能只用于初始化,然后就再也没有使用。系统可以交换这些页并释放内存用于给其他进程或磁盘缓存。

交换的负面作用:

* 硬盘比内存慢了数个数量级,内存是以微秒衡量的,硬盘是以毫秒衡量;

* 频繁的交换入、交换出将导致性能瓶颈。

Linux 有两种形式的交换空间:

* 交换分区:硬盘上独立的区域,其他文件不能存放。

* 交换文件:文件系统里的一个特定文件。

查看 swap 空间信息: swapon -s

Filename Type Size Used Priority

/dev/sda5 partition 1046524 54244 -1

如果有两个交换空间且优先级相同,Linux swapping 系统将交换使用这两个空间,这样可以提升性能。

交换空间应该多大?

如果有足够的内存,可以把交换空间禁用了。

对于桌面系统,交换空间大小可以是内存的两倍;

对于服务器,使用小的交换空间(比如是物理内存的一般),要监控交换空间的使用情况,如果需要,升级内存。

欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值