文章目录
死机原因
首要原因就是内存打满,vscode-server占比很大
交换区介绍
是什么
交换区(Swap Space)是Linux系统中的一种存储区域,主要用于当物理内存(RAM)不足时,将部分不活跃的内存数据临时转移到磁盘上,从而释放物理内存供其他程序使用。
作用
- 缓解内存不足:当物理内存被程序占满时,系统会把暂时不用的内存数据移到交换区,避免程序因内存不足而崩溃。
- 支持休眠功能:系统休眠时,会将内存中的所有数据写入交换区,唤醒时再从交换区恢复,以此实现休眠状态的保存与恢复。
类比理解
可以把物理内存想象成"桌面",交换区就是"抽屉"。当桌面放不下东西时,就把暂时不用的物品放到抽屉里,需要时再拿出来,以此扩展"可用空间"。
原理
交换区的工作原理主要围绕内存页的换入(Swapping In)和换出(Swapping Out) 机制展开,具体过程如下:
1. 内存页的换出(当物理内存不足时)
- 系统会识别出不活跃的内存页(即长时间未被程序访问的数据块,Linux以"页"为内存管理单位,通常一页为4KB)。
- 把这些不活跃的内存页从物理内存中"转移"到交换区(磁盘空间),从而释放物理内存,供当前活跃的程序使用。
2. 内存页的换入(当程序需要访问被换出的内存时)
- 若程序需要访问之前被换出到交换区的内存页,系统会先在物理内存中找一块空闲区域。
- 然后将交换区中对应的内存页"读回"物理内存,程序即可继续访问该数据。
补充说明
- 系统会通过算法智能判断哪些内存页该换出,例如基于"最近最少使用(LRU)"原则,优先换出长时间未被访问的内存页。
- 交换区的性能远低于物理内存(磁盘速度比内存慢很多),因此过度依赖交换区会导致系统响应变慢,即出现"交换颠簸(Swap Thrashing)"。
开启交换区
- 创建一个用作交换空间的文件
bash
sudo fallocate -l 8G /swapfile
# 或者
# bs=1M表示1兆,count=2048表示2048兆=2G
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
- 设置文件的权限
交换文件应该具有合适的权限以供系统使用
bash
sudo chmod 600 /swapfile
- 将文件格式化为交换空间
bash
sudo mkswap /swapfile
- 启用交换空间
bash
sudo swapon /swapfile
- 设置交换空间的启动顺序
为了在系统重启后自动启用交换空间,需要将交换文件的信息添加到/etc/fstab文件中
bash
sudo echo '/swapfile none swap sw 0 0' >> /etc/fstab
- 查看虚存情况。
bash
free -h
修改交换阈值
交换阈值是什么
系统通过swappiness参数控制交换区的使用倾向,默认值通常为 0-60(不同发行版略有差异)。
swappiness数值越低,系统越倾向于使用物理内存;数值越高,越容易使用交换区。默认值下,只有当物理内存的 "空闲内存 + 可回收内存" 不足时,才会开始使用交换区。
查看交换阈值
可以使用以下两种方法查看当前系统的swappiness值:
- 使用
cat命令 :通过cat命令直接读取/proc/sys/vm/swappiness文件的内容,该文件存储了当前系统的swappiness值。 - 使用
sysctl命令 :使用sysctl命令也可以查看swappiness值,在终端中输入sysctl vm.swappiness,按下回车键。
修改交换阈值
swappiness可以修改,且支持临时生效 和永久生效两种方式,核心是通过调整参数值改变系统使用交换区的倾向。
一、修改方法
1. 临时修改(重启后失效)
-
执行命令直接调整数值(以改为10为例,数值范围0-100):
bashsudo sysctl vm.swappiness=10 -
作用:立即生效,适合临时测试不同参数的效果。
2. 永久修改(重启后仍有效)
-
编辑系统配置文件
/etc/sysctl.conf:bashsudo nano /etc/sysctl.conf -
在文件末尾添加或修改以下行(数值根据需求调整):
bashvm.swappiness=10 -
保存文件后,执行命令使配置生效:
bashsudo sysctl -p
二、参数值的含义
- 数值范围:0-100,数值越高,系统越倾向于使用交换区。
- 0:尽可能不使用交换区,仅在物理内存完全耗尽时才触发交换。
- 10-30:适合内存较大的系统,减少交换区使用,提升性能。
- 60:默认值(多数发行版),平衡物理内存和交换区使用。
- 80-100:倾向于频繁使用交换区,适合内存较小的系统。
三、注意事项
- 调整后无需重启系统,永久修改执行
sysctl -p即可生效。 - 建议根据内存大小调整:内存≥8GB时,可设为10-20;内存≤4GB时,可设为40-60。
- 若需恢复默认值,只需将
vm.swappiness改回对应发行版的默认数值(如Ubuntu默认60),或删除配置文件中的对应行后执行sysctl -p。