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
    • 最新
    • 标签
主页 / server / 问题 / 110436
Accepted
kolypto
kolypto
Asked: 2010-02-08 10:24:36 +0800 CST2010-02-08 10:24:36 +0800 CST 2010-02-08 10:24:36 +0800 CST

Linux:如何显式取消所有可能的交换?

  • 772

我推出了一些占用大量内存的东西,现在一切都滞后了很多。我想所有应用程序的内存都已经交换,以便为内存密集型进程腾出一些空间,现在一切都在访问时慢慢返回到 RAM。

有没有办法明确地将所有可能的东西从交换移回 RAM?或者也许不是所有的东西,而只是一些特定的过程数据?

linux memory swap
  • 10 10 个回答
  • 30863 Views

10 个回答

  • Voted
  1. Best Answer
    Douglas Leeder
    2010-02-08T10:38:57+08:002010-02-08T10:38:57+08:00

    我建议在实际使用的东西中允许正常的 Linux 内存控制交换,因为它们已被使用。

    我唯一能想到的就是关闭交换,然后再打开

    sudo swapoff -a
    sudo swapon -a
    

    假设您有足够的备用物理内存来包含交换中的所有内容......

    • 66
  2. sntg
    2010-02-08T10:31:53+08:002010-02-08T10:31:53+08:00

    您可以调整它,将 0 到 100 之间的某个数字回显到/proc/sys/vm/swappiness.

    此控件用于定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。值 0 指示内核在空闲和文件支持的页面数量小于区域中的高水位线之前不启动交换。

    默认值为 60。

    • 14
  3. CarpeNoctem
    2010-02-08T19:25:13+08:002010-02-08T19:25:13+08:00

    Linux 在管理内存方面做得很好,你不应该妨碍它。vm.swappiness 设置(前面提到过)不会妨碍它。以其他方式做事更有可能遇到奇怪的问题。

    你推出了什么让你记忆犹新的东西?可以调吗?如果它没有自己的内存限制指令,您也可以查看 ulimit。

    • 4
  4. 3dinfluence
    2010-02-08T20:23:02+08:002010-02-08T20:23:02+08:00

    从这个问题中复制我的一些答案。

    这样您就可以知道 swappiness 可调参数是如何工作的。这通过告诉VM子系统在映射到进程页表的内存百分比+交换值> 100时查找要交换的页面。因此设置为60将导致系统开始从进程页表中分页出陈旧的页面当它使用超过 40% 的系统内存时。如果你想让你的程序以缓存为代价使用更多内存,你需要降低交换值。

    • 2
  5. Gruic
    2011-07-18T05:33:52+08:002011-07-18T05:33:52+08:00

    如果您的所有应用程序都有可用的内存,则可以将 swappiness 设置为 0,这样就不会换出。例如,qemu-kvm 是 VMM 换出的一个大目标,因为它“看起来”大部分时间都是空闲的。我已经看到 qemu-kvm 内存的 80% 的内存被写入交换。在 qemu-kvm 中运行的 VM 将变得几乎没有响应,因为它们的交换空间用完了(尽管来宾不知道这种情况正在发生)。来宾虚拟机会认为它的性能非常好,尽管实际上它拖得很慢。当我一堆虚拟机“醒来”并开始做事时,即使在具有充足快速内存和磁盘的企业级硬件上,它也可以将平均负载峰值提高到 30 以上。我想这是开箱即用的 qemu-kvm 设计的失败。

    希望这可以帮助某人。

    • 2
  6. Maximus Minimus
    2010-02-08T15:46:24+08:002010-02-08T15:46:24+08:00

    如果您能够重新启动应该执行此操作的系统(并且可能比尝试任何其他解决方案花费的时间要少得多)。

    • 1
  7. Michael Kohne
    2010-02-09T06:18:59+08:002010-02-09T06:18:59+08:00

    我建议不要试图超越内核中的 VM 子系统。您实际上不太可能拥有足够的信息来做出更好的决策。如果你以某种方式强迫它做错事,那么你最终只会让事情变得更慢。

    • 1
  8. jdoss
    2010-02-08T20:02:21+08:002010-02-08T20:02:21+08:00

    进程还在运行吗?打开一个终端,看看您是否可以发现已启动的进程。(ps aux |grep processname 可能会更容易一些)如果它们仍在运行,请使用 kill -9 PID 将它们杀死。小心你杀死的东西。如果您不知道进程是什么,请不要杀死它!此外,发布 free -m 的输出,以便我们查看您是否实际上仍在使用大量交换。

    如果事情仍然运行缓慢,您可能仍然让您启动的任何东西仍在运行。除非你真的知道自己在做什么或者你喜欢生活在边缘,否则我永远不会关闭交换。=)

    • 0
  9. ZarathustrA
    2016-10-14T05:52:45+08:002016-10-14T05:52:45+08:00

    我相信没有任何真正好的方法可以强制 Linux 将数据从磁盘取消交换到内存。当 swapoff/swapon 是一个可行的解决方案,但它很脏并且很容易使您的系统不稳定。对于交换中的数据多于空闲内存的情况,很难想象 Linux 可以采用任何有效的策略来决定哪些数据移入内存以及哪些数据保留在磁盘上。

    总结:只是让Linux以正常的方式逐渐恢复其性能。它的 VM 子系统的组织方式使其努力并不断地移动到某种理想的平衡状态。

    • 0
  10. slm
    2014-04-16T06:45:34+08:002014-04-16T06:45:34+08:00

    清空缓冲区缓存

    如果你想清空它们,你可以使用这个命令链。

    $ free && sync && echo 3 > /proc/sys/vm/drop_caches && free
    
                 total       used       free     shared    buffers     cached
    Mem:       1018916     980832      38084          0      46924     355764
    -/+ buffers/cache:     578144     440772
    Swap:      2064376        128    2064248
                 total       used       free     shared    buffers     cached
    Mem:       1018916     685008     333908          0        224     108252
    -/+ buffers/cache:     576532     442384
    Swap:      2064376        128    2064248
    

    您可以通过将数字参数更改为上述命令,向 Linux 内核发出信号以删除缓存项目的各个方面。

    注意:清理不必要的内存(内核 2.6.16 或更新版本)。始终确保首先运行同步以将有用的东西刷新到磁盘!

    • 释放页面缓存:

      $ echo 1 > /proc/sys/vm/drop_caches
      
    • 要释放 dentry 和 inode:

      $ echo 2 > /proc/sys/vm/drop_caches
      
    • 要释放 pagecache、dentries 和 inode:

      $ echo 3 > /proc/sys/vm/drop_caches
      

    以上内容以root身份运行。如果您尝试使用 sudo 进行操作,则需要将语法稍微更改为以下内容:

    $ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
    $ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
    $ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'
    
    • -2

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve