青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-
友链 搜索文章 >>

青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-

【云服务器(Ubuntu)配置(折腾)】六、添加内存交换空间以扩展内存


阅读数: 0次    2025-05-20
字数:1.6k字 | 预计阅读时长:7分钟

上一节介绍了一个使用Rust编写的终端复用器Zellij,但是使用Cargo编译安装的时候遇到内存不足导致的报错,根本原因是Zellij是一个比较大的Rust项目,我服务器的4G内存不足以支撑编译。

交换空间(Swap Space)是硬盘上的一块区域,系统可以在内存不足时将一部分内存中的数据临时存放在这里。Linux服务器遇到类似的内存不足问题,可以通过添加内存交换空间以扩展内存。

报错内容

使用Cargo安装Zellij报错:

1
2
3
4
5
6
error: could not compile `zellij` (bin "zellij")

Caused by:
process didn't exit successfully: `/home/xxxxx/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc --crate-name zellij --edition=2021 /home/xxxxx/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/zellij-0.42.2/src/main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=104 --crate-type bin --emit=dep-info,link -C opt-level=3 -C lto --cfg 'feature="default"' --cfg 'feature="plugins_from_target"' --cfg 'feature="vendored_curl"' --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values("default", "disable_automatic_asset_installation", "plugins_from_target", "singlepass", "unstable", "vendored_curl"))' -C metadata=d474023b46e8fa28 -C extra-filename=-54b45d1e994f13ff --out-dir /tmp/cargo-installpCtv9O/release/deps -C strip=symbols -L dependency=/tmp/cargo-installpCtv9O/release/deps --extern anyhow=/tmp/cargo-installpCtv9O/release/deps/libanyhow-1a894d8343ca7cff.rlib --extern clap=/tmp/cargo-installpCtv9O/release/deps/libclap-c928873c46d853bd.rlib --extern dialoguer=/tmp/cargo-installpCtv9O/release/deps/libdialoguer-7c25217b398db8ee.rlib --extern humantime=/tmp/cargo-installpCtv9O/release/deps/libhumantime-3d7bdf6a255e219e.rlib --extern interprocess=/tmp/cargo-installpCtv9O/release/deps/libinterprocess-debd9a755f56da2e.rlib --extern log=/tmp/cargo-installpCtv9O/release/deps/liblog-b5364baca8005eee.rlib --extern miette=/tmp/cargo-installpCtv9O/release/deps/libmiette-55dea6081fdb19d8.rlib --extern names=/tmp/cargo-installpCtv9O/release/deps/libnames-feb28f5ffc06d8f3.rlib --extern nix=/tmp/cargo-installpCtv9O/release/deps/libnix-8b101f13419f0eb5.rlib --extern suggest=/tmp/cargo-installpCtv9O/release/deps/libsuggest-2c1d384f4cba909e.rlib --extern thiserror=/tmp/cargo-installpCtv9O/release/deps/libthiserror-7f6738ac99d62c2b.rlib --extern zellij_client=/tmp/cargo-installpCtv9O/release/deps/libzellij_client-843802197d6006e2.rlib --extern zellij_server=/tmp/cargo-installpCtv9O/release/deps/libzellij_server-9a8c67863005a698.rlib --extern zellij_utils=/tmp/cargo-installpCtv9O/release/deps/libzellij_utils-bacf40cab9faa6a7.rlib --cap-lints allow -L native=/tmp/cargo-installpCtv9O/release/build/curl-sys-39b61eb757e0a4e2/out/build -L native=/tmp/cargo-installpCtv9O/release/build/libnghttp2-sys-8b99d62cbf22c6ba/out/i/lib -L native=/tmp/cargo-installpCtv9O/release/build/openssl-sys-97ba4e6b9b0e4b73/out/openssl-build/install/lib -L native=/tmp/cargo-installpCtv9O/release/build/wasmtime-7d6791bc55365256/out` (signal: 9, SIGKILL: kill)
error: failed to compile `zellij v0.42.2`, intermediate artifacts can be found at `/tmp/cargo-installpCtv9O`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

这个报错是因为编译过程被SIGKILL (signal 9)终止了,这通常表示系统内存不足,导致Linux内核的OOM (Out Of Memory) killer终止了编译进程。

Zellij是一个比较大的Rust项目,编译时需要大量内存,特别是使用了-C opt-level=3和LTO优化。

因此需要添加内存交换空间来解决内存不足的问题。

添加交换空间

1. 检查当前交换空间状态

查看当前交换空间使用情况:

1
free -h

查看详细的交换信息:

1
sudo swapon --show

也可以使用htop(类似Windows的任务管理器)来查看系统内存与交换空间使用情况。

如果系统中没有预装,可使用apt直接安装:

1
sudo apt install htop

2. 创建交换文件

创建一个4GB的交换文件(可根据需要调整大小):

1
sudo fallocate -l 4G /swapfile

如果fallocate不可用,可以使用dd命令:

1
sudo dd if=/dev/zero of=/swapfile bs=1G count=4

3. 设置正确的权限

设置只有root可以访问该文件:

1
sudo chmod 600 /swapfile

4. 设置为交换区域

格式化为交换区域:

1
sudo mkswap /swapfile

5. 启用交换文件

启用交换文件:

1
sudo swapon /swapfile

验证交换文件已启用:

1
2
sudo swapon --show
free -h

6. 设置开机自动启用

编辑fstab文件(选择熟悉的编辑器):

1
sudo nvim /etc/fstab

在文件末尾添加以下内容:

1
/swapfile swap swap defaults 0 0

说明:

  • /swapfile - 交换文件的路径
  • swap - 文件系统类型
  • swap - 挂载选项
  • defaults - 使用默认选项
  • 0 - dump值(对交换文件无用,保持为0)
  • 0 - fsck顺序(对交换文件无用,保持为0)

可以通过以下命令测试fstab配置是否正确:

1
sudo mount -a

7. 验证开机自动启用(可选)

重启系统后,运行以下命令验证交换空间是否自动激活:

1
2
sudo swapon --show
free -h

应该看到与之前相同的交换空间配置。

增加交换空间的影响

正面影响

  1. 防止内存不足崩溃:系统内存不足时可以使用交换空间,避免程序因OOM被终止
  2. 支持大型程序:允许运行需要大量内存的程序,如之前尝试编译的Zellij
  3. 休眠支持:足够的交换空间是支持系统休眠功能的前提

负面影响

  1. 性能影响:交换空间使用硬盘,比内存慢几个数量级
    • SSD:交换操作会增加SSD写入次数,可能影响SSD寿命
    • HDD:交换操作会产生磁盘I/O瓶颈,系统可能明显变慢
  2. 存储空间占用:交换文件占用硬盘空间
  3. 过度依赖:过大的交换空间可能导致系统在应该崩溃时保持运行但性能极差

交换空间大小建议

  • 系统RAM < 2GB:交换空间 = RAM大小的2倍
  • 2GB < RAM < 8GB:交换空间 = RAM大小
  • RAM > 8GB:交换空间 = 至少4GB(或根据需要)
  • 需要支持休眠:交换空间 ≥ RAM大小

删除交换文件

1. 检查当前交换空间配置

首先,确认系统上的交换空间配置:

查看当前交换空间:

1
sudo swapon --show

查看系统内存和交换使用情况:

1
free -h

查看交换文件在fstab中的配置:

1
grep -i swap /etc/fstab

2. 删除交换文件

确认使用的交换文件名(如/swapfile):

停用交换文件:

1
sudo swapoff /swapfile

确认交换空间已被停用:

1
free -h

3. 移除开机自动挂载配置

编辑fstab文件(选择熟悉的编辑器):

1
sudo nvim /etc/fstab

找到并删除或注释掉类似下面的行:

1
/swapfile swap swap defaults 0 0

4. 删除交换文件

删除交换文件:

1
sudo rm /swapfile

5. 如果是交换分区而非交换文件

如果使用的是交换分区(如/dev/sda2):

1
2
3
4
5
6
7
8
# 停用交换分区
sudo swapoff /dev/sdXY # 替换为实际的分区

# 从 fstab 中移除相关条目
sudo nano /etc/fstab # 删除或注释掉相关行

# 可选:将分区重新格式化为其他文件系统
# sudo mkfs.ext4 /dev/sdXY

6. 更新系统配置

1
2
3
4
5
# 更新 initramfs(某些系统需要)
sudo update-initramfs -u

# 重启系统确认更改
sudo reboot
本文来源: 青江的个人站
本文链接: https://hanqingjiang.com/2025/05/20/250520_server_memorySwapSpace/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
知识共享许可协议
赏

谢谢你请我喝可乐~

支付宝
微信
  • Linux
  • Server

扫一扫,分享到微信

微信分享二维码
Vivado中的增量编译与设计锁定
  1. 1. 报错内容
  2. 2. 添加交换空间
    1. 2.1. 1. 检查当前交换空间状态
    2. 2.2. 2. 创建交换文件
    3. 2.3. 3. 设置正确的权限
    4. 2.4. 4. 设置为交换区域
    5. 2.5. 5. 启用交换文件
    6. 2.6. 6. 设置开机自动启用
    7. 2.7. 7. 验证开机自动启用(可选)
    8. 2.8. 增加交换空间的影响
      1. 2.8.1. 正面影响
      2. 2.8.2. 负面影响
    9. 2.9. 交换空间大小建议
  3. 3. 删除交换文件
    1. 3.1. 1. 检查当前交换空间配置
    2. 3.2. 2. 删除交换文件
    3. 3.3. 3. 移除开机自动挂载配置
    4. 3.4. 4. 删除交换文件
    5. 3.5. 5. 如果是交换分区而非交换文件
    6. 3.6. 6. 更新系统配置
© 2021-2025 青江的个人站
晋ICP备2024051277号-1
powered by Hexo & Yilia
  • 友链
  • 搜索文章 >>

tag:

  • 生日快乐🎂
  • 新年快乐!
  • 小技巧
  • Linux
  • 命令
  • 语录
  • 复刻
  • Blog
  • Notes
  • Android
  • C
  • FPGA
  • Homework
  • MATLAB
  • Server
  • Vivado

  • 引路人-稚晖
  • Bilibili-稚晖君
  • 超有趣讲师-Frank
  • Bilibili-Frank