将Windows Server 的共享文件夹设置为Storage的情况下,访问Storage时可能偶尔会报以下错误信息。
java.io.IOException: 没有更多的文件。
使用英语表示错误信息为「There are no more files」。
我们确认在大量访问Storage时,尤其是在Resin启动时,这个错误的发生频率会更高。
也有报告称在正常的Storage访问时也可能会发生此错误。
相关FAQ
https://product.intra-mart.support/hc/ja/articles/360051355694
(此FAQ仅适用于Resin启动时的常见问题。)
【原因】
当从OS(Windows Server)到「ERROR_NO_MORE_FILES」的错误ID被返回时,它会被JDK当作异常进行处理。
可能是由于以下JDK的错误导致的。
https://bugs.openjdk.java.net/browse/JDK-8234363 (英文)
截至2023年6月,对于这个错误发生的原因,它可能是发生自OS,因此我们还不清楚根本原因是什么。
通过调查,根据Microsoft公司网站上的信息,似乎找到了与这个现象相关的信息。
https://learn.microsoft.com/ja-jp/windows-server/administration/performance-tuning/role/file-server/
当对各种设置进行以下更改时,我们确认可以抑制该现象发生。
HKLM/System/CurrentControlSet/Services/LanmanWorkstation/Parameters/DirectoryCacheLifetime
将DirectoryCacheLifetime设定为0
但是,由于不了解根本原因,存在以下的担忧点。
・无法确定是否可以100%抑制。
・关于Windows Server的共享文件夹缓存的设置,有可能会导致Storage操作延迟。
上述设置是通过更改Windows注册表进行的,请客户在您的责任所属范围内进行设置并彻底验证。
【参考信息】
此现象是在使用Windows Server 的共享文件夹时发生的,在Linux环境下并未确认到该现象。
【解决方法】
当由于上述JDK问题导致访问Storage失败时,通过进行重试可以避免问题。
可以使用以下系统属性设置重试次数(默认值为3次)。
jp.co.intra_mart.system.service.client.file.StorageUtil.retry_count
(例如)-Djp.co.intra_mart.system.service.client.file.StorageUtil.retry_count=5
※已经在“2013 Autumn”的下记需求中解决了。
https://issue.intra-mart.jp/issues/35789
即使问题发生在OS端的情况下,此对应方法也是有效的。
-- 适用对象 --------------------------------------------------------------------
iAP/Accel Platform/2023 Spring 之前所有版本
--------------------------------------------------------------------------------
FAQID:1278
发生了「java.io.IOException: 没有更多的文件。」。