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 / 问题 / 1357
Accepted
jfoucher
jfoucher
Asked: 2010-08-06 22:43:23 +0800 CST2010-08-06 22:43:23 +0800 CST 2010-08-06 22:43:23 +0800 CST

如果有空闲 RAM,如何清空交换?

  • 772

当我打开一个 RAM 密集型应用程序(VirtualBox 设置为 2GB RAM)时,通常会使用一些交换空间,具体取决于我当时打开的其他内容。

但是,当我退出最后一个应用程序时,释放了 2GB 的 RAM,但仍然使用相同的交换空间。

例如,现在,在关闭 VirtualBox 大约两个小时后,我有 1.6GB 的可用 RAM,但仍有 770MB 的交换空间。

如何告诉 Ubuntu 停止使用该交换并恢复使用 RAM?

performance swap ram-usage
  • 7 7 个回答
  • 589594 Views

7 个回答

  • Voted
  1. SpamapS
    2010-08-06T22:47:50+08:002010-08-06T22:47:50+08:00

    Ubuntu 底层的 Linux 内核会根据需要自动将这些页面从磁盘“交换”到 RAM,所以总的来说,我会说让它自然发生。

    但是,如果你真的觉得你需要强制它,(我可以看到你想知道系统稍后会响应的场景)你可以暂时禁用并重新启用交换

    sudo swapoff -a
    sudo swapon -a
    

    或者作为单行

    sudo swapoff -a; sudo swapon -a
    

    这样做时要小心,因为您可能会使您的系统不稳定,特别是如果它的 RAM 已经很低。确保您的系统中有足够的空闲 RAM,否则您可能无法释放交换空间,OOM-Killer 最终会杀死您的一些进程。

    请注意,这swapoff可能需要一段时间。如果您有很多交换要交换,则尤其如此。

    • 637
  2. Best Answer
    popey
    2010-08-07T02:04:59+08:002010-08-07T02:04:59+08:00

    仅仅因为交换已分配,并不意味着它正在被“使用”。虽然系统监视器和顶部等程序会显示一些正在分配的交换空间(在您的示例中为 770MB),但这并不意味着系统正在主动换入/换出。

    要确定是否有任何东西正在换入/换出,您可以使用该vmstat命令。让它运行几秒钟以安定下来并观察si(swapin) 和so(swapout) 列。如果什么都没有发生,那么就没有理由担心。

    这是 running 的输出vmstat 1,您可以在其中看到我的机器根本没有交换。

    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
     0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
     0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
     0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
     1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
     5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
     0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
     0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0
    

    然而在这里top你可以看到我分配了交换空间:-

    Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
    Swap:   491512k total,    78588k used,   412924k free,    72476k cached
    
    • 214
  3. Elijah Lynn
    2012-06-12T06:10:25+08:002012-06-12T06:10:25+08:00

    您还可以将“swappiness”值设置为默认值 60,这样一开始交换就不会变得如此之大。当推荐值为 10 时,为什么运费默认设置为 60 让我感到困惑。来自 Ubuntu SwapFAQ:

    Ubuntu 中的默认设置是 swappiness=60。降低 swappiness 的默认值可能会提高典型 Ubuntu 桌面安装的整体性能。建议使用 swappiness=10 的值,但请随意尝试。

    通过将此值更改为 10 甚至 0,您可以为具有慢速驱动器的旧系统添加显着且可感知的速度提升。将此值设置为 0 不会关闭 Linux 内核 3.4 及更低版本的交换功能,但对于 3.5+ 版本会关闭,因此如果您想将其保持在最低设置*,您将需要使用值 1*。

    我认为没有理由不将其设置为 0,因为任何撞击磁盘的东西都比 RAM 慢。我有 8 个虚拟内核、一个快速 SSD 和 8 GB 内存,我的交换设置为 0。到目前为止,我有 3 个虚拟机正在运行,我的内存使用量是 7.1 GB 的 7.7 GB,我使用的交换空间只有 576KB 952MB,所有系统运行流畅!

    来自 Ubuntu SwapFAQ:

    swappiness 参数控制内核将进程移出物理内存并移至交换磁盘的趋势。由于磁盘比 RAM 慢得多,如果进程过于激进地移出内存,这可能会导致系统和应用程序的响应时间变慢。

    1. swappiness 的值可以在 0 到 100 之间
    2. swappiness=0 告诉内核尽可能长时间地避免将进程交换出物理内存
    3. swappiness=100 告诉内核积极地将进程交换出物理内存并将它们移动到交换缓存

    以下是检查swappiness,清空swappiness并将swappiness更改为0的基本说明:

    检查swappiness值:

    cat /proc/sys/vm/swappiness
    

    临时将交换设置为 0(如 SpamapS 建议的那样):

    这将清空您的交换并将所有交换转移回内存。首先通过查看 gnome-system-monitor 的资源选项卡确保您有足够的可用内存,您的可用内存应该大于您使用的交换空间。这个过程可能需要一段时间,使用 gnome-system-monitor 来监控和验证进度。

    sudo swapoff --all
    

    要将新值设置为 0:

    sudo sysctl vm.swappiness=0 
    

    要重新打开交换:

    sudo swapon --all
    

    要将swappiness永久设置为0:

    1. sudoedit /etc/sysctl.conf
    2. 添加这一行vm.swappiness = 0
    3. sudo shutdown -r now#重启系统

    * 对于内核版本 3.5+,将 swappiness 设置为 0 确实会完全关闭它,如果您想要最低的 swappiness 算法,建议设置为 1。来源:https ://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

    • 176
  4. Scott Severance
    2011-12-26T08:35:45+08:002011-12-26T08:35:45+08:00

    我发现清空交换对磁盘速度慢且 RAM 有限的系统有很大帮助。当然,如前所述,执行此操作的方法是运行sudo swapoff -a; sudo swapon -a. 这里的问题是,如果内存不足,这样做会导致各种问题。

    我写了一个脚本,我称之为toggle_swap过去几年对我有用的脚本。它在实际禁用交换之前检查是否有足够的可用 RAM。这里是:

    #!/bin/bash
    
    free_data="$(free)"
    mem_data="$(echo "$free_data" | grep 'Mem:')"
    free_mem="$(echo "$mem_data" | awk '{print $4}')"
    buffers="$(echo "$mem_data" | awk '{print $6}')"
    cache="$(echo "$mem_data" | awk '{print $7}')"
    total_free=$((free_mem + buffers + cache))
    used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"
    
    echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
    if [[ $used_swap -eq 0 ]]; then
        echo "Congratulations! No swap is in use."
    elif [[ $used_swap -lt $total_free ]]; then
        echo "Freeing swap..."
        sudo swapoff -a
        sudo swapon -a
    else
        echo "Not enough free memory. Exiting."
        exit 1
    fi
    
    • 57
  5. Erigami
    2010-08-07T08:34:51+08:002010-08-07T08:34:51+08:00

    在与swappiness 混了几天之后,我得出的结论是内核应该留给自己的设备。它知道自己在做什么,并且经过优化,可以为您提供最佳体验。

    除非您有一个非常好的理由想要该磁盘回来,否则我会保留它。

    • 26
  6. Omid Ghayour
    2022-05-07T08:48:43+08:002022-05-07T08:48:43+08:00

    通过恢复swappiness,告诉vm不要那么swappy,通过

    sudo sysctl vm.swappiness=10
    

    甚至不尽可能地交换

    sudo sysctl vm.swappiness=0
    

    请在此处阅读交换文件的文档: https ://help.ubuntu.com/community/SwapFaq

    • 0
  7. Amandasaurus
    2010-08-12T11:35:09+08:002010-08-12T11:35:09+08:00

    如果您的交换空间被占用,它不会影响性能。唯一的性能损失是东西进入/退出交换。如果没有任何东西被换入/换出,那么您不必担心任何事情。

    • -3

相关问题

  • 为什么 Flash 应用程序如此缓慢/崩溃?

  • 上网本版电池寿命 - Ubuntu 与 Kubuntu?

  • 如果在服务器机器上运行 Ubuntu 桌面版,性能损失是多少?

Sidebar

Stats

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

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

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

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

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

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +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
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +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