java.io.IOException: неверный аргумент - PullRequest
3 голосов
/ 23 апреля 2009

У меня есть веб-приложение, работающее в режиме кластера с балансировщиком нагрузки. Он состоит из двух котов (T1 и T2), адресованных только одной БД. T2 - это NFS, установленный на T1. Это единственная разница между обоими узлами.

У меня есть метод Java, генерирующий некоторые файлы. Если запрос работает на T1, нет проблем, но если запрос выполняется на узле 2 Я получаю исключение следующим образом:

java.io.IOException: Invalid argument
        at java.io.FileOutputStream.close0(Native Method)
        at java.io.FileOutputStream.close(FileOutputStream.java:279)

Соответствующий код выглядит следующим образом:

for (int i = 0; i < dataFileList.size(); i++) {
    outputFileName = outputFolder + fileNameList.get(i);
    FileOutputStream fileOut = new FileOutputStream(outputFileName);                        
    fileOut.write(dataFileList.get(i), 0, dataFileList.get(i).length);
    fileOut.flush();
    fileOut.close();
}

Исключение появляется в файле file.ut.close ()

Любой намек?

Луис

Ответы [ 3 ]

3 голосов
/ 07 июня 2010

Установка этой строки в .profile решает проблему:

ulimit –n 2048
1 голос
/ 24 апреля 2009

Наконец я нашел причину. Во-первых, я замечаю, что НЕ всегда это исключение приходит в той же точке.

Иногда был java.io.IOException: неверный аргумент в java.io.FileOutputStream.close0 (собственный метод) в java.io.FileOutputStream.close (FileOutputStream.java:279) ^^^^^

а иногда было

java.io.IOException: Invalid argument
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:260)

Таким образом, проблема НЕ является проблемой Java. Даже не проблема NFS. Проблема в в базовом типе файловой системы, который является DRBD файловая система.

Тестирование в оболочке для записи через узлы работает, если кто-то пишет файл. То есть:

на смонтированном узле nfs

cd /tmp
date > /shared/path-to-some-not-mounted-dir/today

will work

но

cat myBigFile > /shared/path-to-some-not-mounted-dir/today

доставит следующую ошибку

cat: write error: Invalid argument

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

1 голос
/ 23 апреля 2009

Насколько велики dataFileList и fileNameList? Возможно, вам не хватает файловых дескрипторов. Странно, что это происходит при close ().

...