Android Studio: на устройстве не осталось свободного места

09 May 2018

2018-05-09-13:48:05_911x394Кто из вас не сталкивался с этим сообщением при обновлении студии под linux? Пожалуй каждый, кому доводилось с ней работать эту ошибку уже видел хотя бы раз и спешно шел в гугель для поиска ответа на вопрос что же ей не нравится и как это фиксить.

java.io.IOException: На устройстве не осталось свободного места
java.io.IOException: No space left on device

И так каждый раз. А вся проблема в том, что студия использует /tmp для распаковки установочных архивов перед копированием.

И чаще всего места там катастрофически недостает.

$ df -h |grep \/tmp  
tmpfs 3,9G 455M 3,4G 12% /tmp

Во многих дистрибутивах размер раздела выставляется равным половине объема озу. Решений несколько и каждый применяет то, которое ему нравится больше.

Временное увеличение размера /tmp

$ sudo mount -o remount,size=8G,noatime /tmp

Чем плохо: система активно начнем использовать подкачку и ей может просто не хватить суммарного объема свопа и ram.

Переназначение временной директории для студии

Выделение_002

В открывшийся файл дописываем указание временной директории для виртуальной машины.

-Djava.io.tmpdir=/path-to-tmp-dir

Минус подхода: вся инфраструктура будет использовать эту временную директорию (компиляция, запуск и прочее), что приведет к замедлению работы если директория находится на диске (и неважно ssd это или hdd).

А еще все настройки будут теряться при обновлении студии (они хранятся в каталоге с настройками студии.

Есть другой вариант, позволяющий вынести настройки в глобальную область.

echo "-Djava.io.tmpdir=/tmp-dir-path" > ~/android-studio-tmp.fix  
STUDIO_VM_OPTIONS=~/android-studio.fix android-studio

Указать временную директорию для всех приложений java

Прописать в .bashrc

export _JAVA_OPTIONS=-Djava.io.tmpdir=/path-to-tmp-dir

Это наименее разумный способ - он заставит абсолютно все java-приложения использовать указанную директорию.

Указать отдельное размещение для распаковки временных файлов в момент установки

$ cd ~  
$ mkdir -p tmp/PackageOperation04  
$ cd /tmp  
$ ln -s $HOME/tmp/PackageOperation04

Самый разумный способ, имхо. Делать это нужно непосредственно перед тем, как вы нажмете кнопку “обновить”.

Литература

Теги: android java linux

Категории: Разработка HowTo