MSCOM WebCast Week…Q & A (Part 5) Troubleshooting & Debugging Web Hosting Environments

The webcast series ended with a tag team presentation by Jeff Stucky, Jim Dobbin, Khalil Nassar and Jeffery Johnson; all members of Jeff Stucky’s MSCOM Ops Debug team.

This web cast was kicked of by Jeff Stucky who re-introduced the MSCOM enterprise environment. For those of you that were fortunate enough to tune in to all or at least some of the weeks webcast series and you are saying to yourself “Wow I think I have heard that Introduction to the MSCOM Enterprise Environment every day this week!” You are correct. Since these webcast are available on demand after the live broadcast has been completed, we felt that they should be able to stand alone. So pardon us for the repetition.

Jim Dobbin was up next with an in depth look at Performance Monitor (PerfMon). He spoke about how to identify virtual memory pressure or fragmentation, memory leaks in applications, excessive garbage collection and how to automate the setup of collections. Jim gave examples of some of the perf counters that we use for memory investigation. He went into Virtual Memory usage, the causes of fragmentation and the important Process counter, Private Bytes and how it is use to investigate memory leaks. He illustrated some of the common causes of memory leaks and the tools used to diagnose them. From memory leaks, Jim jumped into the topic that is near and dear to the SE’s that run our sites: Garbage Collection. Especially excessive Garbage Collection, how expensive it is, what are the key counters to use to monitor it, the ratios of collections, the commons causes and the tools used to diagnose excessive GC. He ended his portion with the very useful topic of Automating Perfmon Collection.

Next up was Kahlil Nassar whose topic was how to Debug ASP.Net Exceptions. He led off with Managed Debugging Mechanisms where he related how he uses the Event Viewer, Exception Stats Via Perfmon, some great links to various debug Tools and finally some way of Catching Exceptions Real-time in the Debugger and Visual Studio. Probably the most compelling part of Kahlil’s presentation was the live Debugging Demos using Windbg and Visual Studio.

Jeffery Johnson followed to talk about one our favorite tools Log Parser. He began by essentially addressing why the SE’s love Log Parser…Sometimes, There Is Too Much Data, then explained the type of inputs and the key features of this tool affectionately known as the Electronic Swiss Army Knife. Jeffery is a master with Log Parser and he explained some of the Common Uses for Log Parser, gave some “simple” totally REAL WORLD examples of how he uses the tool to Look for Errors, Rollup Application Events, and Analyze the File System. He closed with some of Limitations of Log Parser, which are few indeed, but worth mentioning.

Jeff Stucky the MSCOM Ops Debug Team Lead was up last and had three tough acts to follow. His topic to round out the session and round out the week was on Server Performance Advisor (SPA). He nicely covered all the essentials: What is it? How does it work? When should I use it? How MSCOM has implemented it and ended with another live demonstration of SPA, a perfect ending for a great week of webcasts.

Friday’s topic was: Troubleshooting & Debugging Web Hosting Environments

The replay link: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032283697&Culture=en-US

Here are the questions that you asked;

DebugDiag is great for tracking down native leaks, also.
Indeed. It's a great tool.

I've had trouble with logman reading config files - have you seen that too?
What kind of error are you getting with logman? It's pretty sensitive on the syntax of the files.

Using custom object pools would increase the private bytes size. The private bytes queue does not decrease in size when the objects have been freeded. What can be done in this case?

I am not familiar with custom object pools or have not seen this problem in our environment. Is this in managed code?

How is your feedback on memory and GC management sent to the dev team ? How do your ensure the same mistake is not repeated in the applications?
We work directly with the product teams (IIS,ASP.NET, CLR, Windows, etc). We give our design feedback and work with them to produce a better implementation. We also work with our content providers to insure that they are using the platform appropriately. This includes reviewing code directly and producing documentation on correct memory management usage. You can expect much of this information to find its way to the MSCOM blog

I read somewhere that private bytes grow in size but do not decrease in size. So my question is if you a long term object (like a managed custom object pool) then will it allocate space in the private bytes? If yes, then how to decrease the size of the private bytes?
Yes, the CLR virtual allocates memory and commits it. it rarely frees its virtual memory segments but it can under memory pressure. Once the CLR commits that memory or counts it towards your private bytes limit, it will stay in private bytes. The CLR heap marks it as free and it is available for the CLR to re-use though.

Example of issue: Use the -config file option - it doesn't work if some switches are used like -f, -v, -max options
I'm not 100% positive, but I thought that was expected behavior as the -config should include all of our command line options. It's very possible it will accept some command line options outside of the config file, but that's probably just by chance.

Doesn't .writemem do the same thing?
Sorry, I missed the first part. Do the same thing as what? Sorry, same thing as !SaveModule... !SaveModule
Yes it is but I don’t think you need to provide the range just the start address.

Where can I get the log parser?
It is available from www.microsoft.com/downloads. https://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&DisplayLang=en

Been using Logparser for IIS - it is great - haven't used it for Performance log analysis though...
There isn't an in-box parser for Performance Logs default binary output. However if you use the CSV output for Performance Logs instead, it will work out of the box. If you really wanted to, it would not be difficult to implement a custom input type that parsed the binary output. When Performance was mentioned, we meant that we use it to parse the IIS logs to understand the performance of the system (requests per second per virtual directory).

Can you set user defined thresholds for the "weather report" in SPA?
Yes.