Performance Troubleshooting EPiServer CMS Web Sites

Download Report

Transcript Performance Troubleshooting EPiServer CMS Web Sites

Performance Troubleshooting
EPiServer CMS Web Sites
Steve Celius – EPiServer Geek
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 
2
The cost of fixing performance problems
Cost
High
Intermediate
Low
Content
Infrastructure
Code
Thanks to Stuart Tuppert
5
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
6
Common Performance Problems
7
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
8
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
9
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
10
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”
11
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...
12
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
13
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
15
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
16
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
17
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
18
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
19
» 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:
b4zLrhD/g23bNieHrY8oV6EIezUiCzad
20
Misc...
21
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
22
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
23
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
24
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
25
Minimize Viewstate
» Think Green - Save Bandwidth
www.binaryfortress.com/aspnet-viewstate-helper
27
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
28
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
29
IIS Traffic Monitor
» Analyses IIS log files on the fly
» Simple and quick to use
» Uses Log Parser 2.2
http://niknak.org/software/IIsTrafficMonitor
30
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
31
32