Почему Dropbox использует так много памяти в Linux?
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 ответа
pmap
отображает виртуальную память процесса - то есть не только места, в которых процесс хранит данные и стек, но также динамически загружаемые библиотеки, отображенные в память файлы, разделяемую память и т. д. Очень немногие из них фактически вносят вклад в резидентные или общие сегменты, которые представляют фактическое использование ресурсов.
Другими словами, вы смотрите на неправильные цифры. Для "использования памяти", посмотрите на поле "RSS" в ps
или "RES" в top/htop
,
Например, размер Dropbox в моей системе составляет около 38 МБ, хотя объем виртуальной памяти превышает 1,7 ГБ.
Согласно https://www.dropbox.com/en/help/144
Хотите узнать больше? Dropbox хранит метаданные ваших файлов в оперативной памяти, чтобы предотвратить постоянный и дорогостоящий поиск в базе данных при синхронизации. Метаданные включают пути к файлам в вашем Dropbox, контрольные суммы, время модификации и т. Д.
Мы прилагаем все усилия, чтобы сделать эту информацию более компактной, и работаем над несколькими аспектами, чтобы улучшить использование памяти. Наши методы не ограничиваются переписыванием частей нашего исходного кода и написанием пользовательских распределителей памяти.
Тем не менее, на моем компьютере RES Dropbox составляет 150 МБ + (в соответствии с top
). Моя папка содержит 4261 файл + папки, в результате чего на файл приходится 36 КБ... Необработанные данные, которые они упоминают, не должны использовать более 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 МБ оперативной памяти, что я считаю немного неразумным.
Использование 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
Я также заметил, что Dropbox использует почти всю доступную память в Linux Mint 17.1 и позже 18.0.
Я увидел это, когда открыл системный монитор, щелкнул вкладку "Процессы" и щелкнул верхнюю часть столбца "Память", чтобы отсортировать данные по наибольшему использованию памяти.
Перезагрузка не устранила проблему. После перезагрузки Dropbox перезапустил процесс использования все большего объема памяти.
Это сработало для меня, но сначала прочитайте предупреждение ниже:
Измените права доступа к файлам в папке Dropbox.
sudo chmod 755 -R ~/Dropbox
Перезагрузите компьютер или убейте все процессы Dropbox и перезапустите Dropbox. Примечание: "dropbox stop" может быть недостаточно.
Запустите это, и вы должны увидеть "В курсе"
dropbox status
Предупреждение. Если вы сохранили файлы конфигурации в Dropbox с разрешениями, отличными от 755, восстановление этих файлов с измененными разрешениями может привести к поломке. Вы можете найти способы сохранить и восстановить права доступа к файлам, если это вас беспокоит. По крайней мере, скопируйте исходный файл под другим именем, прежде чем восстанавливать версию Dropbox. Тогда вы узнаете, какие были исходные разрешения, если что-то сломалось. Или отредактируйте исходный файл с правильными правами доступа - скопируйте и вставьте нужную часть файла Dropbox, заменив или добавив его в исходный файл.