Day 100 from the ColdFusion war front (or, what's going on with RIAForge)

I've blogged quite a bit lately about the issues I've been having with RIAForge. A few days back I decided to take another tact and put Fusion-Reactor on the box. I've told folks before that FR is pretty darn impressive, but I was surprised at how quickly it exposed issues on the server, specifically at the database level.

My primary sin? Lack of indexes. I enabled the JDBC wrapper for the main database connection and immediately began to see queries that were taking a lot longer than I thought they should. I began adding indexes where appropriate and it's helped quite a bit, but I still have more work to do.

Another interesting thing FR fleshed out was a rather slow XML process. I had removed this some time ago, but I only 'removed' it by switching to JSON. The old event was still there, and picked up by search engines. How often do folks comb through their Model-Glue XML files to ensure they don't have abandoned events?

So where do we stand now? The server still has issues. Both yesterday and today I found Apache crashed and burned. Well, I should say not responding. It was running in the services panel but not responding to requests. A quick restart of Apache brought the site back up. I've done some modifications to the logging to try to flesh out more about what could be harming it.

I'm also still seeing the Subversion processes as being a pain point. I mentioned before I had worked on a new Subversion wrapper, but encountered a few issues when it went to production. I'm going to try to get that wrapped this month some time. I also have search engines running the Zip action. I need to remember to use those nofollow/noindex tags for links I don't want picked up. I also should consider caching the zipped files.

One quick note - if you plan to use CF8, FR, and MySQL, and employ the JDBC wrapper, be sure to read this thread from the FR support group.

Lastly, I want to thank Intergral for providing a license to let me keep running FR on the RIAForge box!

Comments

Chad's Gravatar I ran into the same thing a few weeks back. I kept blaming my programming for being slow, and tried to optimize it, but once i really started looking at the debugging stats i noticed the pages were slow because of the database querys. I added a few indexes and the pages were at least 5 times faster.

I will have to check out FR to see if it can find any other problems.
# Posted By Chad | 8/12/08 9:04 AM
Scott P's Gravatar May not be intended but I don't upload zips anymore. I just link to the create from svn link and let that create the zips. Twas easier for me that way. Would it be possible to create a single download from the svn repos using a link in admin then point the downloads to that? There might be several other folks using the ceate from svn as their primary download source.
# Posted By Scott P | 8/12/08 9:10 AM
DanaK's Gravatar Don't forget (depending on the DB) to setup maintenance plans to rebuild those indexes now and again. Just setting them up once doesn't handle cleaning them up, and can lead to them getting fragmented! You'll end up in the same place you were before setting up the indexes eventually.
# Posted By DanaK | 8/12/08 9:55 AM
Raymond Camden's Gravatar @ScottP: You would have to do it by hand. Ie, make the zip from SVN, save to desktop, then edit project, upload. I need to add some caching to the zip creation, but the issue is how to handle updates. I know SVN allows for post-commit hooks, but I don't know how to use those. I could use an SVN op to get the latest update, compare it to the timestamp on the zip, and return the zip if it isn't old.

@DanaK: Is that doable via the MySQL visual front end?
# Posted By Raymond Camden | 8/12/08 10:04 AM
David Herman's Gravatar All the post commit hook does is run a script for you after the commit finishes, lets say you want to email someone every time the commit happens. Granted it sounds like this is running on windows so you're more limited in what the script can do, unless it runs some custom compiled code that's called from your script. In the *nix world any shell script will do. We currently use it to update tickets with every commit done in relation to that ticket.
# Posted By David Herman | 8/12/08 10:23 AM
Raymond Camden's Gravatar Yeah, it's a Windows box. I'd bet I could use Perl perhaps, but I haven't written Perl in 10 years.

If anyone wants to volunteer... ;)
# Posted By Raymond Camden | 8/12/08 10:25 AM
Mike Kelp's Gravatar Another suggestion is to install curl (installable on either windows or linux) and use a windows bat or linux script to make a request to your cf server with all the information you need.

It's relatively easy to do as curl makes the web request a simple one line call. Then you just pass in the arguments you want.
# Posted By Mike Kelp | 8/12/08 10:38 AM
David Herman's Gravatar Curl would be perfect. I've done exactly that from linux but had not thought about installing it via windows.
# Posted By David Herman | 8/12/08 10:43 AM