我一直在生产中的开放帐户流程中记录对象创建时间。定期初始化对象的时间比预期的要长。通过初始化我的意思是调用它的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
还有其他人遇到过这个吗?
答案 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)。