如何修复在启用沙盒安全性的情况下运行速度慢得多的 ColdFusion 应用程序?

How to fix a ColdFusion app that runs much slower with sandbox security on?

最近我们升级到 ColdFusion 11 Enterprise 并注意到成熟的沙箱安全性往往比标准版 (CF10) 有更大的开销。

如何才能使现有的 CF 应用在沙盒安全性方面表现良好?

到目前为止,这是我的发现:

  • 安装 VisualVM by adding -Dcom.sun.management.jmxremote.port=8701 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false to CF Admin's JVM Arguments. Learn how to use it and pay special attention to the CPU Snapshot & Hotspot tab. http://boncode.blogspot.ca/2010/04/cf-java-using-free-visualvm-tool-to.html。仅供参考 企业版中的 CF Server Monitor 完全没用,因为它的 memory/performance 分析开销对于实时生产服务器来说太大而不可行,而且它在负载下表现不佳,无法为您提供任何有用的数据可能出错了。
  • 禁用 IPv6,并将 [serverip] [serverip] 添加到 OS 的主机文件,以通过 Security Manager. See: On Linux, Java issues reverse DNS lookups when a socket is opened. Why, and how can I stop it?(仅供参考,Windows 影响到)
  • 尽可能多地删除 <cfmodule><cfinclude>,因为它们最终会产生许多 java.io.File.canRead()java.io.File.exists(),这会对负载下的磁盘 IO 造成压力。甚至 SSD 也会承受负载。我试过 Trusted Cache,但没有用。相反,请尝试在 application 范围内使用缓存的 CFC,并确保代码是线程安全的并且是本地变量。
  • 尽可能避免使用 <cfinterface>、继承 extendsgetMetaData(),因为它们最终会调用 java.io.File.lastModified(),这会对磁盘 IO 造成压力加载。 Bug?
  • 消除对 access="package" 的使用,因为它最终会产生许多 java.security.AccessController.checkPermission 个调用。
  • 每个请求的对象越少越好,因为每个对象实例化的额外 java.security.AccessController.checkPermission 调用成本更高。