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

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

地图显示 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 文件部分,替换或添加到原始文件。

相关内容