我们有一个不规则的,不可复制的问题(到目前为止今年三次)。我们有一个双节点Tomcat集群,每个节点上运行的webapp有时从外部文件夹(已安装的SAMBA文件夹)读取(导入)文件。有时会出现问题:其中一个Tomcat实例无法从给定文件夹中读取数据,我们变为FileNotFoundException(Permission denied)。
例如,XLS导出的模板位于该文件夹中,当出现此问题时,用户将无法再使用该节点上的XLS导出功能。
对于那些在该文件夹中是全新的文件也是如此,并且Tomcat之前都没有尝试过这些文件。
似乎这不是一个简单的权限问题,tomcat用户可以访问给定的文件夹/文件,并在Tomcat重启后(只有一个有FileNotFoundException!)我们没有更多的问题!所以,我认为,这不是一个并发问题。
有人知道它怎么会发生?
=============================== UPDATE:
绝对没有并发问题:当Node2停止时,我们在Node1上的一段时间内上次收到错误。
另一个有趣的事情: 我构建了一个Quartz作业,每小时检查一次文件夹。这项工作在我们的应用程序内运行并执行以下操作:
for (String path : getFolderPaths()) {
if (StringUtils.isEmpty(path))
continue;
java.io.File folder = new java.io.File(path);
if (!folder.canRead()) {
// NOW WE HAVE a PROBLEM AGAIN :-(
}
}
Node1在00:05停止,在00:15开始,然后Node2在0:25停止,然后Node1上的作业在00:30处于活动状态。所有其他工作都在那段时间内停止了,我们没有得到HTTP请求,Node1在重启后做的第一件事是这个检查。并且第一个文件夹的检查成功,但第二个文件夹没有!
然后在一个小时内他们都失败了。这两个文件夹都是像/ mnt / fileshare / invoices /和/ mnt / fileshare / orders /这样的兄弟,所以问题可以在/ mnt / fileshare /
那是我们第一次检查导致问题吗?怎么会发生?
=============================== UPDATE:
我研究了定期检查有问题路径的工作结果。同一服务器上的其他Tomcat实例同时出现问题。另一台服务器上的其他Tomcat实例有时是同时进行的,有时是独立的。像
或