如何阅读“顶”。 进程列表说进程有交换,但概述说没有交换正在使用

我使用top来监视我的服务器。 交换行读取

Swap: 1044220k total, 0k used, 1044220k free, 148544k cached

我已经打了O p按交换sorting。

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND 703 mysql 20 0 930m 43m 7092 S 0 8.9 0:00.66 886m mysqld 1555 www-data 20 0 346m 9792 3208 S 0 2.0 0:00.00 337m apache2 1559 www-data 20 0 347m 10m 3712 S 0 2.2 0:00.01 336m apache2 1567 www-data 20 0 345m 9448 2552 S 0 1.9 0:00.01 336m apache2 1557 www-data 20 0 345m 9452 2556 S 0 1.9 0:00.01 336m apache2 1562 www-data 20 0 345m 9508 2344 S 0 1.9 0:00.01 336m apache2 1566 www-data 20 0 345m 9684 2684 S 0 1.9 0:00.02 335m apache2 

我想知道我该怎么读这个。 这是可用于这些进程的交换?
今天早上,最高显示的mysqld使用了1.1 GB的交换空间,30%的交换空间用完了。 之后投掷更多的内存在机器mysqld下降到886m顶部说交换使用是0(math似乎是有道理的)。 所以我只是想知道什么是交换列显示? 为什么交换概览不反映交换列的总和? 谢谢。

它是通过从虚拟内存中减去物理内存来计算的:

 SWAP = VIRT - RES 

man top的更多细节:

  o: VIRT -- Virtual Image (kb) The total amount of virtual memory used by the task. It includes all code, data and shared libraries plus pages that have been swapped out and pages that have been mapped but not used. p: SWAP -- Swapped size (kb) Memory that is not resident but is present in a task. This is memory that has been swapped out but could include additional non-resident memory. This column is calculated by subtracting physical mem‐ ory from virtual memory. q: RES -- Resident size (kb) The non-swapped physical memory a task has used. 

我认为最高的计算是错误的,我创build了以下程序,我在服务器上启动,没有任何运行软件

 #include <stdio.h> #include <stdlib.h> #define ALLOC_SIZE(e)( e * 1024 ) int main(){ char *p = malloc(ALLOC_SIZE(1024 * 1024)); sleep(190); } gcc -o kk kk.c ./kk & [1] 9880 top -p 9880 Swap: 31457272k total, 0k used, 31457272k free, 392892k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND 9880 root 16 0 1027m 352 284 S 0.0 0.0 0:00.00 1.0g kk 

免费输出

 free -m total used free shared buffers cached Mem: 128966 715 128250 0 87 383 -/+ buffers/cache: 244 128721 Swap: 30719 0 30719 

meminfo中

 grep -i swap /proc/meminfo SwapCached: 0 kB SwapTotal: 31457272 kB SwapFree: 31457272 kB 

换句话说,顶部说我有1GB的交换使用,但从以前的输出我没有任何交换空间占用,所以我没有任何部分的内存换出支持存储。

(VIRT – RES)的其余部分是虚拟的