解释 top 实用程序中的交换

Interpreting swap in top utility

我怀疑我的 MySQL 盒子里有一些交换活动。我 运行 "top" 实用程序只给了我 51MB 的交换空间。

然而,当我在top实用程序中启用"Swap"列时,它显示实际上有12g的交换空间被mysqld使用。

你能告诉我哪个是准确的信息吗?是否有交换发生?

编辑: 根据我的阅读,top 输出中的 SWAP 列实际上只是 VIRT - RES。假设部分流程已被换出。很难或不可能准确衡量给定进程使用了​​多少交换空间。

如果您使用的是 Linux 或支持 /proc 的 UNIX 变种之一,您可以使用它来获取实际使用情况:

cat /proc/18810/status

(其中 18810 是您的 mysqld 进程的 PID。)

它将向您显示一堆实际内存使用情况的字段。这是我的开发 VM 中 mysqld 进程的一个例外:

VmPeak:  3258116 kB
VmSize:  3258116 kB
VmLck:   1416344 kB
VmHWM:   1180788 kB
VmRSS:   1180780 kB
VmData:  3189940 kB
VmStk:        88 kB
VmExe:     11608 kB
VmLib:      7312 kB
VmPTE:      2540 kB
VmSwap:        0 kB

0的VmSwap表示当前没有使用任何swap。

有关其他字段的信息,请参阅 http://man7.org/linux/man-pages/man5/proc.5.htmlman 5 proc。手册部分说:

  • VmSwap: Swapped-out virtual memory size by anonymous private pages; shmem swap usage is not included (since Linux 2.6.34).

回复您的评论:

显然您使用的 Linux 版本太旧,无法在 per-process 状态中包含 VmSwap 字段。

您可以阅读 /proc/meminfo 并找出服务器上正在使用的总交换 space,但这不会告诉您每个进程。

您还可以 运行 vmstat 监视交换 activity。如果 "si" 和 "so" 字段为零,则没有问题。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Tuning_and_Optimizing_Red_Hat_Enterprise_Linux_for_Oracle_9i_and_10g_Databases/sect-Oracle_9i_and_10g_Tuning_Guide-Swap_Space-Checking_Swap_Space_Size_and_Usage.html