Linux内存不够了?看看如何开启虚拟内存增加内存使用量
1、为什么要使用虚拟内存
当我们没有多余的钱去购买大内存的云服务器时,但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点,考虑好利弊后在开启虚拟内存。
2、什么是虚拟内存
虚拟内存是一种将部分物理内存扩展到磁盘空间的技术,以提供更大的内存空间和更好的系统性能。虚拟内存允许系统在物理内存不足时,将不常用的内存页转移到磁盘上,从而释放物理内存供活跃的进程使用。
使用虚拟内存的优点:
-
增加可用内存: 虚拟内存允许系统在物理内存不足时将部分内存数据存储到磁盘上,从而扩展了系统可用的内存空间。这样,即使系统的物理内存已经用尽,
仍然可以继续运行应用程序,避免了因内存不足而导致的系统崩溃或应用程序崩溃。
-
提高系统稳定性:虚拟内存可以防止系统因内存不足而崩溃。当物理内存不足时,Linux会将部分不活跃的内存页交换到交换空间中,从而释放物理内存供活跃的进程使用,提高了系统的稳定性和可靠性。
-
支持大型程序运行: 对于需要大量内存的应用程序,如数据库服务器或大型数据处理应用,虚拟内存可以提供额外的内存空间,使其能够在物理内存有限的情况下继续运行。
-
灵活管理内存:虚拟内存允许系统管理员根据实际需求动态调整交换空间的大小。通过调整交换空间的大小,可以根据系统的负载情况和应用程序的内存需求来优化系统的性能和稳定性。
-
提高系统响应速度:虚拟内存可以减少因内存不足而导致的系统响应速度下降的情况。当系统使用虚拟内存时,虽然会增加磁盘 I/O 操作,但可以保持系统运行,并在内存资源再次可用时恢复正常操作。
使用虚拟内存的弊端:
- 性能影响: 虚拟内存的使用可能会导致系统性能下降。当系统内存不足时,操作系统会将部分内存数据交换到磁盘上的交换空间中,这涉及到频繁的磁盘读写操作,会增加系统的响应时间和延迟。
- 磁盘空间消耗: 交换空间占用磁盘空间,可能会导致磁盘空间不足的问题,特别是在磁盘本身就比较小的情况下。
- SSD 磨损: 如果交换空间设置在 SSD 上,频繁的写入操作可能会加速 SSD 的磨损,缩短其寿命。
- 应用程序性能下降:当系统使用虚拟内存时,应用程序可能会因为频繁的磁盘读写而性能下降,尤其是对于需要大量内存的应用程序。
- 系统稳定性: 如果交换空间设置不当或者交换空间不足,可能会导致系统稳定性问题,如系统死锁或应用程序崩溃。
总的来说,虚拟内存的使用可以提高系统的稳定性、可用性和性能,使系统能够更好地应对变化的工作负载和内存需求。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点。在某些情况下,可能需要调整交换空间的大小或者考虑其他内存管理策略来优化系统性能。
3、物理内存
物理内存是用于存储正在运行的程序和数据的地方,读写速度低于CPU,但是高于磁盘。当应用程序需要使用内存时,它会向操作系统请求内存分配。操作系统会将需要的数据载入物理内存中,并管理内存的分配和释放。当物理内存不足时,系统将部分数据从物理内存交换到磁盘上的交换区(Swap),这样可以释放物理内存,以便给其他进程使用。将数据交换到Swap会导致性能下降。因此系统管理员和开发人员最好要合理规划和管理物理内存,确保系统具有足够的内存来运行应用程序和提供良好的性能。
4、Swap介绍
Swap是Linux系统中的一种虚拟内存技术,用于辅助物理内存(RAM)的管理。当物理内存不足时,Swap提供了一种将部分内存内容交换到硬盘上的方法,以释放物理内存供其他进程使用。当物理内存不够的时候,会把不活跃的进程暂时存储到交换区。当需要这条进程时就从交换区重新加载到内存,否则它不会主动交换到物理内存中。swap有三种交换方式:交换分区(Swap Partition)、交换文件(Swap File)、交换空间(Swap Space)。
swap相关使用命令:
显示当前启用的交换分区和交换文件的摘要信息,包括路径、大小和使用情况:
swapon -s
swapon -show
启用指定的交换分区或交换文件:
swapon /opt/swapfile # 启用交换文件
swapon /dev/vda1 # 启用交换分区
创建交换分区或交换文件:
mkswap swapdata
关闭正在使用的交换分区或交换文件
swapoff /opt/swapfile # 关闭交换文件
swapoff /dev/vda1 # 关闭交换分区
多个swap设置优先级, 优先级相同将同时使用, 在0到32767中间选一个数字
swapon -p 0 /opt/swapfile # 交换文件路径
5、虚拟内存设置
通过设置交换文件设置虚拟内存。
5.1、查看可用磁盘空间
df -h
5.2、 使用 dd
工具来创建一个交换文件
dd if=/dev/zero of=/opt/swapdata bs=1024 count=16777216
参数说明:
dd
:dd
用来创建交换文件。if=/dev/zero
:if
参数表示输入文件(input file)的路径。/dev/zero`是一个特殊设备文件,它会提供一系列的零字节。of=/opt/swapdata
:of
参数表示输出文件(output file)的路径。指定了交换文件的路径为/opt/swapdata
。选择其他路径和文件名。bs=1024
:bs
参数表示块大小(block size),指定dd
命令一次传输的数据块大小为1024字节(即1KB)。根据需求进行调整。count=16777216
:创建一个16GB大小的交换文件。与bs
参数相乘,即16GB = 1024 * 1024 * 16 可以根据需要调整此参数来大小
创建成功在/opt目录生成一个swapdata文件
5.3、 设置交换文件的权限为只有 root 用户能读写:
chown root:root /opt/swapdata # 交换文件的所有者和所属组
chmod 600 /opt/swapdata #只有root用户能读写
5.4、 创建文件类型设置为交换文件
mkswap /opt/swapdata # 交换文件路径
5.5、激活文件:指定的交换文件
swapon /opt/swapdata
激活成功后就可以使用 swapon -s
查看交换文件的摘要信息了
5.6、机器重启的时候自动挂载Swap
# 进入/etc/fstab文件进行修改。
vim /etc/fstab
#末尾追加
/opt/swapdata swap swap defaults 0 0
5.7、配置swap分区的使用机制
对于使用多大比例内存之后开始使用swap,在系统配置文件中可以通过调整参数进行修改。查看比例信息:
cat /proc/sys/vm/swappiness
该参数范围为0-100。0 就是最大限度使用内存,尽量不使用swap。100是积极使用swap。越高越会使用swap分区。重新配置值:
sysctl vm.swappiness=30
如需永久配置:
echo "vm.swappiness = 30" >> /etc/sysctl.conf
5.8、 查看使用情况
通过 free -h
命令查看内存使用情况。
6、关闭虚拟内存
关闭 swap 文件
swapoff /opt/swapdata
删除swap分区文件
rm -rf /opt/swapdata
删除fstab文件里追加的swap分区开机自动挂载配置内容
/opt/swapdata swap swap defaults 0 0