From f1600e09e93e100ec5d47f16443268e0343d5f50 Mon Sep 17 00:00:00 2001 From: Cat Tom Date: Thu, 25 Jul 2024 22:40:30 +0800 Subject: [PATCH] add swap --- ...mpose-Limiting-container-resource-usage.md | 6 +- .../How-to-Add-Swap-Space-on-Ubuntu-2404.md | 214 ++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 docs/tech/How-to-Add-Swap-Space-on-Ubuntu-2404.md diff --git a/docs/tech/Docker-Compose-Limiting-container-resource-usage.md b/docs/tech/Docker-Compose-Limiting-container-resource-usage.md index 65d5f4e..49071f6 100644 --- a/docs/tech/Docker-Compose-Limiting-container-resource-usage.md +++ b/docs/tech/Docker-Compose-Limiting-container-resource-usage.md @@ -35,4 +35,8 @@ services: ```bash docker compose --compatibility up -d -``` \ No newline at end of file +``` + +## 参考 + +[如何在Docker Compose中限制容器的CPU和内存使用?](https://blog.xiaoz.org/archives/18729) \ No newline at end of file diff --git a/docs/tech/How-to-Add-Swap-Space-on-Ubuntu-2404.md b/docs/tech/How-to-Add-Swap-Space-on-Ubuntu-2404.md new file mode 100644 index 0000000..df89bfd --- /dev/null +++ b/docs/tech/How-to-Add-Swap-Space-on-Ubuntu-2404.md @@ -0,0 +1,214 @@ +# 在 Ubuntu 24.04 上添加交换空间 + +## 检查交换内存情况 + +在开始之前,我们可以检查系统是否已经有可用的交换空间。 + +```bash +sudo swapon --show +``` + +``` title="输出" +NAME TYPE SIZE USED PRIO +/swapfile file 8G 135.2M -2 +``` + +如果有类似上述的输出,这意味着系统目前有可用的交换空间。 + +如果没有任何输出,这意味着系统目前没有可用的交换空间。 + +你可以使用 `free` 来验证是否存在活动交换空间: + +```bash +free -h +``` + +``` title="输出" hl_lines="3" + total used free shared buff/cache available +Mem: 1.9Gi 995Mi 95Mi 51Mi 872Mi 724Mi +Swap: 8.0Gi 135Mi 7.9Gi +``` + +从以上输出结果的 `Swap` 行可以看到,系统上已经有可用的交换空间。 + +``` title="输出" hl_lines="3" + total used free shared buff/cache available +Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi +Swap: 0B 0B 0B +``` + +从以上输出结果的 `Swap` 行可以看到,系统上目前没有可用的交换空间。 + +## 创建交换文件 + +我们将在根目录 (/) 下分配一个交换文件,名为 `swapfile`。 + +创建交换文件的最佳方法是使用 `fallocate`。 + +我们将在本指南中创建一个 8G 的交换文件,请根据自己服务器的需要进行调整: + +```bash +sudo fallocate -l 8G /swapfile +``` + +验证一下是否预留了正确的空间: + +```bash +ls -lh /swapfile +``` + +``` title="输出" +-rw-r--r-- 1 root root 8.0G Jul 23 18:33 /swapfile +``` + +## 启用交换文件 + +首先,我们需要锁定文件的权限,只有拥有 root 权限的用户才能读取交换文件的内容。 + +这样,普通用户就无法访问该文件,否则会产生重大安全隐患。 + +```bash +sudo chmod 600 /swapfile +``` + +验证权限更改: + +```bash +ls -lh /swapfile +``` + +``` title="输出" +-rw------- 1 root root 8.0G Jul 23 18:33 /swapfile +``` + +现在,我们可以输入以下命令将刚刚创建的文件标记为交换文件: + +```bash +sudo mkswap /swapfile +``` + +``` title="输出" +Setting up swapspace version 1, size = 8192 MiB (8589934592 bytes) +no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf +``` + +标记交换文件后,我们可以启用交换文件,让我们启用它: + +```bash +sudo swapon /swapfile +``` + +验证交换文件是否可用: + +``` title="输出" +NAME TYPE SIZE USED PRIO +/swapfile file 8G 135.2M -2 +``` + +## 交换文件设置持久化 + +上述操作启用了交换文件,但仅在本次会话有效。 + +我们可以通过在 `/etc/fstab` 文件中添加 swap 记录来使交换文件设置持久化。 + +备份 `/etc/fstab` 文件,以防出错: + +```bash +sudo cp /etc/fstab /etc/fstab.bak +``` + +将 swap 记录添加到 `/etc/fstab` 文件末尾: + +```bash +echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab +``` + +## 调整相关设置 + +添加好交换文件后,我们可以配置一些对系统性能有影响的选项。 + +### 调整 swappiness 属性 + +`swappiness` 参数用于配置系统将数据从内存交换到交换空间的频率。该值介于 0 和 100 之间,代表一个百分比。 + +当值接近 0 时,除非绝对必要,内核不会将数据交换到磁盘上。这将会告诉系统不要过度依赖交换文件,通常会让系统运行得更快。 + +请记住,与交换文件的交互是更耗时的,因为它们比与内存的交互耗时更长,而且会导致性能大幅下降。 + +接近 100 的值会尝试将更多数据放入交换空间,以保持更多可用内存空间。根据应用程序的内存配置文件或服务器的用途,在某些情况下这样做可能更好。 + +我们可以通过以下命令来查看当前的 `swappiness` 值: + +```bash +cat /proc/sys/vm/swappiness +``` + +``` title="输出" +60 +``` + +对于台式机来说,交换性设置为 60 也不错。对于服务器,我建议将其调整接近于 0。 + +我们可以使用 `sysctl` 命令将 `swappiness` 参数设置为不同的值。 + +例如,要将 `swappiness` 参数设置为 10,我们可以输入: + +```bash +sudo sysctl vm.swappiness=10 +``` + +``` title="输出" +vm.swappiness = 10 +``` + +以上设置仅在本次会话有效,因此我们可以在 `/etc/sysctl.conf` 文件中添加这一行,在重启时自动设置该值: + +```bash +sudo nano /etc/sysctl.conf +``` + +在 `/etc/sysctl.conf` 文件底部,您可以添加: + +``` title="/etc/sysctl.conf" +vm.swappiness=10 +``` + +### 调整 cache pressure 设置 + +另一个需要修改的相关值是 `vfs_cache_pressure`。 + +基本上,这是有关文件系统的访问数据。 一般来说,这些数据的查询成本很高,而且请求频率也很高,因此是系统缓存的最佳内容。 + +你可以通过再次查询 `proc` 文件系统来查看当前值: + +```bash +cat /proc/sys/vm/vfs_cache_pressure +``` + +``` title="输出" +100 +``` + +按照目前的配置,我们的系统从缓存中删除 `inode` 信息的速度太快。 + +我们可以将其设置为更保守的值,比如 50,只需输入: + +```bash +sudo sysctl vm.vfs_cache_pressure=50 +``` + +``` title="输出" +vm.vfs_cache_pressure = 50 +``` + +同样,这只对当前会话有效。我们可以将其添加到配置文件中进行更改,就像刚才的设置一样: + +```bash +sudo nano /etc/sysctl.conf +``` + +在 `/etc/sysctl.conf` 文件底部添加: + +``` title="/etc/sysctl.conf" +vm.vfs_cache_pressure=50 +``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 201f639..7bca011 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -82,6 +82,7 @@ nav: - "Git: 覆盖本地修改": tech/Git-overwriting-local-changes.md - "Redmi 4X (santoni)": tech/Redmi4X(santoni).md - "手把手教你备份和还原 Docker 卷": tech/Backup-and-Restore-of-Docker-Volumes-A-Step-by-Step-Guide.md + - "在 Ubuntu 24.04 上添加交换空间": tech/How-to-Add-Swap-Space-on-Ubuntu-2404.md - "Docker Compose: 限制容器的资源使用": tech/Docker-Compose-Limiting-container-resource-usage.md - "创建和管理 Linux 服务器用于身份验证的 SSH 密钥": tech/Creating-and-Managing-SSH-Keys-for-Authentication-on-Linux-Servers.md - "MkDocs 参考": examples/index.md