地图显示 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
答案1
pmap
显示虚拟内存进程的内存——也就是说,不仅是进程存储数据和堆栈的位置,还有动态加载的库、内存映射文件、共享内存等等。其中很少有真正有助于居民或者共享段,代表实际的资源使用情况。
换句话说,您查看的是错误的数字。对于“内存使用情况”,请查看 中的“RSS”字段ps
或 中的“RES” top/htop
。
例如,我的系统上的 Dropbox 大约有 38 MB,尽管它的虚拟内存空间超过 1.7 GB。
答案2
根据https://www.dropbox.com/en/help/144
想要了解更多详情?Dropbox 将文件的元数据存储在 RAM 中,以防止在同步时不断进行昂贵的数据库查找。元数据包括 Dropbox 中文件的路径、校验和、修改时间等。
我们正在努力使这些信息更加紧凑,并从多个方面努力提高内存使用率。我们的技术不仅限于重写源代码片段和编写自定义内存分配器。
不过,在我的电脑上,dropbox 的 RES 是 150MB+(根据top
)。我的 dropbox 包含 4261 个文件+文件夹,每个文件 36KB... 他们提到的原始数据不应该超过每个文件 200 字节。当然,数据结构可能会产生很大的开销。
只是为了好玩,我检查了 python 存储我的 dropbox 文件夹中文件字典的内存使用情况:
import os
files = { f[0]: (f[0], (1,2,3,4,5), 1, 1) for f in os.walk(".") }
这给出了 9.6MB 的 RSS
这当然非常简单,但 Dropbox 似乎不太可能很好地保持较低的内存占用。
PS:这似乎不是Linux客户端的问题:https://www.dropboxforum.com/hc/en-us/community/posts/204452623-Memory-Usage-Disproportionate-to-Dropbox-Contents
你好,我在 64 位 Windows7 上使用 Dropbox,并用它在我的设备间同步大约 200 个文件,大小超过 500KB。
无论如何,Dropbox 客户端持续运行,使用 95MB 的 RAM,我认为这有点不合理。
答案3
用于pmap -x
显示扩展格式,包括RSS:
$ pmap -x $(pgrep -x dropbox)
3015: /home/nathaniel/.dropbox-dist/dropbox-lnx.x86_64-26.4.24/dropbox
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 4584 4260 0 r-x-- dropbox
0000000000400000 0 0 0 r-x-- dropbox
0000000000a7a000 120 116 4 r---- dropbox
0000000000a7a000 0 0 0 r---- dropbox
0000000000a98000 360 360 216 rw--- dropbox
0000000000a98000 0 0 0 rw--- dropbox
0000000000af2000 84 80 80 rw--- [ anon ]
. . . . . .
. . . . . .
. . . . . .
00007ffcc8d5b000 8 4 0 r-x-- [ anon ]
00007ffcc8d5b000 0 0 0 r-x-- [ anon ]
ffffffffff600000 4 0 0 r-x-- [ anon ]
ffffffffff600000 0 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 3031520 214308 169808
这样你就可以区分虚拟内存和 Dropbox 实际使用的内存 (RSS)。下面是对进程内存的一个很好的解释:
https://techtalk.intersec.com/2013/07/memory-part-1-memory-types/
如果您只想要 RSS,您可以ps
这样使用:
$ ps -o pid,rss,cmd -p $(pgrep -x dropbox)
PID RSS CMD
3015 212768 /home/nathaniel/.dropbox-dist/dropbox-lnx.x86_64-26.4.24/dropbox
我发现 Dropbox 在 Linux 上会泄漏大量内存,至少在 版本中是如此2015.10.28
。大约一周后,RSS 可能会增加到超过 1 GB。我的解决方法是定期重新启动它。以下是重新启动 Dropbox 的简单脚本:
# /usr/bin/env sh
dropbox stop
while pgrep -x dropbox > /dev/null
do
dropbox status
sleep 1
done
dropbox start
答案4
我还注意到 Dropbox 在 Linux Mint 17.1 以及后来的 18.0 上使用了几乎所有可用内存。
当我打开系统监视器、单击“进程”选项卡并单击“内存”列的顶部按最大内存使用量排序时,我看到了这一点。
重启无法解决问题。重启后,Dropbox 重新启动并占用越来越多的内存。
这对我有用,但请先阅读以下警告:
更改 Dropbox 文件夹中文件的权限。
sudo chmod 755 -R ~/Dropbox
重启机器,或者终止所有 dropbox 进程并重新启动 dropbox。注意:“dropbox stop”可能不够。
运行这个你应该会看到“最新”
dropbox status
警告:如果您将配置文件保存到 Dropbox,并且这些文件的权限不是 755,则恢复这些权限已更改的文件可能会造成问题。如果您担心这个问题,可以找到保存和恢复文件权限的方法。在恢复 Dropbox 版本之前,至少将原始文件复制到不同的文件名。这样,如果出现问题,您就会知道原始权限是什么。或者编辑具有正确权限的原始文件 - 复制并粘贴您想要的 Dropbox 文件部分,替换或添加到原始文件。