如何修复在启用沙盒安全性的情况下运行速度慢得多的 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>
、继承 extends
和 getMetaData()
,因为它们最终会调用 java.io.File.lastModified()
,这会对磁盘 IO 造成压力加载。 Bug?
- 消除对
access="package"
的使用,因为它最终会产生许多 java.security.AccessController.checkPermission
个调用。
- 每个请求的对象越少越好,因为每个对象实例化的额外
java.security.AccessController.checkPermission
调用成本更高。
最近我们升级到 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>
、继承extends
和getMetaData()
,因为它们最终会调用java.io.File.lastModified()
,这会对磁盘 IO 造成压力加载。 Bug? - 消除对
access="package"
的使用,因为它最终会产生许多java.security.AccessController.checkPermission
个调用。 - 每个请求的对象越少越好,因为每个对象实例化的额外
java.security.AccessController.checkPermission
调用成本更高。