Yes, even CFMX users should watch out for client vars that are stored in the Registry. In CF5 and earlier this practice would make ColdFusion progressively slower, causing it to often crash. In CFMX the symptom of this is that CFMX will spin the CPU very high at 60 minute intervals.


The first recommendation is that you shouldn't store client variables in the Registry, but should configure a datasource for that purpose instead. However, even after that configuration change is made the server may be left with a very fat Clients key in the Registry which will gradually be purged according to the setting in the CFAdmin. The problem is that there is a bug where unchecking the little Purge checkbox won't stop CFMX from trying to purge the Registry anyway. If there are thousands and thousands of client keys there then CFMX will get stuck temporarily while trying to read through them all when a background thread kicks in every hour to handle purging. The solution could be to manually remove all the client keys from the Clients registry key or call support and ask for the hotfix. The key that may contain the many client subkeys is:

HKEY_LOCAL_MACHINESOFTWAREMacromediaColdFusionCurrentVersionClients

This cause is somewhat difficult to detect because its a "housekeeping" thread that is causing the problem, and I usually look at jrpp threads (those threads that execute cfm templates) to infer what's going on. The precise thread in a thread dump which identifies this problem is shown here, and note that I found this in a thread dump which had no active jrpp threads (meaning no cfm templates were running!):"

"scheduler-2" prio=5 tid=0x3994fac8 nid=0xce4 runnable [4105f000..4105fdb8] at coldfusion.tagext.NativeCfx.processRequest(Native Method) at coldfusion.tagext.lang.RegistryTag.doStartTag(RegistryTag.java:90) at coldfusion.runtime.ClientScopeServiceImpl.PurgeRegistry(ClientScopeServiceImpl.java:373) at coldfusion.runtime.ClientScopeServiceImpl.PurgeExpiredClients(ClientScopeServiceImpl.java:390) at coldfusion.runtime.ClientScopeServiceImpl$ClientScopePurger.run(ClientScopeServiceImpl.java:499) at coldfusion.scheduling.ThreadPool.run(ThreadPool.java:201) at coldfusion.scheduling.WorkerThread.run(WorkerThread.java:70)


Hope this saves you some trouble.

See also: