Coldfusion CFC创建需要花费不同的时间来执行

时间:2010-03-11 15:28:27

标签: coldfusion components long-integer cfc execution-time

我一直在生产中的开放帐户流程中记录对象创建时间。定期初始化对象的时间比预期的要长。通过初始化我的意思是调用它的init()并传递一些可能是简单变量或对象的参数。 e.g。

<cfset validateObj = createObject("component", "compExample").init( 
        productionMode = VARIABLES.productionMode, 
        ipWhiteListed = isWhiteListed, 
        ipLocatorObj = VARIABLES.ipLocatorObj ) />

这就是init()方法中发生的一切。通常执行时间为0毫秒,但随机时间我可能会得到3或3.5秒。这不是特定于一个特定服务器或我们通常繁忙的时期。它看起来很随机。

有人认为这些模板是从模板缓存中逐出的,因为它们并不经常使用,尽管我在多台服务器上检查了cfstat,最大CP /秒为-1。

运行CF 8,0,1

还有其他人遇到过这个吗?

5 个答案:

答案 0 :(得分:1)

该init方法中可能存在调用其他可能导致随机性能降低的其他内容的内容。这可能是由于init方法如何在CFC中存储参数。

在CFC init方法中,它只是:

<cfset variables.productionMode = arguments.productionMode />

或使用setter方法,例如:

<cfset setProductionMode(arguments.productionMode) />

也许是structAppend?

<cfset structAppend(variables, arguments) />

第一种方法,只是一个直接设置,最不可能导致任何问题。 使用setter方法的第二种方法可能会降低速度,具体取决于setter方法正在做什么,它可能调用的其他方法等等...... 第三种方法应该是相当一致的,但我已经看到structAppend和其他内部函数随机减速,没有明显的原因。

我认为John Whish的评论绝对值得关注。同样,当init方法减慢时,此服务器上是否发生了奇怪的流量?

您是否尝试仅隔离createObject()调用以查看它是否是导致速度减慢的对象实例化,或者它是否真的是init方法?通常在CF对象实例化中可以是一个随机的慢进程。最近CF 8可能会更好,但经验表明这可能是问题所在。

答案 1 :(得分:1)

始终将jvm升级到最新版本,然后查看问题是否仍然存在。

答案 2 :(得分:1)

增加模板缓存中的最大项目数。由于缓存使用LRU,并且这些对象特定于不经常使用的功能,因此它们被逐出缓存。更新了一半的服务器,保留了一半,并在周末后进行了比较。在缓存增加的服务器上,对象实例化时间大幅减少。

答案 3 :(得分:0)

您是否有可能从服务器管理器运行探查器?这导致我们类似的随机缓慢。

答案 4 :(得分:0)

一些想法....是否有任何锁定或依赖于网络/ webservice /数据库。您是否有任何审计或类似情况(例如AOP)?

你还有什么CF版本?服务器是否运行.1更新(如果适用,即8.01)。