1

我一直在生产中的开户流程中记录对象创建时间。周期性地,初始化一个对象将花费比预期更长的时间。通过初始化,我的意思是调用它是 init() 并传递几个可能是简单变量或对象的参数。例如

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

这就是 init() 方法中发生的所有事情。通常执行时间为 0 毫秒,但在随机时间我可能会得到 3 或 3.5 秒。这不是特定于特定服务器或我们通常繁忙的时期。这似乎是非常随机的。

一种想法是这些模板被从我们的模板缓存中逐出,因为它们不是特别常用,尽管我检查了许多服务器上的 cfstat 并且最大 CP/Sec 为 -1。

运行 CF 8,0,1

有没有其他人遇到过这个?

4

5 回答 5

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 中可能会更好,但经验表明这可能是问题所在。

于 2010-03-11T16:26:47.990 回答
1

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

于 2010-03-11T18:16:58.033 回答
1

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

于 2010-03-15T16:22:35.527 回答
0

您是否有机会从服务器管理器运行分析器?这给我们造成了类似的随机缓慢。

于 2010-03-11T15:33:36.307 回答
0

几个想法……网络/网络服务/数据库是否存在任何锁定或依赖关系。您是否正在进行任何审计或类似的工作(例如 AOP)?

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

于 2010-03-11T16:18:43.470 回答