从 Websphere 6.1.35 到 Websphere 8.5.5.17 - 应用程序启动受文件系统扫描影响

From Websphere 6.1.35 to Websphere 8.5.5.17 - application startup impacted by filesystem scan

这是一个旧应用程序,我们无法更改应用程序。

在部署类似CRM的应用程序期间,从6.1.35环境迁移到8.5.5.17 websphere应用程序服务器环境,应用程序的启动时间从10秒变为12分钟。

我们进行了 sono 故障排除,发现问题出在一个包含 1.200.000 个文件的远程文件系统。此远程文件系统“安装”在属于 WAR 单元的路径中。这是在部署应用程序之后完成的。

应用程序启动如此缓慢的原因是在 8.5.5.17 上,遍历了应用程序路径中存在的所有文件(因此它尝试遍历远程文件系统中的 1.200.000 文件,这需要,你可能猜到了,12 分钟...)。

有人知道这是否改变了从 WAS 6.1.x 到 WAS 8.5.5.x 的行为? 是否有任何解决方法来阻止此操作?

WebSphere Application Server 在启动应用程序时在应用程序中创建一个文件列表。创建列表时有点过分热心,因为它包含在应用程序启动期间不需要查看的文件。对于大型应用程序,文件列表会消耗大量内存并需要很长时间才能生成。由于它是一个 Java EE 应用程序服务器,因此在启动应用程序时它应该只关心 Java-EE-defined 位置中的文件。在申请 运行 期间不使用该列表。因此,应用程序服务器应该只查看目录:

   /
   META-INF/*
   WEB-INF
   WEB-INF/classes/*
   WEB-INF/lib/*

APAR PH09294, included in 8.5.5.16 and 9.5.0.1, provides a way for you to limit the file list to the above locations. You can specify a setting either in the application or in the application server. (If you are using a version prior to 8.5.5.16 or 9.5.0.1, you should look at PM37942,有点麻烦,但仍然有效。)

要在应用程序中启用设置,请将以下内容添加到 EAR 或 WAR 的 MANIFEST.MF。 (记住在编辑 MANIFEST.MF 时,请遵守格式规则。MANIFEST.MF 必须以空行结尾。)将设置添加到 WAR 会限制 WAR 的文件列表.将设置添加到 EAR 会限制该 EAR 中所有 WAR 的文件列表。

IBM-Enable-File-List-Include-Filter: true

您可以通过设置 JVM 自定义将设置应用于服务器 属性。 以下 JVM 自定义 属性 将设置应用于服务器上的所有应用程序:

   Property:  org.eclipse.jst.j2ee.commonarchivecore.EnableFilesListIncludeFilter
    
   Value:  true

您还可以通过将以下行添加到 /properties/amm.[=39 来将设置应用于配置文件中的所有服务器=] 文件:

IBM-Enable-File-List-Include-Filter = true 

最后,要将设置应用于所有配置文件,请将以上行添加到 /properties/amm.filter.properties

应该在哪里设置?如果你在应用程序中设置它,那么无论你将应用程序部署到哪里,文件列表的范围都会受到限制。您不依赖于应用程序服务器中的任何设置。因此,对于任何大型应用程序,开发人员都应始终在应用程序中包含该设置。管理员可能会考虑将该设置应用于整个 WebSphere Application Server 安装。