两个 Web 服务器之间存在巨大的性能差异,使用进程监视器时发现奇怪的行为

两个 Web 服务器之间存在巨大的性能差异,使用进程监视器时发现奇怪的行为

我们有两个 Coldfusion 服务器,它们在对完全相同的输入数据运行完全相同的代码时,性能差异巨大。问题中的代码实例化了大量 CFC(Coldfusion 组件,类似于 OOP 语言中的对象)。

我通过运行 Process Monitor 然后在两台机器上调用有问题的代码来比较这两台服务器。我了解到了两件事。首先,Coldfusion 每次实例化对象时都会打开 CFC 文件。两台服务器都这样做,因此这不可能是造成性能差异的原因。其次,快速服务器直接打开 CFC 文件,而存在性能问题的服务器似乎会沿着路径导航,直到到达所需的 CFC 文件。它对每个文件都这样做,即使是它之前加载过的文件,而且由于代码实例化了如此多的 CFC,它变得非常慢。请参见下面的部分 Promon 跟踪,其中显示了此行为。慢速服务器可能需要超过 60 秒才能完成快速服务器在 2 秒内完成的工作。

有人能告诉我是什么原因导致了这种现象吗?这是 Coldfusion 设置吗?由于 Coldfusion 在 Java 上运行,这是 Java 设置吗?这是操作系统选项吗?快速服务器运行的是 Windows XP,我认为慢速服务器是 Windows Server 2003。

附加问题:Coldfusion 似乎没有对任何 CFC 或 CFM 文件执行任何 READ FILE 操作。这是怎么回事?

快速服务器打开CFC文件的示例:

11:25:14.5588975    jrun.exe    QueryOpen                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5592758    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595024    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595940    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5599628    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5601600    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5602463    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc

慢速服务器打开CFC文件的等效样本:

11:15:08.1249230    jrun.exe    CreateFile                  D:\
11:15:08.1250100    jrun.exe    QueryDirectory              D:\org
11:15:08.1252852    jrun.exe    CloseFile                   D:\
11:15:08.1259670    jrun.exe    CreateFile                  D:\org
11:15:08.1260319    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1260769    jrun.exe    CloseFile                   D:\org
11:15:08.1269451    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1270613    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1271140    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1279312    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1280086    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1280789    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1291034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1291709    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1292224    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1300568    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1301321    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1301843    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1312049    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314409    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314633    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1315881    jrun.exe    CreateFile                  D:\
11:15:08.1316379    jrun.exe    QueryDirectory              D:\org
11:15:08.1316926    jrun.exe    CloseFile                   D:\
11:15:08.1330951    jrun.exe    CreateFile                  D:\org
11:15:08.1338656    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1339118    jrun.exe    CloseFile                   D:\org
11:15:08.1526468    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1527295    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1527989    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1531977    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1532589    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1533575    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1538457    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1539083    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1539553    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1544126    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1544980    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1545482    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1551034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1552878    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1553044    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc

谢谢

答案1

按照 Adam Cameron 的回答,我建议比较两台机器上的 C:\ColdFusion8\lib\neo*.xml 并找出差异,特别是 neo-runtime.xml 和 neo-debug.xml - 这些是存储 ColdFusion 配置的地方。在此处发布任何有趣的差异。

如果你没有 diff 工具,请使用试用版超越比较因为它可以处理整个目录并且很好地支持 XML。

答案2

在我看来,您好像没有在慢速服务器上的 CFAdmin(服务器设置 > 缓存)中选中“组件缓存”。

另一种可能性是,您在两个服务器之间设置了不同的 CF 映射(服务器设置 > 映射)和/或自定义标签路径(扩展 > 自定义标签路径)。

但最有可能的是前者。

您还可以设置“请求中的缓存模板”(服务器设置>缓存)以防止在给定请求的第一个 CFC 之后查找相同 CFC 的文件,如果它是生产服务器,请选中“受信任的缓存”(服务器设置>缓存),如果文件已经加载过一次,这将阻止任何文件系统查找。

ColdFusion 每次在内存中只能保留特定数量的编译文件,由“缓存模板的最大数量”(服务器设置 > 缓存)设置,您应尝试将其设置为包含应用中的 CFML 文件(以及 CFC 方法,每个方法都会编译为自己的类)的总数。显然,这取决于 JVM 是否有足够的 RAM 来处理这个问题。这可能是一种平衡行为。

答案3

尝试检查:

  1. JVM设置特别是内存设置
  2. 确保调试模式已关闭
  3. 病毒扫描设置。查看是否有跳过 Java 文件
  4. 检查在哪里cfdump使用。

相关内容