300 likes | 516 Views
ASP.NET Stability. St. Louis .NET Users Group April 25, 2005 Preston Page. What’s Great About .NET. Advanced Language Options Extensive Framework for Windows, Web and Device Programming Greatly Improved Productivity Enhanced Performance Simplified Deployment Best Stability Yet.
E N D
ASP.NET Stability St. Louis .NET Users Group April 25, 2005 Preston Page
What’s Great About .NET • Advanced Language Options • Extensive Framework for Windows, Web and Device Programming • Greatly Improved Productivity • Enhanced Performance • Simplified Deployment • Best Stability Yet
When Stability Fails… • End User Experience Suffers • Poor First Impression • Lost Credibility • Lost Opportunity • Lost Revenue • Increased Support Costs • Increased Operations Costs • Panic Mode, Escalations • Costly Rewrite
Six Stability Threats • Improperly Structured Error Handling • “Hidden” Memory Leaks • Non-Compliance with Coding Standards • Poor Performance • Database Issues • Inadequate Testing
Improper Error Handling • Cause of 80 – 90 % of Stability Problems • Missing Altogether? • Empty Catch Statement • Too Much Faith in Garbage Collection • No Finally Statement • Objects Out of Scope for Finally • Inadequate Object Cleanup • Missing Logging/Alerting • Recursion from Catch Statement • Style Problems
Anatomy of Try…Catch Try ' Starts a structured exception handler. ' Place executable statements that may generate ' an exception in this block. Catch [optional filters] ' This code runs if the statements listed in ' the Try block fail and the filter on the Catch 'statement is true. [Additional Catch blocks] Finally ' This code always runs immediately before ' the Try statement exits. End Try ' Ends a structured exception handler.
MSDN Help Sample Function GetStrings (ByVal FileName As String) As Collection Dim Strings As New Collection Dim Stream As System.IO.StreamReader Stream = System.IO.File.OpenText(FileName) Try While True Strings.Add(Stream.ReadLine()) End While Catch eos As System.IO.EndOfStreamException ' No action is necessary; end of stream Catch IOExcep As System.IO.IOException ‘ Unexpected IO Error Strings = Nothing ' Caller must test Null Finally Stream.Close End Try Return Strings End Function
Subtle Problems… Function GetStrings (ByVal FileName As String) As Collection Dim Strings As New Collection Dim Stream As System.IO.StreamReader Stream = System.IO.File.OpenText(FileName) (1) ‘ Scope Try While True (2) ‘ Deliberate Infinite Loop Strings.Add(Stream.ReadLine()) End While Catch eos As System.IO.EndOfStreamException (3) ‘ Empty ' No action is necessary; end of stream Catch IOExcep As System.IO.IOException ‘ Unexpected IO Error Strings = Nothing ' Caller must test Null Finally (4) Stream.Close End Try Return Strings (5) ‘ May Not Be Called End Function
Improvements Function GetStrings(ByVal FileName As String) As Collection Dim Strings As New Collection Dim Stream As System.IO.StreamReader Try Stream = System.IO.File.OpenText(FileName) (1) Do While Stream.Peek() >= 0 (2) Strings.Add(Stream.ReadLine()) Loop Catch e As System.Exception (3) LogException(e) Strings = Nothing ' Caller must test Null Finally (4) Stream.Close() GetStrings = Strings (5) Stream = Nothing Strings = Nothing End Try End Function
Hidden Memory Leaks • Do Not Immediately Cause Errors • Usually Pass Code Scans/Reviews • Many Are Not Well Documented • Luckily, Existence Can Be Determined by Load Testing
Ten Ways To Leak Memory • Improper Structured Error Handling • Implicit ADO/ADO.NET Connections Never Close Under Load • Failure to call Server.Clear when trapping errors in Application_OnError causes a memory leak and WP resets
Ten Ways To Leak Memory • Calling a delegate function with BeginInvoke() without calling a matching EndInvoke() • Failure to Set Objects to Null Or Nothing • Passing or setting an open ADO Connection object to a Property
Ten Ways To Leak Memory • Use of Response.Redirect in a Catch Statement leaves threads open, severely limits performance • Calling Transactional COM+ Components from ASP.NET • Failure to Close Database or Stream Objects
Ten Ways To Leak Memory • Failure to Properly Dispose of COM Interop and .NET COM Wrapper Objects Like: System.EnterpriseServices (COM+) System.DirectoryServices (ADSI)
Coding Standards Compliance • Standards Embody Time Tested Best Practices To Keep You Out Of Trouble • Compliance Reduces Support and Maintenance Costs • Avoid Common Structural Defects • Use FXCop To Scan Code • Adapt Rules To Particular Needs
FXCop Demo http://www.gotdotnet.com/team/fxcop/
FXCop Stability Rules* • Library design* • Localization • Interoperability* • Mobility • Portability • Naming conventions • Performance* • Security* • Usage*
Performance Problems • Cause Error Conditions Under Load • Reduce Scalability • Increase Hosting Costs • Increase Support Costs • Poor End User Experience • Catch With Load/Stress Tests
Common Database Issues • Structure Problems • Tuning “Opportunities” • Inefficient Data Access Code • Coding Standards Non-Compliance • Failure To Use Caching Options • Inadequate Maintenance • Catch With Load/Stress Tests
Test Methodology • Test Driven Development (NUnit) • Regular Code/Design Review (XP) • Unit Testing (NUnit, custom harness) • Functional Tests (formal plan) • User Acceptance Tests • Integration Tests (QC Servers) • Load Test (ACT, LoadRunner) • Stress Test (ACT, LoadRunner)
Formal Load Tests • Performed On Calibrated, Production Class Servers • Used To Judge Impact To Shared Web Environments • Use To Gate Deployment To Protect Infrastructure From Performance And Stability Problems • Usually Requires Operations Involvement, Special Infrastructure • Also Helps Uncover Configuration And Infrastructure Issues
Desktop Load Testing • Baseline Performance To Gauge Effectiveness Of Changes • Uncover Performance and Stability Issues As Early As Possible • Uncover Costly Design Flaws Early • Cheap And Easy Insurance
Can Determine Load Induced Error Memory Leaks Poor Performance Database Issues End User Experience Other Server Impact Cannot Determine Missing Structured Error Handling Adherence to Coding Standards Application Architecture Functional Issues Application Center Test
Machine.Config Tuning • Reduce idleTimeout from “Infinite” • Adjust responseDeadlockInterval for long running applications • Use <location/> Node To Enforce Best Practices and Control DEV, QC and PROD Settings
More Information • MSDN.Microsoft.com • Knowledge Base Articles • Patterns & Practices • www.ASP.NET • Starter Kits • Tools • www.Gotdotnet.com • FXCop • Help & Samples • Bibliography as Web Links • Send email to Preston
Questions? prestonpage@charter.net