[英]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.