|Dr. Zhiming Xue interviews Steve Michelotti, senior solution architect at e.magination. Steve discusses what his team had to do to build a highly available 64-bit based web solution that supports a demanding service level agreement (SLA): more than 3 billion daily transactions, 99.99% of all transactions under 250 ms response time.
One particular challenge they faced was dealing with the garbage collection (GC) process that is normally managed by the CLR of the .NET framework.
With potentially millions of .NET objects in memory, a generation 2 GC can take 5 to 8 seconds on a 64-bit server with 16 GB memory, which quickly breaks the SLA.
At their first attempt Steve and his team tried to reduce the frequency of GC occurrence. They applied several techniques such as delta refresh, minimization of boxing and un-boxing, use of object pooling, optimization of the large object heap, and an implementation of flow control between the web tier and the application tier.
To ultimately address the challenge, they worked closely with the Premier Field Engineer team and the CLR team at Microsoft, which introduced a new feature called GC notification. With the new feature, which will be released in a future .NET service pack, they were able to deterministically take off a server from servicing any web request when a GC was pending on the server and put it back to service rotation when ready.