Share-n-dipity

SharePoint serendipity is the effect by which one accidentally discovers something fortunate, especially while looking for something else entirely. In this case, it is the occassional musings, observations, and Ouija board readings about the phabulously

Adding Throttling Counters in SharePoint 2010

Adding Throttling Counters in SharePoint 2010

  • Comments 3
  • Likes

Http throttling is a new feature in SharePoint 2010 that allows the server to “back off” of serving requests when it is too busy.  Every 5 seconds a job will run that will check the server resources compared to the levels configured.  By default the Server CPU, Memory, Request in Queue and Request wait time are being monitored.   After 3 unsuccessful checks, the server will enter a throttling period and will remain in this state until a successful check is completed.  Requests generated prior to the server entering into the throttling mode will be completed.  This will, in theory, keep users from losing any current work when the server begins to throttle requests.  Any new HTTP GET and Search Robot request will generate a 503 error message and will be logged in the event viewer.  Also while the server is in a throttling period no new timer jobs will be started.
You can enable or disable throttling in central admin.  It is managed on a per web application basis.  Go into central admin and click on Manage Web Applications under Application Management.  Click on a web app to select it, then click on the General Settings drop down and select the Resource Throttling menu.  About half way down the page is a section titled HTTP Request Monitoring and Throttling, where you will find a radio button option to turn it off or on (it’s on by default).
You have to use PowerShell to actually view and change the counter parameters that determine whether the web app should be throttled.  To view the list of counters and their parameter values use the Get-SPWebApplicationHttpThrottlingMonitor cmdlet; for the Identity parameter pass in the Url to the web application you want to check.  It will display something that looks like this:
PS C:\backups> Get-SPWebApplicationHttpThrottlingMonitor -identity http://o14
Category                    : Processor
Counter                     : % Processor Time
Instance                    : _Total
MinValue                    : 0
MaxValue                    : 99
UpgradedPersistedProperties : {}
 
Category                    : Memory
Counter                     : Available Mbytes
Instance                    :
MinValue                    : 20
MaxValue                    : 3.402823E+38
UpgradedPersistedProperties : {}
 
Category                    : ASP.NET
Counter                     : Requests Queued
Instance                    :
MinValue                    : 0
MaxValue                    : 500
UpgradedPersistedProperties : {}
 
Category                    : ASP.NET
Counter                     : Request Wait Time
Instance                    :
MinValue                    : 0
MaxValue                    : 30000
UpgradedPersistedProperties : {}
 
To change an existing counter, use the Set-SPWebApplicationHttpThrottlingMonitor cmdlet.  For example, here’s how I would change the throttling limit for CPU utilization to 80%:
 
Set-SPWebApplicationHttpThrottlingMonitor -Identity http://o14 -Category "Processor" -Counter "%
Processor Time" -Instance "_Total" -MaxThreshold 80 -MinThreshold 0
 
What if you want to add a new performance counter to monitor?  You can do that as well, but it’s not quite as straightforward.  You can do this through the object model, but fortunately PowerShell makes that quite achievable.  Here’s an example of adding a new counter for interrupts a second to the throttling set:
 
$uri = new-object System.Uri("http://o14")
$webApp=[Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($uri)
$throttle=$webApp.HttpThrottleSettings
$throttle. AddPerformanceMonitor ("Processor", "Interrupts/sec", "_Total", 2300, 0)
$throttle.Update()
 
Now once I’ve completed that, if I run the  Get-SPWebApplicationHttpThrottlingMonitors cmdlet again it reflects the new counter I’ve added:
 
PS C:\backups> Get-SPWebApplicationHttpThrottlingMonitor -identity http://o14
 
Category                    : Processor
Counter                     : % Processor Time
Instance                    : _Total
MinValue                    : 0
MaxValue                    : 99
UpgradedPersistedProperties : {}
 
Category                    : Memory
Counter                     : Available Mbytes
Instance                    :
MinValue                    : 20
MaxValue                    : 3.402823E+38
UpgradedPersistedProperties : {}
 
Category                    : ASP.NET
Counter                     : Requests Queued
Instance                    :
MinValue                    : 0
MaxValue                    : 500
UpgradedPersistedProperties : {}
 
Category                    : ASP.NET
Counter                     : Request Wait Time
Instance                    :
MinValue                    : 0
MaxValue                    : 30000
UpgradedPersistedProperties : {}
 
Category                    : Processor
Counter                     : Interrupts/sec
Instance                    : _Total
MinValue                    : 0
MaxValue                    : 2300
UpgradedPersistedProperties : {}
 
So there you go – a little background about another new feature in SharePoint 2010 that’s designed to make your farm more resilient.  It includes the flexibility to adjust and add to the performance counters that are used to determine when to go into throttle mode based on your business needs and usage characteristics.
 
ONE ADDITIONAL NOTE:  You may find that if you add the throttling counter I demo'd in this post, that your site may start throwing a "server is busy" message every time you hit the site.  So here's the last tip - how to remove a throttle monitor:
 
PS C:\Users\speschka> $uri = new-object System.Uri("http://o14")
PS C:\Users\speschka> $webApp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($uri)
PS C:\Users\speschka> $throttle = $webApp.HttpThrottleSettings
PS C:\Users\speschka> $throttle.RemovePerformanceMonitor("Processor","Interrupts/Sec")
PS C:\Users\speschka> $throttle.Update()
 
Comments
Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment