为什么 Dropbox 在 Linux 上使用这么多内存?

hug*_*eow 6 memory linux centos cloud-storage dropbox

pmap显示 Dropbox 使用近 200MB 的内存(在 Linux 上)。当我在 Windows 上运行 Dropbox 时,它只使用大约 30MB 的内存。这是什么原因?

另外,为什么[ anon ]根据 pmap 输出有这么多范围占用这么多内存?

[mirror@home Dropbox]$ pgrep dropbox
9544

9544:   /home/mirror/.dropbox-dist/dropbox
08048000   3028K r-x--  /home/mirror/.dropbox-dist/dropbox
0833d000    248K rw---  /home/mirror/.dropbox-dist/dropbox
0837b000     52K rw---    [ anon ]
08c20000  15688K rw---    [ anon ]
ad052000   1028K rw---    [ anon ]
ad1d4000   1024K rw---    [ anon ]
ad3d4000   1024K rw---    [ anon ]
ad5d4000      4K -----    [ anon ]
ad5d5000  10240K rw---    [ anon ]
adfd5000      4K -----    [ anon ]
adfd6000  10240K rw---    [ anon ]
ae9d6000      4K -----    [ anon ]
ae9d7000  10240K rw---    [ anon ]
af3d7000      4K -----    [ anon ]
af3d8000  10240K rw---    [ anon ]
afdd8000      4K -----    [ anon ]
afdd9000  10240K rw---    [ anon ]
b07d9000      4K -----    [ anon ]
b07da000  10240K rw---    [ anon ]
b11da000      4K -----    [ anon ]
b11db000  10240K rw---    [ anon ]
b1bdb000      4K -----    [ anon ]
b1bdc000  10240K rw---    [ anon ]
b25dc000      4K -----    [ anon ]
b25dd000  10240K rw---    [ anon ]
b2fdd000      4K -----    [ anon ]
b2fde000  10240K rw---    [ anon ]

........

b7fc6000      4K rw---  /lib/libpthread-2.5.so
b7fc7000     12K rw---    [ anon ]
b7fca000      4K r-x--  /home/mirror/.dropbox-dist/_bisect.so
b7fcb000      4K rw---  /home/mirror/.dropbox-dist/_bisect.so
b7fcc000     20K r-x--  /home/mirror/.dropbox-dist/_struct.so
b7fd1000      4K rw---  /home/mirror/.dropbox-dist/_struct.so
b7fd2000    108K r-x--  /lib/ld-2.5.so
b7fed000      4K r----  /lib/ld-2.5.so
b7fee000      4K rw---  /lib/ld-2.5.so
bfa77000    156K rw---    [ stack ]
 total   194620K
Run Code Online (Sandbox Code Playgroud)

use*_*686 8

pmap显示进程的虚拟内存——也就是说,不仅是进程存储数据和堆栈的位置,还包括动态加载的库、内存映射文件、共享内存等。其中很少有实际贡献给驻留共享段,这将代表实际资源使用情况。

换句话说,您正在查看错误的数字。对于“内存使用情况”,请查看 中的“RSS”字段ps或 中的“RES” top/htop

例如,我系统上的 Dropbox 大约为 38 MB,即使它的虚拟内存空间超过 1.7 GB。

  • @hugemeow:不——它是进程的内存地址空间。(进程不能直接访问 RAM 或交换——它们只能访问“虚拟”地址,内核将这些地址转换为属于该进程的 RAM/交换、属于共享库的 RAM/交换、mmap()ed 文件中的数据或其他东西否则。每个进程都有自己独立的虚拟地址空间。) (3认同)