Performance Troubleshooting EPiServer CMS Web Sites
description
Transcript of Performance Troubleshooting EPiServer CMS Web Sites
Performance Troubleshooting EPiServer CMS Web Sites
Steve Celius – EPiServer Geek
2
The Different Approaches to Performance
» This presentation focuses on troubleshooting existing sites with performance problems- Finding the cause and what you can do about it- The tools you need, and the common causes
» Performance is much much more- Clientside (everything not in your aspx) can be 80% of the
download time (when you’re not having server trouble)- I’ll cover this the next time
5
The cost of fixing performance problems
Content Infrastructure CodeLow
Intermediate
HighCost
Thanks to Stuart Tuppert
6
Finding the slow parts of your site
» Analyse IIS Logs- Check time_taken, # requests per hour / min (find the peaks)- Check for errors (404 / 500 status)
» LogParser & Visual Log Parser- Find the most requested pages- Find errors and long running requests- Easier with Visual LogParser
» Use Fiddler
» Performance Monitor- Lots of information on the net- Check cpu, req/s and req. queue
7
Common Performance Problems
8
The Large List Problem
» Large collections of pages will kill performance
» Understanding the cache is important- GetPage / GetChildren gets copies of PageData objects- Memory and CPU intense (lots of allocations and deallocations)
» Dynamic Properties – are they really neccessary?
» Pages with large strings (MainBody) is also a problem
» News archives will slowly kill your site
» Edit mode, expanding the tree loads two levels
9
Key Points
» The devil is in the details- You don’t TRULY know until you have profiled
» Things changes with content- What does not hurt you today might hurt you tomorrow
» Make sure you optimize the important things
10
Fixing it!
» Split up page lists with more then 250 pages into subtrees- Why 250? Practical reasons for editors- Use ”Date Containers” (/News/2007/June/My-news-article)- Moving pages using code is easy
• You don’t even need to recompile (no code behind file neccessary). See ArchiveBuilder.aspx
• If there are many pages, it will take some time
» Cache the list
» Move Dynamic Properties to the Start Page
» This problem has less impact in CMS 5
Easy Fix
11
FindPagesWithCriteria (FPWC)
» The most resource intensive operation in EPiServer
» Very useful, and most sites need it
» It will search the database, returning all pages that match the criterias
» ”With great power comes great responsibility”
12
Fixing it!
» Use log4net to detect FPWC calls- Log all FPWC calls to one file, with page id and search ref
» Limit the use of FPWC- Always think of alternative solutions- Limit the count of returned pages. The database call is not the
problem, working with a large resultset is
» Cache what you can cache- Enter EPiCode Cache Framework...
Medium Fix
13
EPiCode Cache Framework for EPiServer 4
» All sites will have some complex and/or heavy queries (not only FPWC)
» You should recognize them when you write the code
» Prevent these queries to run too often, cache the result
» Designed for low impact on existing code
» Download from:- www.coderesort.com/p/epicode/wiki/CacheFramework
Medium Fix
15
Use output caching
» Configurable, turn on in web.config
» Will cache the html output from your pages
» Can give you extreme performance
» Whole cache is invalidated on page publishing
» Not available for logged in users and POST
» ”VaryBy” – don’t vary by browser if you do not have to
» /3GB in boot.ini (?)
» It won’t fix your problems though
Easy Fix
16
Beware of what you cannot see
» RSS Feeds in particular- Long lists, requested often- Check the IIS log file- Use the cache framework
» Bots, Crawlers and Spiders- They might fill our output cache- Will visit the ”uninteresting” pages, like the sitemap and news
archive. Pages you hope no one visits
17
Scale out
» Buy more hardware
» Load balance on several servers
» Especially if the load is the problem
» Requires cache invalidation and file sync
» Session state (are you using it?)- State Server or SQL Server
Expensive Fix
18
Migrate to EPiServer CMS 5
» You will need to rewrite some of the code
» The Migration Tool helps with data migration- This is another presentation altogether
» See Marek Blotny’s excellent blog post on EPiServer 5 vs. EPiServer 4.61- CMS 5 scales much better
Expensive Fix
19
Important Tools
» Fiddler
» JetBrains DotTrace
» WebLoad / Jmeter / WAPT Load Testing
» log4net
» Trace Diagnostics
» IIS Diagnostics
» ASP.NET Viewstate Helper
» Performance Viewer (Windows)
» LogParser & Visual Log Parser
» IIS Traffic Monitor
20
» Special offer to all EPiServer Developer Summit 2008 attendees
» Extended trial period (10 30 days)
» Offer lasts for 30 days – from now!
» Read more, download evaluation and order on:http://www.jetbrains.com/profiler
» Eval and Coupon code:
15%
b4zLrhD/g23bNieHrY8oV6EIezUiCzad
Discount
21
Misc...
22
Release Mode
» Compile the site in Release Mode (in VS)
» <compilation debug=”false” /> in web.config
» This will give you ~10% performance gain
» ASP.NET will not time out with debug = true- Just as important as the performance gain
» WebResources.axd scripts can be cached
» Site will use less memory
23
Enterprise Gotcha
» Same source code, many different web sites- One place to deploy code- One config file to update
» But...- Config changes will restart all sites
• This is heavy lifting!
- Logging with log4net is a pain• All sites uses same config, with file locking, first site to start ”wins”.
Without locking, log file is a mess
- One change affects all sites, needs recompiling
24
Enterprise Gotcha, contd.
» Use deployment scripts to copy files to all sites- With delays to allow recompilation and startup peaks- This also goes for web.config
25
IIS Settings
» Log more- Review the IIS log settings. Turn on most log settings- Remember ”time-taken”
» Process Recycling – dont rely on it- It will only help on memory or resource leaks, temporarily- More often used on .NET 1.0/1.1 sites than 2.0 and up
» Web Gardens- No, no and no! It can actually hurt performance
27
Minimize Viewstate
» Think Green - Save Bandwidth
www.binaryfortress.com/aspnet-viewstate-helper
28
Links
» Performance Tuning and Optimization of EPiServer CMS (Fredrik Haglund)
» EPiServer 5 vs. EPiServer 4.61 part I - GetPage() (Marek Blotny)
» The challenges of a high traffic site with EPiServer (Adam Najmanowicz)
» Performance Pitfalls in EPiServer (Mats Hellström)
» The Output Cache - When and Why (Daniel van den Tempel)
» Caching Custom Data in EPiServer
» EPiServer Labs
29
Per Request Cache
» Don’t do expensive operations more than once in a request
» Example:- Checking if the current page is in a given structure
» Refactor into utililty methods
» Keep the impact on existing code low
» Store in HttpContext.Current.Items- Request bound, thread safe
Medium Fix
30
IIS Traffic Monitor
» Analyses IIS log files on the fly
» Simple and quick to use
» Uses Log Parser 2.2
Tool
http://niknak.org/software/IIsTrafficMonitor
31
Use Fiddler to see real traffic
» Server performance is important, but don’t neglect the client side performance
» Check the Yahoo Performance Blog (and YSlow)- Percieved performance is also important!
» Make sure the clients cache effiently
32