<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xebia Blog &#187; Monitoring</title>
	<atom:link href="http://blog.xebia.com/category/monitoring/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Web performance in seven steps: Summary and Conclusions</title>
		<link>http://blog.xebia.com/2010/01/20/web-performance-in-seven-steps-summery-and-conclusions/</link>
		<comments>http://blog.xebia.com/2010/01/20/web-performance-in-seven-steps-summery-and-conclusions/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 20:00:22 +0000</pubDate>
		<dc:creator>Jeroen Borgers</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Requirements Management]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3962</guid>
		<description><![CDATA[Previous time I blogged about the last step of the seven steps, step 7: Share the responsibility for the whole chain, a non-technical but rather a communication and behavior thing which I found crucial for success. We now have reached the end of this series and I&#8217;ll sum up the topics we&#8217;ve dealt with and [...]]]></description>
			<content:encoded><![CDATA[<p>Previous time I blogged about the last step of the seven steps, <a href="http://blog.xebia.com/2009/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/">step 7: Share the responsibility for the whole chain</a>, a non-technical but rather a communication and behavior thing which I found crucial for success. We now have reached the end of this series and I&#8217;ll sum up the topics we&#8217;ve dealt with and draw some conclusions. <span id="more-3962"></span></p>
<p>In this growing on line world with demanding customers it has become essential that services provided on the web are <a href="http://blog.xebia.com/2009/05/25/web-performance-in-seven-steps/">always available and always fast enough</a>. This is often challenging to developers and operators: <a href="http://blog.xebia.com/2009/06/02/web-performance-in-seven-steps-how-performance-problems-manifest-themselves/">performance problems manifest themselves in various ways</a>, like in frustration, loss of revenue and disruption of development; and just adding hardware is a doubtful solution. </p>
<p>The question is: how can we as developers and operators assure that our web site is always available and always fast? My answer is: you need the right approach. I present that approach: measure, don’t guess; seven steps to performance success. These seven steps are as follows:</p>
<ul>
<li><a href="http://blog.xebia.com/2009/06/10/web-performance-in-seven-steps-step-1-define-performance-requirements/">Step 1: Define performance requirements</a>;</li>
<li><a href="http://blog.xebia.com/2009/06/15/web-performance-in-seven-steps-step-2-execute-a-proof-of-concept/">Step 2: Execute a proof of concept</a>;</li>
<li><a href="http://blog.xebia.com/2009/06/29/web-performance-in-seven-steps-step-3-test-representatively/">Step 3: Test representatively</a>;</li>
<li><a href="http://blog.xebia.com/2009/07/22/web-performance-in-seven-steps-step-4-test-continuously/">Step 4: Test continuously</a>;</li>
<li><a href="http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/">Step 5: Monitor and diagnose</a>;</li>
<li><a href="http://blog.xebia.com/2009/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/">Step 6: Tune based on evidence</a>;</li>
<li><a href="http://blog.xebia.com/2009/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/">Step 7: Share the responsibility for the whole chain</a>.</li>
</ul>
<p>This approach provides a pro-active way of working which my customers appreciate as valuable. It can actually be leveraged to assure high performance all the time, for virtually any on- and off-line application.</p>
<p>This blog series has been an interesting journey for me. Some time ago we presented our <a href="http://blog.xebia.com/2007/04/30/ejapp-top-10-countdown-wrap-up/">EJAPP Top 10 of performance problems</a>. Now we have added this approach of seven steps to help assure your applications performance. </p>
<p>It has worked for us and our customers. How does this all work for you in practice? We’d like to hear your feedback.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/01/20/web-performance-in-seven-steps-summery-and-conclusions/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F01%2F20%2Fweb-performance-in-seven-steps-summery-and-conclusions%2F&amp;title=Web%20performance%20in%20seven%20steps%3A%20Summary%20and%20Conclusions" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/01/20/web-performance-in-seven-steps-summery-and-conclusions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web performance in seven steps; Step 5: Monitor and diagnose</title>
		<link>http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/</link>
		<comments>http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 22:38:36 +0000</pubDate>
		<dc:creator>Jeroen Borgers</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[JAMon]]></category>
		<category><![CDATA[JARep]]></category>
		<category><![CDATA[Opensource]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3076</guid>
		<description><![CDATA[Last time I blogged about the importance of continuous performance testing. When you write and run performance tests continuously, just like unit tests, you get early performance insights in new and changed features of your software. This will minimize surprises and be more productive. Now I’ll blog about monitoring and diagnostics. When a new version [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I blogged about the importance of <a href="http://blog.xebia.com/2009/07/22/web-performance-in-seven-steps-step-4-test-continuously/">continuous performance testing</a>. When you write and run performance tests continuously, just like unit tests, you get early performance insights in new and changed features of your software. This will minimize surprises and be more productive. Now I’ll blog about monitoring and diagnostics.</p>
<p>When a new version of the software is released into the production environment, the question always is: will it actually perform like we saw in testing and acceptance environments? And we keep our fingers crossed.<br />
<span id="more-3076"></span>It is therefore important in such cases to monitor carefully what happens with the performance and availability of the application. </p>
<p>There are all sorts of tools and services available to monitor your web site for availability and response times of web pages, like <a href="http://www.uptrends.com">Uptrends</a>, <a href="http://site24x7.com">Site24x7</a> and <a href="http://www.dotcom-monitor.com/">Dotcom-monitor</a>. They look at the application as a black box and measure once in several minutes. This is very useful, however, to be able to take the right measures in case of a calamity, it is necessary to be able to pin-point the problem. It is therefore essential to monitor on multiple levels and on multiple internal application parts. For levels, think of hardware, OS, app server, web server, database and application. Measuring internal Java application parts can be achieved with <a href="http://jamonapi.sourceforge.net/">JAMon</a>. JAMon is an open source timing API and basically works like a stopwatch with a start() and stop() call. Every method which you want to measure gets its own stopwatch (or counter) . We deal with JAMon as one of the tools to measure time in the first day of our <a href="http://www.xebia.com/events/speeding-java-applications-0">Speeding up Java Applications course</a>.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/08/interceptor.jpg" alt="JAMon API start() and stop() calls in a Spring interceptor" title="JAMon API start() and stop() calls in a Spring interceptor" width="490" height="232" class="alignright size-full wp-image-3079" /><br />
Figure: JAMon API start() and stop() calls in a Spring interceptor</p>
<p>Each counter maintains statistics like the number of calls, average, maximum, standard deviation, etc. , and this information can be requested for. The individual calls are not stored. This approach results in low memory usage and a low performance overhead, at the cost of some information loss. Recently, a new competitor of JAMon appeared: <a href="http://code.google.com/p/javasimon/">Simon</a>. It claims to be JAMon’s successor, although it has (had) some <a href="http://day-to-day-stuff.blogspot.com/2008/12/evaluating-simon.html">infancy issues</a>. </p>
<p>Then there is the question: where to measure? The answer is that it makes most sense to measure all incoming calls like web requests and outgoing calls to for instance the database. Furthermore, parts like Spring beans, EJB’s and DAO’s. Measuring these parts is not only relevant with new releases, but also trends and usage spikes are useful to monitor in order to solve quickly and prevent various problems. Open source tool <a href="http://sourceforge.net/projects/jarep/">JARep</a> offers the possibility to store JAMon data from a cluster in a database and monitor trends and changes graphically. </p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/08/jarep-non-ag-nohits-vo1.jpg" alt="JARep shows the increasing response time trend starting October 15, on two of the four production JVMs." title="JARep shows the increasing response time trend starting October 15, on two of the four production JVMs." width="620" height="571" class="alignleft size-full wp-image-3092" /><br />
Figure: JARep shows the increasing response time trend starting October 15, on two of the four production JVMs.</p>
<p><strong>Customer story</strong></p>
<p>We had the following situation at our customer. Processing an order slowly took more and more time over a period of several weeks. This happened while no new release was introduced and no other page became slower. This behavior was a complete mystery, until we looked deeper in our JARep monitoring tool. The troublemaker turned out to be a DAO executing a prepared statement with only part of the variables being bind-variables. With help of JARep, we could look back to where the trend of increasing response time started so when the problems started. We could also see that this problem was only present at one of the two machines. With this knowledge and his log book, the operator could remember that on the start date he had experimented with a new JDBC driver to try to solve a memory leak. This seemed not to change anything concerning performance, what actually was the case in the beginning. Problems only appeared slowly during the following weeks. They had left the new driver in place, manifesting itself as a time bomb later. When we put back the old driver, the problem disappeared. This real life experience shows the usefulness of monitoring and trend analyses on application internals.</p>
<p>Next time I&#8217;ll blog about <a href="http://blog.xebia.com/2009/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/">evidence based tuning</a>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F08%2F31%2Fweb-performance-in-seven-steps-step-5-monitor-and-diagnose%2F&amp;title=Web%20performance%20in%20seven%20steps%3B%20Step%205%3A%20Monitor%20and%20diagnose" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/category/monitoring/feed/ ) in 0.54769 seconds, on Feb 9th, 2012 at 5:25 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 6:25 pm UTC -->
