Entries for month: December 2008

Are you still using the stock CF JVM? Stop today!

Last week I rebuilt my work workstation (an old server actually, running 2003 Std server, dual 3.06 Xeon's, 4 gigs of ram, I love it).  Of course, that meant that Coldfusion gets re-installed.  One of the apps I am developing is a very large Model-Glue / Coldspring / Transfer ORM application that makes heavy use of objects.  There is a little script in the onAppStart method that times how long it takes for the application to fire up, and writes a log entry with that data. The first time I fired up the application after installing CF, it *really* felt like it was taking a long time, so I went to check out the log.

Application reloaded in 165.563 seconds from 127.0.0.1.

OK, yea, that took a long time.  Then I realize I hadnt updated the coldfusion JVM yet.  So I went out and grabbed the latest JDK (note, you need the JDK, not the JVM only), and installed it to the default windows location.  Since I have Coldfusion developer installed in multiserver mode, I went to e:\JRun4\bin\jvm.config, and I changed the java.home line near the top to point to my newly installed JDK location, like so:

java.home=C:/Program Files/Java/jdk1.6.0_11

Then I stopped and re-started the coldfusion services, and fired up my application again...

Application reloaded in 14.453 seconds from 127.0.0.1.

Holy smokes! What a huge difference, 151 seconds faster!  So, lets say you are reloading your application maybe 4 times an hour throughout the day to test changes. 8 hours a day (yea, right, dont I wish!), 40 hours a week, 52 weeks in a year....carry the 1.... wow, after a year of struggling along on the stock JDK with its classloader bug, you could waste 349 hours in a year JUST reloading this application.  I bet this is a worse case scenario of course, but this should illustrate why updating today is a good idea!

*edited*

Aaron Longnion has some questions regarding the status of the 'save class files' and 'trusted cache' options which may have effected this test, so I ran a more thorough test and noted times for each one. Upgrading to the latest JVM has not only been rock-solid for stability, but it has proven to be much faster for both my development and my production servers (in load testing, after tweaking garbage collection, my production cluster was able to handle a far greater traffic load with the updated JVM than without it)

Stock JVM, no cache or class file save First request to CF after restart 100.071
Stock JVM, no cache or class file save Reload app after initial request 13.767
Stock JVM, no cache or class file save Reload app 2nd time after restart 11.876
Stock JVM, primed trusted cache + save class files First request to CF after restart 82.706
Stock JVM, primed trusted cache + save class files Reload app after initial request 11.891
Stock JVM, primed trusted cache + save class files Reload app 2nd time after restart 10.297
1.6.0_11 JVM, no cache or class file save First request to CF after restart 54.230
1.6.0_11 JVM, no cache or class file save Reload app 2nd time after restart 13.734
1.6.0_11 JVM, no cache or class file save Reload app 2nd time after restart 12.297
1.6.0_11 JVM, primed trusted cache + save class files First request to CF after restart 38.453
1.6.0_11 JVM, primed trusted cache + save class files Reload app 2nd time after restart 11.031
1.6.0_11 JVM, primed trusted cache + save class files Reload app 2nd time after restart 9.844

10 Comments