大多数字段都是可以理解的,但有人可以解释一下“页面调入”和“页面调入”之间的区别吗?我很确定交换是指整个进程移动到硬盘驱动器上的交换空间中,而分页是指某些页面移动到交换空间中。那么这是否意味着“页面调入”是属于移入主内存的进程部分的页面,“页面换入”是属于移入主内存的整个进程的页面?有人可以在这里解释一下吗?如果您有有关其他领域的更多信息,那就太好了。我已阅读手册,但没有找到有关此命令和此特定选项的有用信息。命令输出示例:
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
还可以监控:每秒五秒,一个 和 值si
(so
字节差异,而不是页面总和))
彼得:这么老的问题,到目前为止还没有正确的答案。