SlavikMIPT / tgcloud

Opensource Telegram based cloud storage
https://dev.tgcloud.xyz
Apache License 2.0
558 stars 83 forks source link

Проблема больших файлов #21

Closed VadVergasov closed 5 years ago

VadVergasov commented 5 years ago

Скопировав большой файл в папку, которую обрабатывает программа получил следующую ошибку:

Rolling back changes
--------------------------------------------------
Caught exception in release(): [Errno 12] Cannot allocate memory
Traceback (most recent call last):
  File "dedupfs/dedupfs.py", line 481, in release
    self.__write_blocks(inode, buf, apparent_size)
  File "dedupfs/dedupfs.py", line 824, in __write_blocks
    bufsize=-1)
  File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 938, in _execute_child
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

Файл весил ~2Гб, система: Ubuntu 18.04 LTS, 4Gb RAM.

sierikov commented 5 years ago

Я думаю, что разбиение большого файла на блоки занимает большое количество RAM. Если моё предположение верно - можно поробовать решить проблему добавлением swap раздела (расширение опперативной памяти за счет жетского диска). Ниже пример добавления swap на 1GB.

Пы.Сы.: Используйте повышение привилегий, которое вы предпочитаете, в примере помеченно #

# dd if=/dev/zero of=/swapfile bs=1024 count=1024k
# sudo mkswap /swapfile
# sudo swapon /swapfile

Посмотрите на использование памяти при загрузке файла.

VadVergasov commented 5 years ago

Ну так можно до бесконечности файл подкачки делать. В идеале это исправление этого недочета, т.к. чем бОльшие файлы будут тем бОльший swap нужен, что не очень. Хотя учитывая текущий статус проекта это нормально.

VadVergasov commented 5 years ago

Единственное решение на текущий момент, которое я вижу: сделать параметр загрузки - количество блоков, т.е. как только часть файла (весь файл) разбился на n блоков, то загрузить их в Telegram и сбросить в памяти.