5

pmap показывает, что Dropbox использует почти 200 МБ памяти (в Linux). Когда я запускаю Dropbox в Windows, он использует только около 30 МБ памяти. В чем причина этого?

Кроме того, почему так много [ 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

4 ответа4

7

pmap отображает виртуальную память процесса, то есть не только места, в которых процесс хранит данные и стек, но также динамически загружаемые библиотеки, отображенные в память файлы, разделяемую память и т. д. Очень немногие из них фактически вносят вклад в резидентные или общие сегменты, которые отражают фактическое использование ресурсов.

Другими словами, вы смотрите на неправильные цифры. Для "использования памяти" посмотрите на поле "RSS" в ps или "RES" в top/htop .

Например, размер Dropbox в моей системе составляет около 38 МБ, хотя объем виртуальной памяти превышает 1,7 ГБ.

2

Согласно https://www.dropbox.com/en/help/144

Хотите узнать больше? Dropbox хранит метаданные ваших файлов в оперативной памяти, чтобы предотвратить постоянный и дорогостоящий поиск в базе данных во время синхронизации. Метаданные включают пути к файлам в вашем Dropbox, контрольные суммы, время модификации и т.д.

Мы прилагаем все усилия, чтобы сделать эту информацию более компактной, и работаем над несколькими аспектами, чтобы улучшить использование памяти. Наши методы не ограничиваются переписыванием частей нашего исходного кода и написанием пользовательских распределителей памяти.

Тем не менее, на моем компьютере RES Dropbox составляет 150 МБ + (в соответствии с top). Мой дропбокс содержит 4261 файлов + папок, в результате чего 36KB на файл ... Необработанные данные, которые они упоминают, не должны использовать более 200 байтов на файл. Конечно, структуры данных могут иметь значительные накладные расходы.

Просто для удовольствия я проверил использование памяти python для хранения словаря файлов в папке dropbox:

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

Это дает RSS 9,6 МБ

Конечно, это очень упрощенно, но кажется маловероятным, что Dropbox отлично справляется со своей задачей, сохраняя мало памяти.

PS: Это, похоже, не проблема клиента Linux: https://www.dropboxforum.com/hc/en-us/community/posts/204452623-Memory-Usage-Disproportionate-to-Dropbox-Contents

Привет! Я использую Dropbox на 64-битной Windows7 и использую его для хранения чуть более 500 КБ более 200 файлов, синхронизированных на моих устройствах.

В любом случае, клиент Dropbox постоянно работает, используя 95 МБ ОЗУ, что, на мой взгляд, немного неразумно.

0

Используйте 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 может расползаться до более чем ГБ. Мой обходной путь - регулярно его перезагружать. Вот минимальный скрипт для перезапуска Dropbox:

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

Я также заметил, что Dropbox использует почти всю доступную память в Linux Mint 17.1 и позже 18.0.

Я увидел это, когда открыл системный монитор, щелкнул вкладку "Процессы" и щелкнул верхнюю часть столбца "Память", чтобы отсортировать данные по наибольшему использованию памяти.

Перезагрузка не устранила проблему. После перезагрузки Dropbox перезапустил процесс использования все большего объема памяти.

Это сработало для меня, но сначала прочитайте предупреждение ниже:

Измените права доступа к файлам в папке Dropbox.

sudo chmod 755 -R ~/Dropbox

Перезагрузите компьютер или убейте все процессы Dropbox и перезапустите Dropbox. Примечание: "dropbox stop" может быть недостаточно.

Запустите это, и вы должны увидеть "В курсе"

dropbox status

Предупреждение. Если вы сохранили файлы конфигурации в Dropbox с разрешениями, отличными от 755, восстановление этих файлов с измененными разрешениями может привести к поломке. Вы можете найти способы сохранить и восстановить права доступа к файлам, если это вызывает озабоченность. По крайней мере скопируйте исходный файл под другим именем, прежде чем восстанавливать версию Dropbox. Тогда вы будете знать, какие были исходные разрешения, если что-то сломалось. Или отредактируйте исходный файл с правильными правами доступа - скопируйте и вставьте нужную часть файла Dropbox, заменив или добавив его в исходный файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .