<?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; Performance</title>
	<atom:link href="http://blog.xebia.com/category/performance/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>Size does matter! Be careful to use velocity as measure for improvement</title>
		<link>http://blog.xebia.com/2011/11/24/size-does-matter-be-careful-to-use-velocity-as-measure-for-improvement/</link>
		<comments>http://blog.xebia.com/2011/11/24/size-does-matter-be-careful-to-use-velocity-as-measure-for-improvement/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 17:00:17 +0000</pubDate>
		<dc:creator>Jarl Meijer</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Uncategorized]]></category>

	<!-- AutoMeta Start -->
	<category>walls</category>
	<category>steady</category>
	<category>competences</category>
	<category>walls</category>
	<category>steady</category>
	<category>competences</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8043</guid>
		<description><![CDATA[Imagine you are playing a game of rugby against some blacksuited guys who are doing some odd dancing and screaming exercise before you finally get to start playing. You win the game 27 – 3. You can imagine it wasn’t just one beer at the big party after the match and you did not see [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine you are playing a game of rugby against some blacksuited guys who are doing some odd dancing and screaming exercise before you finally get to start playing. You win the game 27 – 3. You can imagine it wasn’t just one beer at the big party after the match and you did not see home before early morning. A year later your team finds itself in the same stadium against the same guys, doing the same little piece of folk dancing, just a little louder than last year. This time you win 27 – 6, only. The coach and the crowd are going mad: your team lost half of its performance in just a year time! You take a shower, no beers, go home and go to bed early. Measuring the improvement in performance is easy! <span id="more-8043"></span></p>
<p><strong>Acceleration is a must</strong></p>
<p>Scrum advocates the use of pokercards quoting the estimation of work items in story points. Velocity is the total number of story points a team can take on in a sprint.</p>
<p>Next to using velocity for planning, velocity is often promoted as a measure for improvement. Learning, solving impediments, implementing improvements, more fun and better team play all should lead to an increased velocity over sprints. Steady or even declining velocity is a signal of a mediocre, non-improving team.</p>
<p>The theory and actual practice of estimations in story points diverge, which makes drawing performance conclusions out of velocity records a tricky business.  The question is whether velocity should be used as a measure of improvement at all. This blog explains why you should not, or at least that doing so should be reserved ‘for trained professionals use only’.</p>
<p><strong>How do you like your Story Points? </strong></p>
<p>In a last-summer blog (June 21 2010, <a href="http://blog.mountaingoatsoftware.com/its-effort-not-complexity">its-effort-not-complexity</a>) Mike Cohn qualifies the relabeling of story point to complexity points as ‘wrong’. He states: “Story points are not about the complexity of developing a feature; they are about the effort required to develop a feature.”</p>
<p>If we follow Mike, story points are a function of complexity, amount of work (‘sheer volume of work’) and expertise (of the team on the domain). Maybe uncertainty should be part of the formula as well. The consequence of this definition is that the amount of work reduces when the team gains more expertise, uses smarter solutions or can profit from structural improvements.</p>
<p>So following Freyr in his first comment on Mike’s blog “a story last year which was a 5, now has some process improvements and this year is a 2. The velocity of the team stays steady, story points per story decrease.” Let’s call this method A.</p>
<p>This way to determine story points differs from the way I was raised with: user stories are estimated relative to a fixed (set of) reference user stories. A story of 5 last year is still a 5. Implemented improvements (whether technical or on teamwork, skills, knowledge or competences) should lead to higher performance so that we can do more such stories in one sprint. Velocity increases, story points per story stay steady. Let’s call this method B.</p>
<p><strong>Count on Story Points while planning</strong></p>
<p>In Scrum estimations and velocity recordings are primarily used for planning purposes. User stories are estimated in story points, and the number of stories planned in sprint depends on the sum of story points of these stories and the velocity of the last sprint or two. Furthermore, story points and velocity records can likewise be used for release planning.</p>
<p>Whether using method A or B a team can properly predict the result of a sprint. And in both cases one can calculate and forecast the number of sprints needed to finish a selected set of user stories in a release.</p>
<p>However, using method A the team will need to deal with new competences leading to lower estimates, even for user stories estimated in ‘the past’. Using method B the team needs to deal with improving velocities when predicting the number of sprints needed for a set Release.</p>
<p><strong>Measuring improvement is a different story</strong></p>
<p>Scrum promises an increase in productivity / performance. A growth factor of 4 even up to 10 is often quoted. Soon after the introduction of Scrum management requests proof of this growth, especially after they have been baffled with all formerly hidden impediments in their organisation: Scrum does not solve your problems, but reveals them! Putting a heavy burden on the belief in reaching the benefits promised.</p>
<p>Very often velocity is used to measure this improvement. <em>This is only valid if we keep the story points for the same kind of stories steady</em>, as shown in method B. In fact this should only be done if we restrict the formula of estimating story points to size, the size of a piece of work. This is shown by an example by Jose in another comment on Mike’s blog:</p>
<p><em>Imagine that we have a team of painters and their job is to paint walls. The team sees pictures of the walls and they estimate the wall area to be painted. There are small walls, medium walls and some really big walls. The team estimates each area using relative points. They start painting the walls and after some time, they are able to calculate how many points they can do on each sprint, the velocity. Now the customer can calculate how long the project will take, using the velocity and the product backlog.</em></p>
<p>The problem is that determining size is one of the most difficult challenges in the field of software development. There certainly are environments where this works fine. Recently we coached a team in a Business Intelligence environment, who were able to define their workitems in predefined steps, and who had derived formula’s from experience to calculate the size of work for each step. Their estimations were remarkably accurate.As soon as the painters get better tools and paint, or gain in experience and concentration they will be able to color bigger walls in the same amount of time.</p>
<p>For most other teams the thing coming closest is Function Point Analysis, which is far from easy and a not a common competence in Development Teammembers.</p>
<p>About every other team we have seen estimates effort. Better tooling, a higher grade of automation, more competences, all lead to less effort and are discounted in the final story points. Fine for planning, but using velocity trends based on these story points is a very tricky business and will not reflect the growth teams realized to the amount they deserve.</p>
<p><strong>The point of this story: size matters </strong></p>
<p>Story points are calculated using different methods and formulas. If your formula does not equal just sheer size, you should not use your velocity measures as an indicator for performance growth. Like you cannot learn your performance development by simply comparing the scores of two games of rugby. If there are many other factors influencing the scores you will do wrong to the team and you should stick to use these records &#8216;to start a conversation&#8217; only. Measuring the improvement in performance ain’t easy.</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/2011/11/24/size-does-matter-be-careful-to-use-velocity-as-measure-for-improvement/"></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%2F2011%2F11%2F24%2Fsize-does-matter-be-careful-to-use-velocity-as-measure-for-improvement%2F&amp;title=Size%20does%20matter%21%20Be%20careful%20to%20use%20velocity%20as%20measure%20for%20improvement" 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/2011/11/24/size-does-matter-be-careful-to-use-velocity-as-measure-for-improvement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting started with Node.js, npm, Coffeescript, Express, Jade and Redis</title>
		<link>http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/</link>
		<comments>http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 13:40:19 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Node.js npm coffeescript express java redis]]></category>

	<!-- AutoMeta Start -->
	<category>redis</category>
	<category>redis</category>
	<category>app2</category>
	<category>3000</category>
	<category>express</category>
	<category>express</category>
	<category>1337</category>
	<category>sudo</category>
	<category>redis</category>
	<category>redis</category>
	<category>app2</category>
	<category>3000</category>
	<category>express</category>
	<category>express</category>
	<category>1337</category>
	<category>sudo</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7001</guid>
		<description><![CDATA[To celebrate my move to the Agile Consulting and Training division of Xebia I thought it would be very appropriate to start playing with some hip new technologies. From their homepages: Node.js: Evented I/O for V8 JavaScript. (A framework for building completely non-blocking servers in Javascript) NPM: A package manager for node. CoffeeScript: A little [...]]]></description>
			<content:encoded><![CDATA[<p>To celebrate my move to the Agile Consulting and Training division of Xebia I thought it would be very appropriate to start playing with some hip new technologies.</p>
<p>From their homepages:</p>
<p><a href="http://nodejs.org/">Node.js</a>: Evented I/O for V8 JavaScript. (A framework for building completely non-blocking servers in Javascript)<br />
<a href="http://npmjs.org/">NPM</a>: A package manager for node.<br />
<a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a>: A little language that compiles into JavaScript<br />
<a href="http://expressjs.com/">Express</a>: High performance, high class web development for Node.js<br />
<a href="http://jade-lang.com/">Jade</a>: Node Template Engine<br />
<a href="http://www.redis.io/">Redis</a>: An open source, advanced key-value store</p>
<p>In this guide I will take very small steps so that you can verify that you are check whether you are still on track.<br />
The result is an extremely performant, scalable and lightweight alternative for web development.</p>
<p><span id="more-7001"></span></p>
<p>So I installed a brand new Ubuntu 11.4 virtual machine and got started. After following some tutorials, googling and some tweaking this is the step-by-step guide I came up with.</p>
<p><strong>Installing Node.js</strong></p>
<p><code>$ sudo apt-get install python-software-properties<br />
$ sudo add-apt-repository ppa:jerome-etienne/neoip<br />
$ sudo apt-get update<br />
$ sudo apt-get install nodejs<br />
</code></p>
<p><strong>Installing npm</strong></p>
<p><code>$ apt-get install curl<br />
$ curl http://npmjs.org/install.sh | sudo sh<br />
</code></p>
<p><strong>Node.js Hello World</strong></p>
<p><code>$ mkdir helloworld<br />
$ cd helloworld<br />
$ vi helloworld.js<br />
</code></p>
<p>insert</p>
<pre class="brush: jscript; title: ; notranslate">
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337);
console.log('Server running at http://127.0.0.1:1337/');
</pre>
<p><code>$ node helloworld.js</code></p>
<p>check http://127.0.0.1:1337</p>
<p><strong>Add Coffeescript</strong></p>
<p>Writing all that javascript is going to lead to lots and lots of brackets, semi-colons and parantheses. Let&#8217;s use Coffeescript to make our code readable again.</p>
<p><code>$ sudo npm install -g coffee-script<br />
$ cd ..<br />
$ mkdir hellocoffee<br />
$ cd hellocoffee<br />
$ vi hellocoffee.coffee<br />
</code></p>
<p>insert </p>
<pre class="brush: jscript; title: ; notranslate">http = require &quot;http&quot;
http.createServer( (req, res) -&gt;
  res.writeHead 200, {&quot;Content-Type&quot;: &quot;text/plain&quot;}
  res.end &quot;Hello Coffee!!&quot;
).listen 1337

console.log 'Server running at http://127.0.0.1:1337/'
</pre>
<p><code>$ coffee -c hellocoffee.coffee<br />
$ node hellocoffee.js</code></p>
<p>And check http://127.0.0.1:1337 again.</p>
<p><strong>Adding Express</strong></p>
<p>Node.js is a very powerful, but it still requires quite a bit of boilerplating to use it for web development. That&#8217;s where Express comes in. It is build on top of another middleware layer called Connect and gives you much better support in handling requests, rendering, templates and responses.</p>
<p><code>$ cd ..<br />
$ sudo npm install -g mime qs connect express<br />
$ mkdir helloexpress<br />
$ cd helloexpress<br />
$ express<br />
$ npm install -d<br />
$ node app.js<br />
</code></p>
<p>check http://127.0.0.1:3000</p>
<p><code>vi app2.coffee</code></p>
<p>insert:</p>
<pre class="brush: jscript; title: ; notranslate">
express = require('express')app = express.createServer()

# Setup configuration
app.use express.static(__dirname + '/public')
app.set 'view engine', 'jade'

# App Routes
app.get '/', (request, response) -&gt;
  response.render 'index', { title: 'Express with Coffee' }

# Listen
app.listen 3000
console.log &quot;Express server listening on port %d&quot;, app.address().port
</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js<br />
</code></p>
<p>And check http://127.0.0.1:3000 again.<br />
Now that we have Coffeescript working with Express let&#8217;s add sessions.</p>
<p><strong>Add session support</strong></p>
<p><code>$ vi app2.coffee</code></p>
<p>insert after app.use express.static(__dirname + &#8216;/public&#8217;)</p>
<pre class="brush: jscript; title: ; notranslate">app.use express.cookieParser()
app.use express.session {secret: &quot;Coffeebreak&quot; }
</pre>
<p>insert after app.get &#8216;/&#8217;, (request, response) -></p>
<pre class="brush: jscript; title: ; notranslate">request.session.views++</pre>
<p>replace</p>
<pre class="brush: jscript; title: ; notranslate">response.render 'index', { title: request.session.views + ': Express with Coffee and sessions' }</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js</code></p>
<p>Check http://127.0.0.1:3000 and refresh a few times. You should see the counter increase.</p>
<p><strong>Install Redis</strong></p>
<p>Open a new terminal.</p>
<p><code>$ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz<br />
$ tar -zxvf redis-2.2.11.tar.gz<br />
$ cd redis-2.2.11/<br />
$ sudo apt-get install build-essential<br />
$ make<br />
$ ./src/redis-server<br />
</code></p>
<p><strong>Add redis session to node</strong></p>
<p><code>$ npm install -d redis connect-redis<br />
vi app2.coffee</code></p>
<p>insert after express = require &#8216;express&#8217;</p>
<pre class="brush: jscript; title: ; notranslate">RedisStore = require('connect-redis')(express)</pre>
<p>change</p>
<pre class="brush: jscript; title: ; notranslate">app.use express.session {secret: &quot;Coffeebreak&quot;, store: new RedisStore, cookie: { maxAge: 60000 } }</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js<br />
</code></p>
<p>In the Redis terminal you should now see something like:<br />
<code>[25489] 24 Jun 04:57:11 - DB 0: 1 keys (1 volatile) in 4 slots HT.<br />
[25489] 24 Jun 04:57:11 - 1 clients connected (0 slaves), 799032 bytes in use<br />
</code></p>
<p>Check http://127.0.0.1:3000 and refresh a bunch of times<br />
kill and restart node</p>
<p><code>$ node app2.js</code></p>
<p>Check http://127.0.0.1:3000 again and refresh a few more times<br />
Note that you started where you left off.</p>
<p>And that brings us to the end of this guide. As you can see the stack is very powerful and extremely small, lightweight and clean. With all the session information in the Redis store the availability of the entire systems comes down to the availability of Redis. And with these guys working on a proper clustering solution it will be very interesting to see where all this is going in the near future.</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/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/"></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%2F2011%2F06%2F24%2Fgetting-started-with-node-js-npm-coffeescript-express-jade-and-redis%2F&amp;title=Getting%20started%20with%20Node.js%2C%20npm%2C%20Coffeescript%2C%20Express%2C%20Jade%20and%20Redis" 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/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>What happened to the Open Source performance monitoring and analysis tools</title>
		<link>http://blog.xebia.com/2011/06/22/what-happened-to-the-open-source-performance-monitoring-and-analysis-tools/</link>
		<comments>http://blog.xebia.com/2011/06/22/what-happened-to-the-open-source-performance-monitoring-and-analysis-tools/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 19:33:59 +0000</pubDate>
		<dc:creator>Mark Bakker</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Uncategorized]]></category>

	<!-- AutoMeta Start -->
	<category>glassbox</category>
	<category>infrared</category>
	<category>tavant</category>
	<category>appdynamics</category>
	<category>jxinsight</category>
	<category>binil</category>
	<category>6rc1</category>
	<category>glassbox</category>
	<category>infrared</category>
	<category>tavant</category>
	<category>appdynamics</category>
	<category>jxinsight</category>
	<category>binil</category>
	<category>6rc1</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6988</guid>
		<description><![CDATA[In my current position as Performance Engineer and in my past position as a Middleware Architect I did quite some work with closed source performance monitoring and analysis tools (i.g. CA Wily and later AppDynamics). These tools are both expensive but also do quite a good job most of the times. In the same field [...]]]></description>
			<content:encoded><![CDATA[<p>In my current position as Performance Engineer and in my past position as a Middleware Architect I did quite some work with closed source performance monitoring and analysis tools (i.g. CA Wily and later AppDynamics).<br />
These tools are both expensive but also do quite a good job most of the times. In the same field there are more tools, but all in the same price range for as far as I know.<br />
To name some: Foglight, Dynatrace, Newrelic, JXInsight, Tivoli Performance Viewer, Compuware Gomez.</p>
<p>Around 2006 several initiatives to create open source performance monitoring tools for java production environments started to appear.</p>
<p>This was mainly because AOP (Aspect Oriented Programming), the technology used in most of these products, was getting attention in the market and there were quite some developments in that area at the time.</p>
<p>I am interested to see how the open source community around these kind of products is evolving. The outcome is quite surprising…</p>
<p><span id="more-6988"></span></p>
<p>The main reason I am interested in tools in this area is to be able to pinpoint problems in an Acceptance or Production environments very quickly, because this saves (big) enterprises a lot of money.</p>
<p>The main reason I am interested in <em>open source</em> tools is to see if we are able to create a complete open source java hosting stack which is enterprise production ready.</p>
<p>Without adding a lot of extra license and/or support costs we don’t have to consolidate IT anymore. We will be able to do application hosting for each specific business unit separately and focus on the continuous improvement for that business unit alone. Without big boundaries between the business unit and IT. This kind of boundaries are most times created because of cost efficiency. Think about consolidation and architecture guidelines. Not having to think about licencing costs will help us in helping enterprises to become agile.</p>
<p>During a knowledge exchange session (XKE) at Xebia we first created a requirements list to select tools in the same area to be able to compare them.</p>
<p>The requirements so far:</p>
<ol>
<li>The tool should measure production and acceptance environments with low (&lt;= 5%) resource usage overhead.</li>
<li>The tool should be able to pinpoint (potential) problems in the running applications as quickly as possible.</li>
<li>The problems that should be detected: high resource consumption of particular code blocks, memory leaks and the location of the leak, blocking code blocks which block other threads, slow calls to back ends (i.e. web services, databases).</li>
<li>The environments the tools should run in are the following application servers: IBM Websphere, Oracle Weblogic, JBoss, Tomcat, Glassfish.</li>
<li>The problems should be made visible in such a way that the root cause can be found as quickly as possible. The most valuable will be to see complete business transaction flows over all JVM’s, with real-time flow states and measurement readings.</li>
<li>The tool should be easy to install, i.g. just use a simple agent that connects it to a server. The goal should be to leave the code base unchanged.</li>
</ol>
<p>Before the session I did some homework and I searched the internet for these kind of monitoring tools. During our knowledge exchange session we had a brainstorm session and came to the following list of Open Source tools:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="49" valign="top"><em>Type</em></td>
<td width="165" valign="top"><em>Name</em></td>
<td width="112" valign="top"><em>Active development</em></td>
<td width="105" valign="top"><em>Possible usability?</em></td>
<td width="98" valign="top"><em>Costs</em></td>
<td width="88" valign="top"><em>Commercial support possible?</em></td>
</tr>
<tr>
<td width="49" valign="top">OS</td>
<td width="165" valign="top">Glassbox</td>
<td width="112" valign="top">No (last in nov. 2008)</td>
<td width="105" valign="top">Yes</td>
<td width="98" valign="top">-</td>
<td width="88" valign="top">Maybe</td>
</tr>
<tr>
<td width="49" valign="top">OS</td>
<td width="165" valign="top">Infrared</td>
<td width="112" valign="top">No (last in jan. 2010, between 2006 – 2010 none)</td>
<td width="105" valign="top">Yes</td>
<td width="98" valign="top">-</td>
<td width="88" valign="top">Maybe</td>
</tr>
<tr>
<td width="49" valign="top">OS</td>
<td width="165" valign="top">Profiler4j</td>
<td width="112" valign="top">No (last in 2006)</td>
<td width="105" valign="top">No, more are profiler</td>
<td width="98" valign="top">-</td>
<td width="88" valign="top">No</td>
</tr>
<tr>
<td width="49" valign="top">OS</td>
<td width="165" valign="top">JAMon/ JARep</td>
<td width="112" valign="top">No (last in 2010)</td>
<td width="105" valign="top">No, no runtime aspects, code has to change</td>
<td width="98" valign="top">-</td>
<td width="88" valign="top">No</td>
</tr>
<tr>
<td width="49" valign="top">OS</td>
<td width="165" valign="top">VisualVM + BTrace</td>
<td width="112" valign="top">Yes</td>
<td width="105" valign="top">No, does only run in JDK6 and higher, no complete visual integration.</td>
<td width="98" valign="top"></td>
<td width="88" valign="top">Yes</td>
</tr>
<tr>
<td width="49" valign="top">Closed SourceFree in dev. env.</td>
<td width="165" valign="top">OpenCore</td>
<td width="112" valign="top">Yes</td>
<td width="105" valign="top">Yes, but is not open source, only low cost in development environment.</td>
<td width="98" valign="top">None for development environment, commercial for production environment, see JXInsight.</td>
<td width="88" valign="top">No</td>
</tr>
</tbody>
</table>
<p>This list is as complete as we were able to come up with, if you know more and eventual better open source tools please let us know!</p>
<p>After evaluating all products on the lists (just a paper evaluation) we only see Glassbox and Infrared as a real Open Source solution in this area. But both (at least Glassbox) are not actively developed anymore. Of course because both products are open source it will be possible to restart development on one of the products.</p>
<p>It is interesting why both projects are not active anymore. I spent some time to find out why. This is what I found out:</p>
<p>What happened to Glassbox; the first developer mentioned is the VP of Engineering at Glassbox David Pickering. He has left the Glassbox company in 2009. And is now VP of Engineering at iWin, a company with a different focus. The second one mentioned is Ron Bodkin, he left Glassbox in 2007 and was the founder of the Glassbox company, he became VP of Engineering at Quantcast, so also his focus has moved. This looks like the main reason there is no active development on Glassbox anymore.</p>
<p>What happened to Infrared; the first developer mentioned on the project member list at SourceForge is Binil Thomas, he worked for Tavant Technologies at the time Infrared was created. Other members on the same list also worked for Tavant in that time. Most are now working for different companies. It looks that Tavant Technologies was no longer interested in this space. The last 2.6RC1 release from Infrared was created in 2010, at a time Binil was working for Ronin Capital. Since 2011 he is working for AppDynamics, this is a commercial vendor in this area and looks like the main reason the 2.6RC1 release never came to a full release, but this is something I am guessing of course.</p>
<p><strong>What’s next</strong></p>
<p>We will test both Infrared and Glassbox to see if one of them is still a good choice. We will start with Infrared because this one has been the most active project in the past and it has been maintained the longest, until 2010. After this we will see if one of these products can be a competitor for the commercial products in this area.</p>
<p>Many thanks to my colleagues Adriaan Thomes and Sander Hautvast for helping me with the brainstorm session.</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/2011/06/22/what-happened-to-the-open-source-performance-monitoring-and-analysis-tools/"></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%2F2011%2F06%2F22%2Fwhat-happened-to-the-open-source-performance-monitoring-and-analysis-tools%2F&amp;title=What%20happened%20to%20the%20Open%20Source%20performance%20monitoring%20and%20analysis%20tools" id="wpa2a_6"><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/2011/06/22/what-happened-to-the-open-source-performance-monitoring-and-analysis-tools/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>What will Agile bring in 2011?</title>
		<link>http://blog.xebia.com/2011/01/06/what-will-agile-bring-in-2011/</link>
		<comments>http://blog.xebia.com/2011/01/06/what-will-agile-bring-in-2011/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 17:32:00 +0000</pubDate>
		<dc:creator>Jarl Meijer</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Process]]></category>

	<!-- AutoMeta Start -->
	<category>2011</category>
	<category>corporations</category>
	<category>metrics</category>
	<category>consultancy</category>
	<category>senior</category>
	<category>embrace</category>
	<category>risk</category>
	<category>journey</category>
	<category>2011</category>
	<category>corporations</category>
	<category>metrics</category>
	<category>consultancy</category>
	<category>senior</category>
	<category>embrace</category>
	<category>risk</category>
	<category>journey</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5663</guid>
		<description><![CDATA[2010 has ended and a new year has begun. 2010 offered us a lot of learning opportunities. It was a good year for the Agile community in the Netherlands and in the world. We saw more and more big corporations embrace Agile methodologies and put serious effort into making it work for them, mostly as a [...]]]></description>
			<content:encoded><![CDATA[<p>2010 has ended and a new year has begun. 2010 offered us a lot of learning opportunities. It was a good year for the Agile community in the Netherlands and in the world. We saw more and more big corporations embrace Agile methodologies and put serious effort into making it work for them, mostly as a project methodology. &#8216;Agile adoption&#8217; was THE 2010 word, maybe on par with &#8216;Wikileak&#8217;. So what do we think will be hot in 2011?<br />
<span id="more-5663"></span></p>
<p>We are sure the Agile hot topics for 2011 are:</p>
<dl>
<dt><strong>Agile Management</strong></dt>
<dd>The managers finally find their place within an agile organization. In 2010 a lot of managers struggled with their position, in 2011 they find their spot. It&#8217;s called facilitation island and it smells like paradise and still feels like hard work.</dd>
<dt><strong>Agile Management Consultancy</strong></dt>
<dd>The management consultancy world invites itself to the party. The consultancies bring new (project)managementmodels around Agile with them to establish their position in the agile world. This is a mixed blessing: it&#8217;s both confusing and useful at the same time. Confusing because Agile is put in models that oppose the Agile values and put more emphasis on process tracking, Big Up Front Plans and management control. Useful as it attracts senior management attention to Agile and help accelarate agile thinking on typical board management topics as Agile strategy implementation, Agile KPI management, Agile risk management, Agile budget control and Agile organization structures.</dd>
<dt><strong>Agile at Scale</strong></dt>
<dd>Corporations shift from scaling agile to agile at scale. Instead of using Agile only for projects, agile is implemented at corporate level with a stronger focus on product portfolio management to deliver more value. Senior management gets seriously involved in the prioritisation of what&#8217;s really important.  The discussion is no longer about prioritizing projects, it&#8217;s about what delivers most value to the company in the long run.</dd>
<dt><strong>Agile Maturity</strong></dt>
<dd>Many companies start their journey with agile. They seek to learn from the past experiences of those that went before them. Those trailblazers on the other hand are ready for the &#8216;beyond Agile&#8217;. Agile maturity with a focus on the journey from just starting to completely incorporating agile is the subject of many publications and presentations in 2011. Agile maturity is how the different groups share their experiences and learn from each other.</dd>
<dt><strong>Agile Metrics</strong>
<dt>
<dd>Now the use of Agile has become more and more serious, the need for good metrics has become even more real. The Agile world rids itself of its cowboy stigma by creating more transparancy in a way that is useful for everyone in an organization. Putting things on a wall is no longer enough, you can&#8217;t expect everybody in a 30,000 people company to visit all the teams daily or even weekly. The big agile adoptions embrace metrics to enable running agile at scale.</dd>
<dt><strong>Risk Management</strong></dt</p>
<dd>Given these other trends risk management becomes more important. The IT risk management so far has been the laughing stock of real risk management. 2011 is the year IT risk management matures and agile leads the way.</dd>
<dt><strong>Agile Results Only Work  Spheres</strong></dt>
<dd>The Results Only Work Environment (ROWE) or &#8216;new way of working&#8217; (Dutch: &#8220;Het nieuwe werken&#8221;) is here and implemented by many corporations. While corporations want the benefits from working with Agile, there is also a strong desire to apply ROWE. An answer is found to combine distributed working and teameffort into a new way of working called: Agile Result Only Work Spheres also known as AROWS.</dd>
</dl>
<p>We wish you all a pleasant 2011 and may it be a MoreAgile year !</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/2011/01/06/what-will-agile-bring-in-2011/"></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%2F2011%2F01%2F06%2Fwhat-will-agile-bring-in-2011%2F&amp;title=What%20will%20Agile%20bring%20in%202011%3F" id="wpa2a_8"><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/2011/01/06/what-will-agile-bring-in-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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_10"><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 7: Share the responsibility for the whole chain</title>
		<link>http://blog.xebia.com/2009/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/</link>
		<comments>http://blog.xebia.com/2009/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 21:20:15 +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[Performance]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Tools]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3537</guid>
		<description><![CDATA[Last time I blogged about performance tuning based on evidence, the tuning cycle and some best practices. This time I&#8217;ll blog about the last step of the seven steps: sharing the responsibility for the whole system chain. When an incident happens in production, this usually means stress. A performance problem in production often leads to [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I blogged about <a href="http://blog.xebia.com/2009/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/">performance tuning based on evidence</a>, the tuning cycle and some best practices. This time I&#8217;ll blog about the last step of the seven steps: sharing the responsibility for the whole system chain.</p>
<p>When an incident happens in production, this usually means stress. A performance problem in production often leads to finger pointing. <span id="more-3537"></span>The DBA says that he has looked and nothing is wrong with his database. The network operator concludes the same thing about his network. The app server operator about his app server, the software developer about his source code and the back end operator about his back end. It is never them, it is the other. </p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/11/fingerpointing-300x265.jpg" alt="Finger pointing does not help to solve the problem." title="Fingerpointing" width="300" height="265" class="size-medium wp-image-3539" /><br />
Figure 1. Finger pointing does not help to solve the problem.</p>
<p>The application often gets thrown over the wall to the operation department. Responsibilities then hold only at one side of that wall. If software development, maintenance, testing and/or operation is outsourced to external parties this can lead to tricky situations. Before you know it, contracts and legal procedures are at play and cooperation is far away.  Both parties stick to their position, costs will raise and precious time gets lost. </p>
<p>Finding out which part of the chain is responsible for the slowness can partly be solved with proper tools that monitor the whole chain and tools which are used from early on in the development process. But there is more to it than just tooling. Experience with and knowledge of tooling and technology is inevitable just as priority for the proper utilization of the tools. It is most important to prevent formation of separate kingdoms and finger pointing between them; and rather to operate together as a multi-disciplined performance team and share the responsibility for the whole chain.</p>
<p>We are almost there with this series <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Next time I&#8217;ll draw the final conclusions of these seven steps.</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/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/"></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%2F11%2F18%2Fweb-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain%2F&amp;title=Web%20performance%20in%20seven%20steps%3B%20Step%207%3A%20Share%20the%20responsibility%20for%20the%20whole%20chain" id="wpa2a_12"><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/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Web performance in seven steps; Step 6: Tune based on evidence</title>
		<link>http://blog.xebia.com/2009/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/</link>
		<comments>http://blog.xebia.com/2009/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 21:20:11 +0000</pubDate>
		<dc:creator>Jeroen Borgers</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[tuning]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3376</guid>
		<description><![CDATA[Last time I blogged about the relevance of monitoring and diagnostics in production to solve incidents quickly and prevent future problems. This time I&#8217;ll talk about tuning based on evidence. If an application turns out to be too slow, tuning can provide a solution. Tuning can take place on multiple levels. Adding hardware can be [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I blogged about the relevance of <a href="http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/">monitoring and diagnostics in production</a> to solve incidents quickly and prevent future problems. This time I&#8217;ll talk about tuning based on evidence. </p>
<p>If an application turns out to be too slow, tuning can provide a solution. Tuning can take place on multiple levels. Adding hardware can be a cheap solution. However, when you add hardware at a place where the bottleneck is not located, this has little use.<br />
<span id="more-3376"></span><br />
Important steps of tuning are therefore identifying which pages or services do not meet stated requirements and isolating the problem: where is it located, in which layer, in which component. This can be made clear with testing and monitoring on application parts. The next step is diagnosing. In fact, this comes down to making up a hypothesis why this component is so slow.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/11/tuning-cycle.jpg" alt="Performance tune cycle" title="tuning-cycle" width="375" height="227" class="size-medium wp-image-3379" /><br />
Figure 1. Performance tune cycle.</p>
<p>This can for instance be a missing or wrong index on a database table or the invocation of too many small queries. Next, the component is improved based on this hypothesis. Finally, one needs to verify whether the improvement actually brings the expected speedup. If so, then the proposed hypothesis is true and the speedup is the result. If not, then there is something wrong with the hypothesis and we need an alternative hypothesis. As soon as the performance of the system meets its requirements, tuning is finished. </p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/11/evidence-300x244.jpg" alt="finding evidence" title="evidence" width="300" height="244" class="size-medium wp-image-3384" /><br />
Figure 2. Finding evidence.</p>
<p>The right tools are indispensable: performance test tool, enterprise profiler, heap monitor, etc. I have seen developers work on assumed performance improvements which turned out not to help at all, or even slowed down the application and also deteriorate the maintainability and flexibility. This is caused by the fact that developers are used to mould functionality from source code and therefore work from source code to improve performance. What is missing here is measure, don&#8217;t guess. This is something developers learn in my performance training. Experience also has taught me to judge every proposed improvement separately and to only implement the improvement when we have proven that it really helps. Without this systematic approach, a handful of steps together may take you backwards at the end of the day instead of forwards.</p>
<p>Next time I&#8217;ll talk about <a href="http://blog.xebia.com/2009/11/18/web-performance-in-seven-steps-step-7-share-the-responsibility-for-the-whole-chain/">Sharing responsibility for the whole chain</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/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/"></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%2F11%2F02%2Fweb-performance-in-seven-steps-step-6-tune-based-on-evidence%2F&amp;title=Web%20performance%20in%20seven%20steps%3B%20Step%206%3A%20Tune%20based%20on%20evidence" id="wpa2a_14"><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/11/02/web-performance-in-seven-steps-step-6-tune-based-on-evidence/feed/</wfw:commentRss>
		<slash:comments>1</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_16"><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>
		<item>
		<title>Web performance in seven steps; Step 4: Test continuously</title>
		<link>http://blog.xebia.com/2009/07/22/web-performance-in-seven-steps-step-4-test-continuously/</link>
		<comments>http://blog.xebia.com/2009/07/22/web-performance-in-seven-steps-step-4-test-continuously/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 20:25:17 +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[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Testing]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2694</guid>
		<description><![CDATA[Last time I blogged about the importance of representative performance testing. Having production-like properties for hardware, OS, JVM, app server, database, external systems and simulated user load are essential to prevent bad performance surprises when going live. In addition, I described how cloud computing can be utilized to generate high loads on-demand without having to [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I blogged about the importance of <a href="http://blog.xebia.com/2009/06/29/web-performance-in-seven-steps-step-3-test-representatively/">representative performance testing</a>. Having production-like properties for hardware, OS, JVM, app server, database, external systems and simulated user load are essential to prevent bad performance surprises when going live. In addition, I described how cloud computing can be utilized to generate high loads on-demand without having to worry about the infrastructure.</p>
<p><strong>Continuous performance testing</strong><br />
With a representative test as one of the last steps before going live we prevent that expensive bad-performance surprises will pop up in production. However, the same surprises will pop-up, only earlier and with less impact. To save costs and prevent large architectural refactoring, it is crucial to test for performance as soon as possible. This is just like any other software defects and Quality Assurance: the later in the development process defects are detected, the more costly these defects are. </p>
<p>At a popular web shop I had the following challenge: <span id="more-2694"></span>we wrote the performance tests only at the end of the six-weekly release period, after functional testing had taken place and functional defects were corrected. In case serious performance defects popped up, a crisis team was gathered and we found ourselves in a stressful situation. There was usually not enough time to fix the defect before the release date, so my recommendation at times was to defer the release date. However, deferring the release date often just was not possible, because TV or radio time was bought to promote the new functionality. So, how to solve this dilemma? We found the solution in applying agile principles: test features as early as possible and the team is responsible. </p>
<p>We included meeting performance requirements in the definition of done in each new or changed feature individually. The development process already included an automatic build, quite common these days. Unit tests of a feature were written as usual by the developer. We now introduced performance tests to the spectrum: the developer writes the performance test script for his feature (service or web page) in JMeter, side-by-side to his unit tests on the classes. When the nightly build with Maven has taken place, the application is deployed on WebSphere and the performance tests are run by the JMeter Ant script. This script generates a report which is e-mailed to stakeholders. In this way, the IT department gets early insight into new and changed features, it can adapt its course more quickly, back-off early from an unfortunate architecture or approach, minimize surprises and have lower costs as well. Additional benefit is that writing test scripts gets done more quickly than before, because the developer has all details of the new feature still fresh in his memory. These details are for instance the conditions under which the service may be called and by which parameters, in which variations and special cases.  The usual communication overhead between a performance tester and a developer on these details is drastically reduced, thereby further improving productivity. </p>
<p>Continuous performance testing is too often underestimated and un recognized in my opinion, it really has a whole lot of advantages and it is not that hard to achieve.</p>
<p>Next time I’ll blog about <a href="http://blog.xebia.com/2009/08/31/web-performance-in-seven-steps-step-5-monitor-and-diagnose/">Step 5: Monitoring and diagnostics</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/07/22/web-performance-in-seven-steps-step-4-test-continuously/"></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%2F07%2F22%2Fweb-performance-in-seven-steps-step-4-test-continuously%2F&amp;title=Web%20performance%20in%20seven%20steps%3B%20Step%204%3A%20Test%20continuously" id="wpa2a_18"><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/07/22/web-performance-in-seven-steps-step-4-test-continuously/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web performance in seven steps; step 3: test representatively</title>
		<link>http://blog.xebia.com/2009/06/29/web-performance-in-seven-steps-step-3-test-representatively/</link>
		<comments>http://blog.xebia.com/2009/06/29/web-performance-in-seven-steps-step-3-test-representatively/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 20:34:44 +0000</pubDate>
		<dc:creator>Jeroen Borgers</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[JMeter]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2269</guid>
		<description><![CDATA[Last time I blogged about the importance of benchmarking the architecture and new technology in a Proof of Concept for Performance. This time I’ll deal with the importance of representative performance testing. Slowness of applications in development environments is often neglected with the rationale that faster hardware in the production environment will solve this problem. [...]]]></description>
			<content:encoded><![CDATA[<p>Last time I <a href="http://blog.xebia.com/2009/06/15/web-performance-in-seven-steps-step-2-execute-a-proof-of-concept/">blogged </a>about the importance of benchmarking the architecture and new technology in a Proof of Concept for Performance. This time I’ll deal with the importance of representative performance testing. </p>
<p>Slowness of applications in development environments is often neglected with the rationale that faster hardware in the production environment will solve this problem. However, whether this is really true can only be predicted with a test on a representative environment and in a representative way. In such an environment, there needs to be more representative than just the hardware.<br />
<span id="more-2269"></span><br />
I have experienced multiple times that a database query on the test database with 1000 customers took only less than 10 ms., while on the production database with 100.000 customers this turned out to take tens of seconds, because of missing indexes. So, if the development team does not test with a full, complete database, going to production may lead to some surprises. </p>
<p>It is also important that the number of concurrent users and their behavior is well simulated in the test. Furthermore, care should be taken to take caching effects into account: if the test continuously requests for the same product by the same customer, this data will be in database or query cache the second and following times. This will speed up the request considerably and be much faster than with many customers and products. This test is therefore not representative for the real situation. </p>
<p>A suitable performance test tool and performance expertise is necessary to create a valuable test. The most popular open source performance test tool is Apache JMeter, see the next figure.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/06/web-shop-case-study-jmeter.jpg" alt="Run of a performance test in JMeter." title="web-shop-case-study-jmeter" width="600" height="356" class="size-full wp-image-2268" /><br />
Figure: Screenshot of a run of a performance test in Apache JMeter.</p>
<p>We deal with this tool, and how to performance test properly in our <a href="http://www.xebia.com/events/speeding-java-applications-0">Speeding up Java Applications course</a>. This is a tool made by programmers, for programmers. Test scripts can be created with visual elements like a HTTP request, which can be recorded and configured. Many are available and if you need more, you can always fall back on a BeanShell element in which you can manipulate the request, response and various JMeter variables. If that even does not meet your needs yet, you can extend JMeter source code and develop your own elements. Because of its for-programmers nature, it is less suited for the average tester. Also reporting features and maintainability of the scripts are both not so great. Therefore, commercial tools like HP Mercury LoadRunner, Borland SilkPerformer or Neotys’ Neoload may be good alternatives for companies. </p>
<p><strong>Performance testing from the cloud</strong></p>
<p>The emergence of cloud computing adds new possibilities for performance testing. An elastic compute cloud like Amazon EC2 provides the ability to scale up quickly with the number of application deployments because of increasing load. For performance testing, the cloud can be used the other way around: for temporary use of many load generating test clients to generate expected and peak loads for your application. This saves you from having to buy many servers to run the load generating clients and if you run these performance tests say only a couple of days in a release cycle, this can be an economically attractive solution. Quite some information is available how to test with various <a href="http://www.performanceengineer.com/blog/performance-testing-from-the-cloud/">performance tools from the cloud</a>.</p>
<p>Next time I’ll blog about <a href="http://blog.xebia.com/2009/07/22/web-performance-in-seven-steps-step-4-test-continuously/">step 4: continuous performance testing</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/06/29/web-performance-in-seven-steps-step-3-test-representatively/"></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%2F06%2F29%2Fweb-performance-in-seven-steps-step-3-test-representatively%2F&amp;title=Web%20performance%20in%20seven%20steps%3B%20step%203%3A%20test%20representatively" id="wpa2a_20"><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/06/29/web-performance-in-seven-steps-step-3-test-representatively/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/category/performance/feed/ ) in 0.84108 seconds, on Feb 9th, 2012 at 5:45 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 6:45 pm UTC -->
