原由:docker
log4j日誌滾動失敗,debug發現jvm調用native方法rename失敗,也就是系統調用rename失敗。antd
本身寫c程序系統調用rename,證明確實是這個問題。jvm
日誌打在容器裏,日誌目錄經過docker掛載到宿主機上,而對日誌目錄設置了quota磁盤限額。掛載目錄下的文件rename會失敗,而它的子目錄下的文件rename不會失敗。debug
幾經排查定位到quata設置引發的,在容器更新或重啓後,目錄的quotaId和文件的quotaId就會對不上。日誌
而 Invalid cross-device link 原意就是,文件在不一樣的文件系統下,rename系統調用失敗報這個錯誤碼。dns
查詢quota
#/usr/bin/lsattr -p -d /home/admin/logs/antdnsfilter/
設置quota
/usr/bin/chattr -p 16777675 +P /home/admin/logs/antdnsfilter/容器
取消quotabug
/usr/bin/chattr -p 0 -P /home/admin/logs/antdnsfilter/程序