vmstat -s 命令字段含义,特别是“页面分页”与“页面交换”

vmstat -s 命令字段含义,特别是“页面分页”与“页面交换”

大多数字段都是可以理解的,但有人可以解释一下“页面调入”和“页面调入”之间的区别吗?我很确定交换是指整个进程移动到硬盘驱动器上的交换空间中,而分页是指某些页面移动到交换空间中。那么这是否意味着“页面调入”是属于移入主内存的进程部分的页面,“页面换入”是属于移入主内存的整个进程的页面?有人可以在这里解释一下吗?如果您有有关其他领域的更多信息,那就太好了。我已阅读手册,但没有找到有关此命令和此特定选项的有用信息。命令输出示例:

vmstat -s
       131072 K total memory
       125700 K used memory
        59836 K active memory
        49268 K inactive memory
         5372 K free memory
            0 K buffer memory
       101984 K swap cache
            0 K total swap
            0 K used swap
            0 K free swap
        18594 non-nice user cpu ticks
            0 nice user cpu ticks
        17990 system cpu ticks
    108464145 idle cpu ticks
         1121 IO-wait cpu ticks
            0 IRQ cpu ticks
            0 softirq cpu ticks
            0 stolen cpu ticks
       123672 pages paged in
       486324 pages paged out
            0 pages swapped in
            0 pages swapped out
            0 interrupts
      7439516 CPU context switches
   1457280256 boot time
       131927 forks

这是相关文件的输出,可以帮助对比值并更好地理解它,它与前一个文件同时拍摄:

cat /proc/meminfo
MemTotal:         131072 kB
MemFree:            5404 kB
Cached:           101984 kB
Buffers:               0 kB
Active:            59820 kB
Inactive:          49268 kB
Active(anon):      11532 kB
Inactive(anon):    16920 kB
Active(file):      48288 kB
Inactive(file):    32348 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         28452 kB
Shmem:             21348 kB
Slab:              16544 kB
SReclaimable:      10580 kB
SUnreclaim:         5964 kB

答案1

考虑您的程序需要加载到内存中才能运行。您有一定数量的可用地址空间,而您的程序需要更多。将您可用的地址空间划分为多个页面。这些称为虚拟页面。尝试将这些虚拟页面映射到物理内存中,并假设您没有足够的物理内存来加载所有页面。您将加载立即需要的页面,并保留现在不需要的页面。但到了时候,您将卸载未使用的页面以加载程序运行所需的页面。这就是分页算法的作用,您会看到“页面调入”和“页面调出”。

另一方面,换入或换出处理运行程序所需的整个内存空间。假设您的进程处于等待某些资源可用的状态。在条件得到满足之前,它不需要一直加载到内存中。同时还有其他进程等待内存运行。当时间到来时,你的整个过程会被换出,然后再换回。

考虑到具有大量物理内存的现代系统,对于大多数系统来说,交换已成为过去。

当然,这两种算法(分页和/或交换)都不是那么简单。这只是一万英尺的概述。您可以在网络上的其他地方阅读有关这些内容的更多详细信息。

答案2

/proc/vmstat(自 Linux 2.6.0 起)

该文件显示各种虚拟内存统计信息。该文件的每一行都包含一个名称/值对,以空格分隔。 ...详细信息可以查阅内核源码 代码。)

批评当然是廉价的man 5 proc,但一些指导/概述将受到欢迎。

毫米/vmstat.c:

#ifdef CONFIG_VM_EVENT_COUNTERS
        /* enum vm_event_item counters */
        "pgpgin",
        "pgpgout",
        "pswpin",
        "pswpout",
         ...

(在这部分之前,/* Node-based counters */列出了这些,还有一些其他设置(zone、numa、writeback))

这些都是事件计数器,而不是给定时刻内存中的页数。

这是三个主要事件,其值来自/proc/vmstat我所看到的(带有格式化数字)

    pgpgin           2'023'720
    pgpgout         32'622'399
    pswpin                   0
    pswpout                  0
    ...
    pgalloc_normal 753'397'448

与银行账户不同,您不能说:

money_now = money_in - money_out

因为MM很复杂。

我很确定交换是指整个进程移动到交换空间中

在查阅来源之前,您还应该查阅维基百科。这就是原意交换半个世纪前。


Petr 在 2016 年关于超级用户的文章中写道:

简而言之:

pgpgin, pgpgout- 从磁盘读取并写入内存的页数,您通常不需要太关心这些数字

pswpin, pswpout- 您可能想每次跟踪这些数字(通过一些监控,如普罗米修斯),如果出现峰值,则意味着系统正在大量交换,并且您遇到了问题

vmstat 1 5还可以监控:每秒五秒,一个 和 值siso字节差异,而不是页面总和))

彼得:这么老的问题,到目前为止还没有正确的答案。

相关内容