Por que o Dropbox usa tanta memória no Linux?

5

pmap mostra que o Dropbox usa quase 200MB de memória (no Linux). Quando executo o Dropbox no Windows, ele usa apenas cerca de 30 MB de memória. Qual é a razão para isso?

Além disso, por que existem tantas faixas [ anon ] que ocupam tanta memória de acordo com a saída do 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
    
por hugemeow 06.09.2012 / 20:00

4 respostas

7

pmap exibe a memória virtual de um processo - ou seja, não apenas locais onde o processo armazena dados e pilha, mas também bibliotecas carregadas dinamicamente, arquivos mapeados na memória, memória compartilhada e em breve. Muito poucos deles realmente contribuem para os segmentos residente ou compartilhados , o que representaria o uso real de recursos.

Em outras palavras, você está olhando para os números errados. Para "uso de memória", observe o campo "RSS" em ps ou "RES" em top/htop .

Por exemplo, o Dropbox no meu sistema tem cerca de 38 MB, mesmo que seu espaço de memória virtual seja superior a 1,7 GB.

    
por 06.09.2012 / 20:31
2

De acordo com o link

Want more details? Dropbox stores metadata on your files in RAM to prevent constant and expensive database lookups while syncing. The metadata includes paths to files in your Dropbox, checksums, modification times, etc.

We are working hard on making this information more compact and are working on several fronts to improve memory usage. Our techniques are not limited to rewriting pieces of our source code and writing custom memory allocators.

Ainda assim, no meu computador, o RES da caixa de depósito é de 150MB + (de acordo com top ). Minha caixa de depósito contém 4261 arquivos + pastas, resultando em 36 KB por arquivo ... Os dados brutos que eles mencionam não devem usar mais do que cerca de 200 bytes por arquivo. Obviamente, as estruturas de dados podem ter uma sobrecarga significativa.

Apenas por diversão, verifiquei o uso de memória do python armazenando um dicionário dos arquivos na minha pasta dropbox:

import os
files = { f[0]: (f[0], (1,2,3,4,5), 1, 1) for f in os.walk(".") }

Isso dá um RSS de 9,6MB

Isso é muito simplificado, é claro, mas parece improvável que o dropbox esteja fazendo um trabalho muito bom mantendo um baixo consumo de memória.

PS: isso não parece ser um problema do cliente Linux: link

Hi, I'm using Dropbox on Windows7 64bit and am using it to keep just over 500KB over about 200 files synced across my devices.

Anyway, the Dropbox client consistently runs, using 95MB of RAM, which I think is a little unreasonable.

    
por 28.06.2016 / 12:51
0

Use pmap -x para mostrar o formato estendido, incluindo 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

Desta forma, você pode dizer a diferença entre a memória virtual e a memória do Dropbox está realmente usando (RSS). Aqui está uma boa explicação da memória de processo:

link

Se você quer apenas o RSS, você pode usar ps assim:

$ 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

Eu acho que o Dropbox vaza muita memória no Linux, pelo menos na versão 2015.10.28 . Depois de uma semana, o RSS pode chegar a mais de um GB. Minha solução é reiniciá-lo regularmente. Aqui está um script mínimo para reiniciar o Dropbox:

# /usr/bin/env sh
dropbox stop
while pgrep -x dropbox > /dev/null
do
    dropbox status
    sleep 1
done
dropbox start
    
por 28.05.2017 / 02:45
-1

Eu também notei que o Dropbox estava usando quase toda a memória disponível no Linux Mint 17.1 e depois no 18.0.

Vi isso quando abri o System Monitor, cliquei na guia "Processos" e cliquei no topo da coluna "Memória" para classificar pelo maior uso de memória.

Uma reinicialização não resolveu o problema. Após uma reinicialização, o Dropbox reiniciou o processo de usar mais e mais memória.

Isso funcionou para mim, mas leia primeiro o aviso abaixo:

Altere as permissões dos arquivos na sua pasta da caixa de depósito.

sudo chmod 755 -R ~/Dropbox

Reinicialize a máquina ou mate todos os processos da caixa de depósito e reinicie a caixa de depósito. Nota: "dropbox stop" pode não ser suficiente.

Execute isso e você verá "Atualizados"

dropbox status

Aviso: Se você salvou os arquivos de configuração no Dropbox com permissões diferentes de 755, a restauração desses arquivos com permissões alteradas pode causar problemas. Você pode encontrar maneiras de salvar e restaurar as permissões de arquivos, se isso for uma preocupação. Pelo menos copie o arquivo original para um nome de arquivo diferente antes de restaurar a versão do Dropbox. Então você saberá quais eram as permissões originais se algo quebrasse. Ou edite o arquivo original que possui as permissões corretas - copie e cole a parte do arquivo da caixa de depósito desejada, substituindo ou adicionando ao arquivo original.

    
por 20.02.2016 / 16:15