JAVA: Caused by: java.io.IOException: No space left on device

Автор: | 09/16/2013
 

java-logoПри сборке Java-проекта с помощью Apache Maven — сборка прервалась с такой ошибкой:

[INFO] Linking into /home/setevoy/***-4.3.0.49/com.***.Explorer
[INFO]    Invoking Linker Standard
[INFO]       [ERROR] Failed to link
[INFO] java.lang.RuntimeException: Unable to write to byte cache
...
[INFO] at com.google.gwt.dev.Compiler.main(Compiler.java:177)
[INFO] Caused by: java.io.IOException: No space left on device
[INFO] at java.io.RandomAccessFile.writeBytes(Native Method)
[INFO] at java.io.RandomAccessFile.write(RandomAccessFile.java:486)
[INFO] at com.google.gwt.dev.util.DiskCache.writeByteArray(DiskCache.java:216)
[INFO] ... 15 more
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR

На первый взгляд — места на машине достаточно:

# df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
...
/dev/mapper/debian-home   2.2M   21K  2.2M    1% /home
/dev/mapper/debian-tmp     96K    20   96K    1% /tmp
# df -h
/dev/mapper/debian-home   34G  4.2G   28G  13% /home
/dev/mapper/debian-tmp   368M   11M  339M   3% /tmp

Но на самом деле — Java полностью забивает раздел /tmp, в котором всего 400 мб.  Для удобства наблюдения — сделаем небольшой скрипт:

# cat tmp.sh
#!/bin/bash
i=`df -h /tmp/ | grep tmp | awk '{print $5}'`
echo $i >> tmp.log

И запустим его на выполнение каждую секунду:

# watch -n 1 ./tmp.sh

Теперь осталось вывести информацию из лога на консоль:

# tail -f tmp.log

Теперь можно заметить, что во время компиляции проекта:

[INFO]       Compiling permutation 0...
[INFO]       Compiling permutation 1...
[INFO]       Compiling permutation 2...
[INFO]       Compiling permutation 3...
[INFO]       Compiling permutation 4...
[INFO]       Compiling permutation 5...

Место в /tmp заканчивается:

/dev/mapper/debian-tmp  368M  250M  100M  72% /tmp