Games, Programming, Web
Archive for June, 2010
Useful, free tools for .Net app memory profiling
Jun 8th
In the process of trying to slim down ChartPT‘s memory usage, I settled on these free tools:

VMMap – http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
Skip the many tutorials out there for the command line “vadump.exe” and use VMMap instead. The GUI presents information in a much more useful format (filterable, sortable).
First, check the list of loaded modules – some are explicit References in your project, others are dependencies of your references – and eliminate dependencies that you can do without. Next, check the “Private” and “Private Working Set” columns to identify areas that you may have some control over.
CLR 2.0 Profiler – http://www.microsoft.com/downloads/details.aspx?familyid=a362781c-3870-43be-8926-862b40aa0cd0&displaylang=en
Be sure to grab the “2.0″ flavor of the profiler. Many tutorials are old and link to the CLR 1 version of the .Net Profiler – that version won’t work with your app that builds against .Net 2.0 or newer.
Use this app to take a snapshot of your memory usage, then view allocations by object type and view allocations in a call graph.
Tutorial: http://msdn.microsoft.com/en-us/library/ff650691.aspx
My biggest culprit: WCF
System.ServiceModel and System.Web grab 5.5MB of private memory (14+MB of private WS on my machine) as soon as I instantiate a client proxy object. The same things happens using built-in HTTP bindings in a skeleton console app or in the WCF test client. The System.Web allocation could probably be eliminated by changing to TcpTransport.
Intel RAID5: pretty much worthless
Jun 2nd
I have a co-located server with a 3-disk RAID5 array (Intel ICH8 controller). Things seemed fine when I was setting up the server – pull a disk drive, re-insert, volume rebuilds, everything keeps working.
What I didn’t test though is how degraded the performance is while rebuilding. A disk array that was getting 100MB/s reads during normal operation is now getting < 1MB/s reads while rebuilding, and my database application can’t complete requests at that speed. To add insult to injury, the completely idle server with all disks healthy takes over 100 hours to rebuild a 2TB volume (~5.8MB/s).
Googling reveals dozens of similar horror stories with Intel RAID5 rebuilding. Do yourself a favor and rule out Intel’s RAID5 if you care about usable uptime.
Edit: I’ve changed to a 2-disk software RAID1 and am getting 80MB/s read during rebuilds.