AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1347219
Accepted
jave.web
jave.web
Asked: 2021-06-22 02:34:42 +0800 CST2021-06-22 02:34:42 +0800 CST 2021-06-22 02:34:42 +0800 CST

如何自动将交换移回 RAM?

  • 772

我最初对 swap(piness) 的问题是它交换得太频繁了(即使是swappiness=1! )。

我还认为 0 会关闭 swappiness - 这是一个误解,
即使你设置了 Swap 仍然有效sudo sysctl -w vm.swappiness=0!:-)
(要永久设置,编辑/etc/sysctl.conf和添加/更新vm.swappiness = 0- 对于 GUI 文本编辑器,我推荐一个“linux notepad”“gedit”,然后你可以这样做sudo gedit /etc/sysctl.conf)

只有在交换0时,它才开始表现得更像人们所期望的那样(从大约 98% 的 RAM 满时开始交换),但是我仍然遇到另一个问题 - 当实际上再次释放足够的 RAM 时,交换不会自动返回到 RAM,甚至随着时间的推移。

当然,您可以手动执行sudo swapoff -a; sudo swapon -a每次关闭交换,最终强制交换被清空到 RAM,然后交换再次开始。

然而,这并不方便,原因有两个 a) 交换会暂时关闭 b) 这是手动的额外检查/运行

有没有办法自动以某种方式实现这一点,最好是“本地” ?

20.04
  • 2 2 个回答
  • 865 Views

2 个回答

  • Voted
  1. vanadium
    2021-06-22T06:55:45+08:002021-06-22T06:55:45+08:00

    Afaik,没有可用的设置来改变将交换页面返回到 RAM 的趋势。如果您愿意,您可以使用检查 RAM 和 SWAP 的脚本,并在安全时关闭/重新打开交换。在内存有限的系统上,这可能永远不会:清除交换内存的唯一选择是关闭拥有它们的进程。

    目前尚不清楚在可能的情况下立即将 SWAP 移回 RAM 有什么好处。Linux 自动管理交换。如果它没有释放占用的交换空间,那是因为交换的内存是不需要的,因此可以愉快地保留在磁盘上,直到需要为止。这样,内存和处理器时间就可以节省用于重要的应用程序的使用。由于交换操作被最小化,您的磁盘得到了保护。

    交换的速度取决于您的swappiness设置,但也取决于您拥有的 RAM 量。您没有提到您拥有的 RAM 数量。根据您的经验,可以假设您的 RAM 很少(可能 2 GB 或更少),或者您正在使用具有异常内存需求的特定应用程序。

    在第一种情况下,您可能需要改变您的计算机使用习惯以解决低 RAM 的限制,直到您可以升级物理 RAM。交换绝不是 RAM 的替代品,它只是一种技巧,可以稍微扩展它并在 RAM 有限的系统上允许更多。

    在第二种情况下,请不要理会它:您的系统表现最佳,更换未使用的 RAM 以将其留给您的内存占用工作。

    • 3
  2. Best Answer
    Raffa
    2021-06-22T07:06:29+08:002021-06-22T07:06:29+08:00

    如果你必须这样做,那么swapoff就是要走的路。您可以通过像这样实现一个 bash 脚本来自动化这个过程:

    #!/bin/bash
    
    sysctl -w vm.swappiness=0
    
    while true
    do
        total_m=$(free | awk '/Mem:/{print $2}')
        free_m=$(free | awk '/Mem:/{print $7}') 
        used_s=$(free | awk '/Swap:/{print $3}')
        total_m_percent=$(("$total_m" / 100))
        free_m_percent=$(("$free_m" / "$total_m_percent"))
        # Deactivate the swap and move pages to RAM if there is enough room in RAM and free RAM is more than 30%
        [ "$used_s" -gt 0 ] && [ "$used_s" -lt "$free_m" ] && [ "$free_m_percent" -gt 30 ] && swapoff -a
        # Activate the swap if the remaining free RAM becomes less than 5%
        [ "$used_s" -eq 0 ] && [ "$free_m_percent" -lt 5 ] && swapon -a
        # Sleep for 10 seconds to avaoid straining the system
        sleep 10
    done
    
    

    运行脚本sudo bash scriptfile.sh或添加systemd服务以在系统启动时自动运行脚本。

    • 1

相关问题

  • 如何在 18.04..20.04 上设置本地通配符 (127.0.0.1) 域解析?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve