簡體   English   中英

java.io.IOException:參數無效

[英]java.io.IOException: Invalid argument

我有一個以集群模式運行的Web應用程序,帶有負載均衡器。 它由兩個tomcats(T1和T2)組成,只能處理一個DB。 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();
}

fileOut.close()出現異常

任何提示?

路易斯

.profile設置此行解決了問題:

ulimit –n 2048

dataFileList和fileNameList有多大? 你可能會用完文件描述符。 但它很奇怪它發生在close()上。

最后我找到了原因。 首先我注意到並非總是這個例外出現在同一點上。

有時是java.io.IOException:java.io.FileOutputStream.close上的java.io.FileOutputStream.close0(本地方法)中的無效參數(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文件系統。

如果正在編寫一個小文件,則在shell上進行測試以跨節點進行編寫。 即:

在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM