Performance Monitor Logs…Snappy Set Up for Pure Baseline Goodness!

Your boss walks in and fixes you with that icy stare and demands to know, “Why are the ASP.Net request/sec spiking? What the [expletive deleted] is going on around here? Are we getting attacked?”

What is your response going to be…stutter, stammer start to sweat and weakly say “Uh…is it really spiking? I’ll get right on this and uh, I’ll uh…ummm… I’ll get back to you just I soon as I can?” All the while your brain goes into overdrive…MY STARS, are we getting attacked? Why does he think we are spiking? What is our normal ASP.Net req/sec? Is the SQL server down? Is that job working for my uncle’s Septic Tank Service still open?YIKES!!!

Or would you rather calmly return that frigid manegerial glare with a knowing smile, the sun sparkling on your teeth and say, “Well boss, let me check what our current ASP.Net req/sec actually are and compare that with our current baseline <subliminally saying to yourself: oh yeah, that sweet old Perf baseline that is based on the past six full months of hourly PerfMon Log data…heh, heh heh>.

Here is an easy way to set up Perf Mon Logs using Logman.exe to help you create that very necessary and sometimes backside-saving PERF Baseline.

From a command line run this:

logman create counter <LOGFILE NAME> -s %1 -f bincirc -max 300 -si 3 –v -o “e:\perflogs\<LOGFILE NAME>” –cf “\\<your_server_name>\Performance\PerflogCollection\counters.config” logman start <LOGFILE NAME>  -s %1

This example will create binary circular perf logs (*.blg) that contains counters that are listed in the counters.config file. Counters that you want must be added one per line, simply delete what you do not need, or add more in if you want more. What’s so special about binary circular log files? Well nothing really…for us we use it to record data continuously to the same log file, overwriting previous records with new data when the file reaches its maximum size.

We call our config file counters.config, but this is totally up to your discretion. Here is what we put in ours:

“\.NET CLR Exceptions(*)\# of Exceps Thrown / sec”

“\.NET CLR Loading(*)\Current Assemblies”

“\.NET CLR Memory(*)\# Gen 0 Collections”

“\.NET CLR Memory(*)\# Gen 1 Collections”

“\.NET CLR Memory(*)\# Gen 2 Collections”

“\.NET CLR Memory(*)\# Induced GC”

“\.NET CLR Memory(*)\% Time in GC”

“\.NET CLR Memory(*)\Gen 0 heap size”

“\.NET CLR Memory(*)\Gen 1 heap size”

“\.NET CLR Memory(*)\Gen 2 heap size”

“\.NET CLR Memory(*)\Large Object Heap size”

“\Active Server Pages\Requests Queued”

“\Active Server Pages\Requests/Sec”

“\ASP.NET Applications(__Total__)\Requests/Sec”

“\ASP.NET\Requests Current”

“\ASP.NET\Requests Queued”

“\Memory\Available MBytes”

“\Memory\Pool Nonpaged Bytes”

“\Memory\Pool Paged Bytes”

“\PhysicalDisk(*)\Current Disk Queue Length”

“\PhysicalDisk(*)\Disk Reads/sec”

“\PhysicalDisk(*)\Disk Read Bytes/sec”

“\PhysicalDisk(*)\Disk Writes/sec”

“\PhysicalDisk(*)\Disk Write Bytes/sec”

“\Process(w3wp)\% Processor Time”

“\Process(w3wp#1)\% Processor Time”

“\Process(w3wp#2)\% Processor Time”

“\Process(w3wp#3)\% Processor Time”

“\Process(w3wp#4)\% Processor Time”

“\Process(w3wp#5)\% Processor Time”

“\Process(w3wp#6)\% Processor Time”

“\Process(w3wp#7)\% Processor Time”

“\Process(w3wp#8)\% Processor Time”

“\Process(w3wp#9)\% Processor Time”

“\Process(w3wp)\Private Bytes”

“\Process(w3wp#1)\Private Bytes”

“\Process(w3wp#2)\Private Bytes”

“\Process(w3wp#3)\Private Bytes”

“\Process(w3wp#4)\Private Bytes”

“\Process(w3wp#5)\Private Bytes”

“\Process(w3wp#6)\Private Bytes”

“\Process(w3wp#7)\Private Bytes”

“\Process(w3wp#8)\Private Bytes”

“\Process(w3wp#9)\Private Bytes”

“\Process(w3wp)\Virtual Bytes”

“\Process(w3wp#1)\Virtual Bytes”

“\Process(w3wp#2)\Virtual Bytes”

“\Process(w3wp#3)\Virtual Bytes”

“\Process(w3wp#4)\Virtual Bytes”

“\Process(w3wp#5)\Virtual Bytes”

“\Process(w3wp#6)\Virtual Bytes”

“\Process(w3wp#7)\Virtual Bytes”

“\Process(w3wp#8)\Virtual Bytes”

“\Process(w3wp#9)\Virtual Bytes”

“\Process(w3wp)\ID Process”

“\Process(w3wp#1)\ID Process”

“\Process(w3wp#2)\ID Process”

“\Process(w3wp#3)\ID Process”

“\Process(w3wp#4)\ID Process”

“\Process(w3wp#5)\ID Process”

“\Process(w3wp#6)\ID Process”

“\Process(w3wp#7)\ID Process”

“\Process(w3wp#8)\ID Process”

“\Process(w3wp#9)\ID Process”

“\Processor(*)\% Processor Time”

“\Processor(*)\DPCs Queued/sec”


“\TCPv4\Segments Received/sec”

“\TCPv4\Segments Sent/sec”

“\Web Service Cache\Current URIs Cached”

“\Web Service Cache\Kernel: Current URIs Cached”

“\Web Service Cache\Kernel: URI Cache Hits %”

“\Web Service(_Total)\Connection Attempts/sec”

“\Web Service(_Total)\Current Connections”

“\Web Service(_Total)\Get Requests/sec”





Comments (2)

  1. Shawn Oatley says:

    Here are some additional URLS that helped me set this up:

    Parameter information for Logman:

    Start and Stop Parameters for Logman:

    I have one question though… When my server restarts, will the logman automatically start with it or do I have to manually start it?

  2. MSCOM says:

    They do not restart by default, but you can easily set up a job to run a cmd that will kick them off. You can configure the Schedule Tab when you set up the logs to start at a specific time but if your server reboots you will have no logs until the Start Log time comes around again.