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 / 问题 / 23127
Accepted
James Simpson
James Simpson
Asked: 2009-06-10 21:39:51 +0800 CST2009-06-10 21:39:51 +0800 CST 2009-06-10 21:39:51 +0800 CST

Swap应该这样使用吗?

  • 772

我有一台配备 Dual Nehalem Quad Core Xeon 5520 和 12GB DDR3 RAM 的服务器。服务器的平均内存使用率只有 10-15% 左右,但使用的 Swap 显示 10%+。这是正常的,还是可能是什么问题导致了这种情况。我的印象是,只有在没有足够的可用内存时才使用交换。

我在 CentOS 5.3 上运行 Apache/2.0.63。

centos apache-2.2 memory swap
  • 4 4 个回答
  • 578 Views

4 个回答

  • Voted
  1. Best Answer
    Avery Payne
    2009-06-10T21:43:25+08:002009-06-10T21:43:25+08:00

    这没有什么问题。随着时间的推移,内核将逐渐分页到虚拟内存中。如果您的服务器有活动“峰值”并且您当前可用的内存迅速填满,也会发生这种情况。内存系统上的压力会导致页面输出发生,直到压力降低到设定点(您可以在 /proc/sys/vm 中检查)。即使在一个相当空闲的系统上,随着时间的推移,我也看到了逐渐的页面输出。因此,除非交换相当活跃(大量页面错误导致分页活动),否则我不会担心这一点。

    如果您真的很担心,您可以随时关闭交换,然后再打开。这将迫使那些交换的页面回到内存中。我不建议这样做,但如果你愿意,你可以这样做。在执行此操作之前,请确保您有足够的可用内存。

    • 5
  2. Xerxes
    2009-06-10T23:12:09+08:002009-06-10T23:12:09+08:00

    你不应该担心这一点——如果内核认为数据不会被访问到足以保证将其保存在物理内存中,则将使用交换。

    如果您想监控“不良”交换使用情况,最好监控交换读取和写入发生的速率,而不是简单地监控它是否正在使用。

    例如...

    # vmstat 3
    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
     1  0  19528  45324  19348 240132   50   17    93    26   30   30  0  1 98  1
     0  0  19528  45324  19348 240156    0    0     0     3    9   23  0  0 100  0
     0  0  19528  45324  19352 240156    0    0     0     9    9   25  0  0 100  0
     0  0  19528  45324  19352 240156    0    0     0     0    5   17  0  0 100  0
    

    第一份报告告诉您自机器首次启动以来的状态(平均值),其余的应该是您(在上述情况下)3 秒的平均值。

    请注意siandso字段大多为零 - 这就是您感兴趣的内容。

    • 3
  3. Martin M.
    2009-06-10T22:17:19+08:002009-06-10T22:17:19+08:00

    这很好,正如已经指出的那样,使用高峰可能会导致这种情况,或者内核可能会决定将某些项目放入交换中,因为将 RAM 用于其他东西(页面缓存)更聪明。

    正如您可能感兴趣的其他问题的答案一样,请避免这种情况。sysctl vm.swappiness

    • 1
  4. David Spillett
    2009-06-11T02:54:35+08:002009-06-11T02:54:35+08:00

    (作为答案发布,因为它太长了,无法作为附加评论添加到 Avery Payne 的答案中)

    此外,如果在已经过去的高峰期使用了交换,您可能会发现交换中的大部分数据当前也在 RAM 中。如果 Linux 将页面从交换入读回 RAM,它不会立即释放交换空间,除非它需要它来存储更​​多数据,这样,如果它需要将页面换出(并且它知道其中的数据没有改变) ) 它实际上不需要将页面写入磁盘,因为它们已经存在。

    有关详细信息,请参阅 /proc/meminfo。目前在我的一个小服务器上:

    olm:/proc# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1487       1457         30          0         15       1094
    -/+ buffers/cache:        347       1139
    Swap:          980        112        868
    olm:/proc# cat meminfo
    MemTotal:      1523572 kB
    MemFree:         30688 kB
    Buffers:         15724 kB
    Cached:        1120884 kB
    SwapCached:      67868 kB
    SwapTotal:     1004052 kB
    SwapFree:       888928 kB
    

    所以这里分配的 112Mb 交换空间中的 ~66Mb 当前也存在于 RAM 中。没有必要从交换中删除 66Mb,因为不需要空间用于其他用途(有大量完全可用的交换空间)。如果交换已满,这些页面将被重新分配,如果这些页面在 RAM 中发生变化,它们将被标记为脏页并且可以重新分配,但如果需要将它们换回,内核可以为自己节省大量磁盘写入。

    如果我强制清除磁盘缓存和缓冲区

    sync; echo 3 > /proc/sys/vm/drop_caches
    

    结果保持不变:

    olm:/proc# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1487       1278        209          0          0        979
    -/+ buffers/cache:        298       1189
    Swap:          980        112        868
    olm:/proc# cat meminfo
    MemTotal:      1523572 kB
    MemFree:        212320 kB
    Buffers:           652 kB
    Cached:        1005732 kB
    SwapCached:      67868 kB
    SwapTotal:     1004052 kB
    SwapFree:       888928 kB
    

    在要求清除磁盘缓存后,“缓存”读数保持高位,因为这也是分配给 VMWare 虚拟机的内存,因为分配的方式。SwapCached 读取并没有改变,因为仅仅因为 RAM 现在是空闲的,将页面复制回 RAM 是没有意义的 - 在 RAM 再次分配给其他东西之前可能永远不需要它们,因此这些读取将被浪费。

    上述情况与您的情况略有不同,因为这台机器几乎总是将其所有 RAM 分配给某些东西(VM、其他进程、I/O 缓存+缓冲区),但根据您的机器自上次启动以来的加载历史记录,这不太可能交换区域中分配空间中的一大块页面同样也在 RAM 中。

    • 1

相关问题

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 笔记本电脑 - RAM 与磁盘的性能

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

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

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

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

    • 30 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 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
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +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