您好,登錄后才能下訂單哦!
這篇文章給大家介紹docker中java如何應用new FileOutputStream直接報Input/output error,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一個docker容器中跑著java應用,是一個定時任務,每天拉取遠端文件包存到本機,命名為:decrypt-20181020
就在這一天,任務失敗,java提示異常: java.io.FileNotFoundException: /tmp/decrypt-20181020 Input/output error
Cause by: ... com.pollyduan.job.GetFileService:54
找到對應行的代碼:
FileOutputStream out = new FileOutputStream(targetFile);
一般情況下,new 一個 OutputStream 是無論如何不應該報錯的,畢竟還沒有開始任何讀取或寫入操作。
很怪異,前一天和后一天都正常。
在 bash中進入tmp目錄:
touch decrypt-20181020 touch: cannot touch `decrypt-20181020': Input/output error
其他文件名沒問題
硬盤空間充足
查看設備故障診斷日志:
# dmesg ... [72458282.116220] EXT4-fs error (device dm-6): htree_dirblock_to_tree:914: inode #2097766: block 8397500: comm bash: bad entry in directory: rec_len is smaller than minimal - offset=0(335872), inode=0, rec_len=0, name_len=0
搜索到Stack Overflow,看到有說重啟可解決。由于業務在跑著,沒有嘗試,回頭試過再更新。
目前,修改臨時文件名暫時解決。
關于docker中java如何應用new FileOutputStream直接報Input/output error就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。