<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1167046991516597285</id><updated>2012-02-16T08:57:03.333-08:00</updated><category term='ITCAM ITCAMfWAS performance testing links'/><category term='JDBC connection pool setting SHAREABLE'/><title type='text'>Alexandre Polozoff on WebSphere Performance</title><subtitle type='html'>This blog is where I'll wax on about performance surrounding the WebSphere Application Server middle-tier integration environment.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-7824811212118743258</id><published>2011-03-30T07:03:00.000-07:00</published><updated>2011-03-30T07:03:56.056-07:00</updated><title type='text'>Backup Strategies</title><content type='html'>I was having a discussion recently with one of my colleagues around server backups.&amp;nbsp; He likened it to the spare tire of the car.&amp;nbsp; Yes, you can drive around without the spare tire but does anyone want to do that for long stretches of time?&amp;nbsp; Probably not.&lt;br /&gt;&lt;br /&gt;Servers need to be backed up.&amp;nbsp; Simply if a server completely tipped over it can be duplicated, rebuilt and put back into service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-7824811212118743258?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/7824811212118743258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=7824811212118743258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7824811212118743258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7824811212118743258'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2011/03/backup-strategies.html' title='Backup Strategies'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3191092377769327415</id><published>2011-02-07T12:32:00.001-08:00</published><updated>2011-02-07T12:32:53.274-08:00</updated><title type='text'>tprof switches</title><content type='html'>I wanted to capture this before I forgot about it ... &lt;a href="http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014557b090-11cd67f58fb-7fe3_1006.html"&gt;tprof switches&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3191092377769327415?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3191092377769327415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3191092377769327415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3191092377769327415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3191092377769327415'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2011/02/tprof-switches.html' title='tprof switches'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2092402715875867958</id><published>2010-11-30T06:10:00.000-08:00</published><updated>2010-11-30T06:10:23.356-08:00</updated><title type='text'>Cognos</title><content type='html'>Looking for information about Cognos?&amp;nbsp; I was.&amp;nbsp; My colleague in the UK, Richard Collins, was able to point me to some informational links about Cognos.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;For full details on this product, see its home page here: &lt;a href="http://www-01.ibm.com/software/analytics/cognos/business-intelligence/"&gt;http://www-01.ibm.com/software/analytics/cognos/business-intelligence/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, your most useful starting point is probably going to be: &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg27014432"&gt;http://www-01.ibm.com/support/docview.wss?uid=swg27014432&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...and in particular, this one: &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg27019126"&gt;http://www-01.ibm.com/support/docview.wss?uid=swg27019126&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2092402715875867958?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2092402715875867958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2092402715875867958' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2092402715875867958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2092402715875867958'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2010/11/cognos.html' title='Cognos'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-836645025066214854</id><published>2010-11-09T17:49:00.000-08:00</published><updated>2010-11-09T17:52:28.298-08:00</updated><title type='text'>global transaction sharing</title><content type='html'>In the developers resource references there is an attribute for global transaction sharing.The value should be Shareable if the application uses global transactions.&amp;nbsp; But if one is using &lt;a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic=%2Fcom.ibm.websphere.zseries.doc%2Finfo%2Fzseries%2Fae%2Fcjta_loctran.html"&gt;LTC&lt;/a&gt; then one does not need to share the connection.&amp;nbsp; Change the res-sharing-scope to Unshareable as noted above.&amp;nbsp; This eliminates a lot of contention for connection pool threads.&amp;nbsp; For more details on LTC see the link above to understand how it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-836645025066214854?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/836645025066214854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=836645025066214854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/836645025066214854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/836645025066214854'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2010/11/global-transaction-sharing.html' title='global transaction sharing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1522575839346604005</id><published>2010-09-24T05:24:00.000-07:00</published><updated>2010-09-24T05:24:11.292-07:00</updated><title type='text'>The importance of dynamic circuit breakers</title><content type='html'>It is rare for anyone to provide details behind the root cause of a production outage.&amp;nbsp; &lt;a href="http://www.facebook.com/notes/facebook-engineering/more-details-on-todays-outage/431441338919"&gt;Facebook&lt;/a&gt; put out a report about an outage they had.&amp;nbsp; If you're into troubleshooting and problem determination it is an interesting read. It sounds like they could turn off the particular function but had to completely restart the environment to do it.&amp;nbsp; This is why it is important to have circuit breakers that can be activated dynamically.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;One also wonders what infrastructural changes could be made in the environment to help? It sounds like the application logic continued to retry requests.&amp;nbsp; This is why I'm not a fan of applications automatically retrying requests because when failure occurs the retries can quickly overwhelm the back-ends.&amp;nbsp; A firewall could have at least help shut off the pipe to the database.&amp;nbsp; Though the consequences to the application would have been no different and would still have required a restart since there seemed to be no way to dynamically shut off that particular function.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Certainly the error logic sounded confusing at best.&amp;nbsp; And error paths through code are the ones least frequently tested so they tend to fail magnificently in production&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1522575839346604005?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1522575839346604005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1522575839346604005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1522575839346604005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1522575839346604005'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2010/09/importance-of-dynamic-circuit-breakers.html' title='The importance of dynamic circuit breakers'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3286342733363442383</id><published>2010-09-14T15:46:00.000-07:00</published><updated>2010-09-14T15:46:58.394-07:00</updated><title type='text'>grep Exception SystemOut.log | wc -l</title><content type='html'>I'm reminded today that after performance tests a simple check exists especially when adding more JVMs to a cluster.&amp;nbsp; Count the number of exceptions in the log files.&amp;nbsp; Of course, clear the logs before running the test.&amp;nbsp; If the counts are not all roughly the same (or significantly skewed from the other app servers) then it is clear there are issues with that JVM that need to be checked.&amp;nbsp; Sometimes it is configuration or a misplaced JAR file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3286342733363442383?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3286342733363442383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3286342733363442383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3286342733363442383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3286342733363442383'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2010/09/grep-exception-systemoutlog-wc-l.html' title='grep Exception SystemOut.log | wc -l'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4180122146998791321</id><published>2010-06-08T04:33:00.000-07:00</published><updated>2010-06-08T04:33:55.989-07:00</updated><title type='text'>Been a busy 2010</title><content type='html'>I know I haven't kept up with the blog this year.&amp;nbsp; While the blog post I'm &lt;a href="http://dilbert.com/blog/entry/the_value_of_ideas/"&gt;linking to today makes no mention of performance&lt;/a&gt; it has everything to do with performance.&amp;nbsp; Maybe one day I'll get a chance to sit down and explain my thinking.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4180122146998791321?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4180122146998791321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4180122146998791321' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4180122146998791321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4180122146998791321'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2010/06/been-busy-2010.html' title='Been a busy 2010'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-7987885494941688856</id><published>2009-12-24T06:53:00.000-08:00</published><updated>2009-12-24T06:53:28.254-08:00</updated><title type='text'>Catching up on closing up 2009</title><content type='html'>It has been a busy few weeks for me which is one reason I haven't posted in a while.&amp;nbsp; Some things I've been thinking about lately revolve around high availability, switches and logical partitioning of applications and application servers.&amp;nbsp; I'll try to post more on these subjects over the next few weeks.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Hope you all have a great holiday season and a Happy New Year.&amp;nbsp; I'll see you on the other side of 2010!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-7987885494941688856?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/7987885494941688856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=7987885494941688856' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7987885494941688856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7987885494941688856'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/12/catching-up-on-closing-up-2009.html' title='Catching up on closing up 2009'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8021433632268724838</id><published>2009-11-10T09:18:00.001-08:00</published><updated>2009-11-10T10:14:37.319-08:00</updated><title type='text'>The people side of performance</title><content type='html'>Those of you that read my blog know that I tend to primarily address technical topics when it comes to performance.  The latest issue of Communications from the ACM (10/2009 vol 52 No 10) has an article called "The Business of Software Contagious Craziness, Spreading Sanity" by Philip G Armour.  I was intrigued with some of the points Philip brought up in his article.  Particularly this tidbit&lt;br /&gt;&lt;br /&gt;"... having a strong conviction that something cannot be done is usually a self-fulfilling prophecy.  If people are convinced that something is not achievable, then they usually won't achieve it - if we argue for our limitations, we get to keep them." &lt;br /&gt;&lt;br /&gt;Wow!  Nail on the head.  So how do we convince an organization that something that is currently perceived as impossible actually is quite achievable? &lt;br /&gt;&lt;br /&gt;First off, people have be encouraged to think outside the box.  George Patton is quoted as saying "If everyone is thinking alike, someone isn't thinking." Coming from the battlefield I think we can understand why the General said this.  He needed his commanders to not only visualize the current plan of operations but also what alternatives and/or competing strategies were available.  One of my friends, Keys Botzum who also happens to be an IBM STSM, once put it this way.  "The patient is dying on the table.  What can we do, right now, to keep him from dying."  It is a different perspective for techies to mull over.&lt;br /&gt;&lt;br /&gt;Likewise, a technical team can not be lead by consensus.  Technical teams have be be lead by dictatorship.  Someone, at the top, needs to make technical decisions and take responsibility for those decisions.  Right or wrong someone, like General Patton, has to tell the troops which way to charge.  He can take input from his Lieutenants however the decision is ultimately his and his alone to ensure it is the correct decision.  Which is why the other side, led by mad men who knew nothing about how to fight a war, lost.  The General knew what he was doing and knew how to lead his people to victory. &lt;br /&gt;&lt;br /&gt;Which brings us to our next topic.  In order to be able to lead a technical team the leader has to be technical.  I understand management's philosophy that they are managing people and not the technology.  The problem is that technology, by its very nature, is complex.  This is simply unavoidable.  We're not managing a bunch of lawyers (sorry to pick on lawyers, you're used to it by now, as they are a good example).  What lawyers do is not very hard to comprehend.  They sue people.  They defend people.  They argue in court for their client.  They draw up contracts, etc.  None of this is rocket science.  Start running multiple servers in parallel handling thousands of transactions per second and that organization is starting to approach NASA-like technical complexity issues.  In order for a technical team to succeed they must be lead by a strong technical person.  It is unreasonable to expect someone who does not comprehend the subtleties of technical subjects such as "verbose GC" or "JDBC deadlocks" to be capable of making a technical decision much less the correct one. &lt;br /&gt;&lt;br /&gt;In conclusion, and back to the "self-fulling prophecy" and "that something is not achievable" that started this line of thinking for me.  There are two ways to avoid failure.  One is to have a strong technical leader who can take the reins as the technical General who makes the decisions.  The other is for executive management to support the technical leaders.  This means not only in terms of vocal agreement but also in terms of financial dollars to the project, making people available to do the tasks and any other strings that need to be pulled in order to make things happen. &lt;br /&gt;&lt;br /&gt;I'll have more to say on this subject later as this is about all I can muster in the limited time I had for this "lunch &amp;amp; learn" session.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8021433632268724838?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8021433632268724838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8021433632268724838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8021433632268724838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8021433632268724838'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/11/people-side-of-performance.html' title='The people side of performance'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-439099089670924759</id><published>2009-11-05T07:52:00.000-08:00</published><updated>2009-11-05T09:26:33.140-08:00</updated><title type='text'>Managing the application threads</title><content type='html'>Threads and multi-threaded programming is not a trivial subject.  But some application developers find themselves having to start their own threads as part of their application. &lt;br /&gt;&lt;br /&gt;I'll start this post off saying that using unmanaged threads is never a good thing.  When using threads developers should be looking at how to manage all their threads in their application.  Never exit the application without terminating all of your threads.  Why would we need to do this? &lt;br /&gt;&lt;br /&gt;An interesting problem is when an application is stopped (not the JVM/app-server but just the application), a new version is deployed, but the restart fails because there are still threads hanging around from the previous version of the applications and older versions of the same classes.  I never would have imagined this problem occurring but I can see that if the application lost track of its threads that it would not be able to close them when it shut down. &lt;br /&gt;&lt;br /&gt;Java provides the capability to manage all the application threads by using thread groups.  When creating a thread and assigning the application's thread to a thread group all the application has to do is capture the "application stop event" and use the stop method of the thread group thereby stopping all the threads in the thread group. &lt;br /&gt;&lt;br /&gt;The beauty of this solution is that the application can reliably manage all of the threads it creates though a single interface.  It is also portable which means your application will work with any application server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-439099089670924759?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/439099089670924759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=439099089670924759' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/439099089670924759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/439099089670924759'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/11/managing-application-threads.html' title='Managing the application threads'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3668396677993005106</id><published>2009-11-05T06:06:00.000-08:00</published><updated>2009-11-05T06:11:15.202-08:00</updated><title type='text'>High availability through parallel cells</title><content type='html'>High availability sites have unique requirements that are not easy to solve.  However, one solution does revolve around using multiple cells in production.  This allows for easily taking a cell out of rotation to make changes.  Then when the cell goes live and if the changes didn't work it is just as easy to take the cell out of rotation again.  I've used this strategy at many, many 24 x 7 sites. &lt;br /&gt;&lt;br /&gt;Here is the link to &lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/0911_col_polozoff/0911_col_polozoff.html?ca=drs-"&gt;my latest article&lt;/a&gt; on multiple cells.&lt;br /&gt;&lt;br /&gt;The only problem that arises is if things like database schemas change in the backend which also means application code changes.  Those kinds of changes require more work and possibly parallel schemas until the transition is complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3668396677993005106?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3668396677993005106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3668396677993005106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3668396677993005106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3668396677993005106'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/11/high-availability-through-parallel.html' title='High availability through parallel cells'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1670217837409794566</id><published>2009-10-19T13:50:00.000-07:00</published><updated>2009-10-19T13:58:40.289-07:00</updated><title type='text'>Running out of disk space</title><content type='html'>An event occurred this morning that reminds me that performance problems are sometimes environmentally driven.  One application went down with various errors related to the file system.  After some investigation it was discovered that the /tmp space ran out of space.  Yet no one knew it had happened.  Turns out that no monitors are in place to watch for resource exhaustion like low disk space. &lt;br /&gt;&lt;br /&gt;One could argue why did /tmp fill out if daily (automated) housekeeping tasks were in place (they were not).  But that is a pointless argument if someone moved a whole bunch of files in /tmp.  They could have moved files in there to install them and then delete when the install is done.  Or they could have been log files being transferred to another environment via ftp.  In any case, an automated monitoring tool should have alerted the operators that disk space has come close to exhaustion and need to take action to remedy the situation.&lt;br /&gt;&lt;br /&gt;If automated monitoring is not in place then the production applications that make use of /tmp space will fail causing an outage.  And without alerts about low disk space it can take several hours for the operations and troubleshooting teams to figure out that the application failed because it could not write out a temporary file.  A several hour outage that could have been completely avoided had the right resource monitors been in place. &lt;br /&gt;&lt;br /&gt;Other resource monitors should be looking at CPU utilization, page file activity, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1670217837409794566?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1670217837409794566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1670217837409794566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1670217837409794566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1670217837409794566'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/10/running-out-of-disk-space.html' title='Running out of disk space'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5573810443272191736</id><published>2009-09-30T08:36:00.000-07:00</published><updated>2009-09-30T08:42:58.575-07:00</updated><title type='text'>IPv6</title><content type='html'>Last year I &lt;a href="http://websphere-performance.blogspot.com/2008/08/one-reason-i-like-to-take-thread-dumps.html"&gt;blogged about handling ipv6 lookups &lt;/a&gt;that caused threads to wait thus slowing them down.  Not surprisingly I've come across this a few times since then.  What is interesting is the effect it can have on throughput and response time.  Testing showed that once &lt;tt&gt;-Djava.net.preferIPv4Stack=true &lt;/tt&gt;was enabled the test had 8% improvements in both throughput and response time.  This is truly interesting data.  That is a big difference and a good reason to periodically take thread dumps even if everything seems to be running nominally.  One never knows when they may uncover a gem of a performance boost like this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5573810443272191736?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5573810443272191736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5573810443272191736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5573810443272191736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5573810443272191736'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/ipv6.html' title='IPv6'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5443054879004808659</id><published>2009-09-24T09:34:00.000-07:00</published><updated>2009-09-24T14:52:38.348-07:00</updated><title type='text'>PMI = all is not a good setting for production</title><content type='html'>I am reminded occasionally when debugging production issues that setting the PMI level in WebSphere Application Server to "all" is not a good thing to do.  At the "all" setting one can see an application exhibit negative behavior.  I am also learning no two applications will always exhibit the same problem.  Some applications crash and burn under the weight of PMI=all incapable of  providing a response to any request.  Other applications seem to continue to function nominally but the CPU for those processes seem to be considerably higher.&lt;br /&gt;&lt;br /&gt;Finally, regardless of the PMI settings configured in the production environment it is imperative that all members of a cluster are set to the same values.  Having some processes set to one level and other processes set to another results in higher CPU utilization from some JVMs and not others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5443054879004808659?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5443054879004808659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5443054879004808659' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5443054879004808659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5443054879004808659'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/pmi-all-is-not-good-setting-for.html' title='PMI = all is not a good setting for production'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5600054566463297422</id><published>2009-09-23T20:34:00.001-07:00</published><updated>2009-09-23T20:35:34.021-07:00</updated><title type='text'>1 minute garbage collection cycles</title><content type='html'>Does your application use RMI?  Are you seeing garbage collection cycles with exclusiveaccess every minute (60,000 ms)?  You may need to apply the following two parameters to the JVM command line. &lt;br /&gt;&lt;br /&gt;-Dsun.rmi.dgc.client.gcInterval=360000000 -Dsun.rmi.dgc.server.gcInterval=360000000&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5600054566463297422?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5600054566463297422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5600054566463297422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5600054566463297422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5600054566463297422'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/1-minute-garbage-collection-cycles.html' title='1 minute garbage collection cycles'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1811587444420820567</id><published>2009-09-22T17:13:00.000-07:00</published><updated>2009-09-22T17:16:16.695-07:00</updated><title type='text'>Essential log attributes to log - duration of a request in access.log</title><content type='html'>It is absolutely imperative that the access.log file from your Web server record the total response time as measured by the Web server.  This is available in all flavours of Web servers.  It provides definitive response time numbers as they leave the Web server that can be used as a second data point to the application monitor's servlet response time.  The log entry also allows sysadmins a chance to put their log monitors on it to alert on long response times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1811587444420820567?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1811587444420820567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1811587444420820567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1811587444420820567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1811587444420820567'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/essential-log-attributes-to-log.html' title='Essential log attributes to log - duration of a request in access.log'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2835313169337411687</id><published>2009-09-22T16:56:00.000-07:00</published><updated>2009-09-22T17:12:01.485-07:00</updated><title type='text'>Default values - they're not for everyone</title><content type='html'>I am frequently asked about about the significance, or lack thereof, of default values to one or more configuration items.  People need to remember that default values are simply starting points so the environment can be brought up.  For example, an operating system has the default value for TCP Keep-Alives set to 2 hours.  According to &lt;a href="http://www.faqs.org/rfcs/rfc1122.html"&gt;RFC 1122&lt;/a&gt; this is an acceptable default value.  However, if you look at the acceptable ranges of values it starts at 10 seconds and can be set as high as 10 days.  So, obviously, the default value is not going to work for everyone.  Some sites may need to set it low to around 10-15 seconds.  Other sites might need a 2 or 3 day setting.&lt;br /&gt;&lt;br /&gt;Additionally a comment was made in general about setting the value of TCP Keep-Alives can not be lower than 2 hours.  I think it was a misreading of the RFC specification that reads "This interval MUST be configurable and MUST default to no less than two hours."  Read that the DEFAULT must not be less than two hours.  This does not imply that the value can not be lower than two hours.  The lesson learned there is to read the specifications to the letter.  Unfortunately I think the emphasis in the RFC on the word "MUST" does distract the reader from the word that follows "default" and can subtly mislead the reader.  Erroneous information is consequently passed on as a rule.  Unfortunately, if no one backtracks reads the RFC and verifies the rule then rampant disinformation is spread and becomes written in stone.&lt;br /&gt;&lt;br /&gt;Trust but verify every setting in your environment.  Every setting should be tested as thoroughly as possible.  Documentation should then record what was tested and what values were selected over others and why.  This documentation will be valuable to the group of people maintaining the application 5 years from now and I can guarantee it will not be you the reader.  It will be whoever is watching the store after you have moved on to new and exciting career opportunities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2835313169337411687?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2835313169337411687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2835313169337411687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2835313169337411687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2835313169337411687'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/default-values-theyre-not-for-everyone.html' title='Default values - they&apos;re not for everyone'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5244382028830199700</id><published>2009-09-16T08:31:00.001-07:00</published><updated>2009-09-16T08:32:25.907-07:00</updated><title type='text'>Enable verbose GC</title><content type='html'>http://www-01.ibm.com/support/docview.wss?rs=180&amp;amp;uid=swg21114927&lt;br /&gt;&lt;br /&gt;I really recommend running in production with verbose GC enabled.  The use of the term verbose is unfortunate as it is not as verbose as people think it is.  And the data collected is invaluable. &lt;br /&gt;&lt;br /&gt;If you have any doubts, enable verbose GC in test and see if you can measure any impact from enabling it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5244382028830199700?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5244382028830199700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5244382028830199700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5244382028830199700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5244382028830199700'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/enable-verbose-gc.html' title='Enable verbose GC'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-424107710651993447</id><published>2009-09-16T08:11:00.000-07:00</published><updated>2009-09-16T08:17:10.927-07:00</updated><title type='text'>socketread0 timeout on JDBC connections</title><content type='html'>Since I run into this problem every once in a while I'm putting up a note here to help others when they run into this problem.  JDBC calls can sometimes get stuck on socket read calls to the database if some rather nasty network problems exist.  The only way to determine if network problems exist is to use tcpdump (AIX, Linux) or snoop (Solaris) to capture the packets.  One can then use Wireshark (or its predecessor Ethereal) to read the capture files.  If you see issues like "unreassembled packets", "lost segments", "duplicate ACK" or checksum errors then most likely the network is having some abhorrent behaviour affecting the server.  If random threads hang on socketRead0 calls that never seem to get a response then the only way to deal with this is through timeouts. &lt;br /&gt;&lt;br /&gt;On DB2 follow use this parameter:&lt;br /&gt;&lt;br /&gt;http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.apdv.java.doc/doc/r0052038.html&lt;br /&gt;&lt;br /&gt;blockingReadConnectionTimeout&lt;br /&gt;The amount of time in seconds before a connection socket read times out. This property applies only to IBM Data Server Driver for JDBC and SQLJ type 4 connectivity, and affects all requests that are sent to the data source after a connection is successfully established. The default is 0. A value of 0 means that there is no timeout.&lt;br /&gt;&lt;br /&gt;For Oracle use:&lt;br /&gt;&lt;br /&gt;oracle.jdbc.ReadTimeout&lt;br /&gt;&lt;br /&gt;http://forums.oracle.com/forums/thread.jspa?messageID=2326985&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-424107710651993447?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/424107710651993447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=424107710651993447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/424107710651993447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/424107710651993447'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/09/socketread0-timeout-on-jdbc-connections.html' title='socketread0 timeout on JDBC connections'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2014965389015201157</id><published>2009-08-18T21:15:00.001-07:00</published><updated>2009-08-18T21:21:59.265-07:00</updated><title type='text'>Logs, log identification, log monitoring</title><content type='html'>Logs are an ultimate source of information to the health of an application. Logging data helps understand if something has gone wrong and what might have gone wrong.  The problem is that there are two sides to logging.&lt;br /&gt;&lt;br /&gt;Developers provide the first level which are the log statements themselves.  I have always found that a major/minor log code (i.e. (error/warn/info/trace = major; minor = module/method/logic) to be the most straight forward way to provide log information.  Identify the type of log message being recorded to a specific category.&lt;br /&gt;&lt;br /&gt;For the operations side of the house they can monitor logs and based off of known major log codes they can decide if they need to take action.  A major code that indicates an error can be immediately dispatched to a field technician.  While other levels can be monitored or collected if in troubleshooting mode. &lt;br /&gt;&lt;br /&gt;However, if an application development team does not provide any well defined codes for log messages and only provide free form text then the operations/runtime side has difficulty determining if a specific log entry is a problem or not.  Unfortunately, most application development teams choose the free form text logging as their solution which makes runtime operations that much more difficult and, in many cases, confusing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2014965389015201157?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2014965389015201157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2014965389015201157' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2014965389015201157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2014965389015201157'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/08/logs-log-identification-log-monitoring.html' title='Logs, log identification, log monitoring'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2240075838837581654</id><published>2009-07-28T06:37:00.000-07:00</published><updated>2009-07-28T06:56:53.559-07:00</updated><title type='text'>Keeping notes (AKA your operational run book)</title><content type='html'>This morning I was reminded about the importance of keeping notes about the problems I encounter and the solution that provided the fix.  A co-worker of mine researching a problem came across my &lt;a href="http://websphere-performance.blogspot.com/2008/08/one-reason-i-like-to-take-thread-dumps.html"&gt;blog post&lt;/a&gt; through a google search.  It seems their environment is suffering from the same symptoms.  Had I not kept a note about that issue they would have most likely gone through the same level of effort I originally did to research and find the solution.  Hopefully when they apply the fix it resolves their problem (I think it will) and they didn't have to spend several hours/days to get to resolution.&lt;br /&gt;&lt;br /&gt;This brought to mind the importance of a run book.  If you are not familiar with the term a run book is basically an operations manual.  It spells out what needs to be done for various tasks.  For example, if we need to deploy a new application into production the run book has a full set of instructions (a recipe if you will) on what to do.  Likewise, when the trouble shooter debugs a problem they record in the run book what the problem was, the steps they took to determine root cause, the fixes they tried and which one(s) finally worked.  This way should the problem reoccur and a different shift of people see the same problem they can refer to the run book and go through the same steps. &lt;br /&gt;&lt;br /&gt;The run book does not have to only address technical details.  It can also provide operational response instructions like how to run a war room,who needs to be involved, when various organizations/teams are engaged, what triggers an engagement, etc, etc.  Every operational detail can be recorded in the run book. &lt;br /&gt;&lt;br /&gt;Does your production environment have a run book?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2240075838837581654?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2240075838837581654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2240075838837581654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2240075838837581654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2240075838837581654'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/07/keeping-notes-aka-your-operational-run.html' title='Keeping notes (AKA your operational run book)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3788533354590036834</id><published>2009-07-20T08:33:00.000-07:00</published><updated>2009-07-20T08:41:48.329-07:00</updated><title type='text'>Finding information (like tuning guides)</title><content type='html'>I frequently get queries about finding information on one topic or another (generally around performance or application monitoring).  A co-worker in Australia was looking for some general WebSphere Web services tuning guides.  IBM.com has a wealth of information on a variety of topics so I thought I would put together this post on how to search for information.&lt;br /&gt;&lt;br /&gt;This particular &lt;a href="http://www.google.com/search?q=site%3Aibm.com+web+services+tuning&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=org.mozilla:en-US:official&amp;amp;client=firefox-a"&gt;google search&lt;/a&gt; is one I used to find information for Web services tuning.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_V519e05cxcY/SmSPvlR8BiI/AAAAAAAABEY/9ofnRIOjjJs/s1600-h/google.search.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 55px;" src="http://1.bp.blogspot.com/_V519e05cxcY/SmSPvlR8BiI/AAAAAAAABEY/9ofnRIOjjJs/s320/google.search.jpg" alt="" id="BLOGGER_PHOTO_ID_5360567504101705250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You'll note the key in the search string is the beginning "site:ibm.com" which restricts the search to only those items found at ibm.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3788533354590036834?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3788533354590036834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3788533354590036834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3788533354590036834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3788533354590036834'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/07/finding-information-like-tuning-guides.html' title='Finding information (like tuning guides)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_V519e05cxcY/SmSPvlR8BiI/AAAAAAAABEY/9ofnRIOjjJs/s72-c/google.search.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4762812310769724814</id><published>2009-07-20T08:31:00.001-07:00</published><updated>2009-07-20T08:32:52.957-07:00</updated><title type='text'>Latest article</title><content type='html'>I forgot to post when my &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-probdetermination/index.html?S_TACT=105AGX04&amp;amp;S_CMP=EDU"&gt;dW article came out&lt;/a&gt;.  This is a new series I'm going to write on defensive architectures.  Part 2 is being reviewed by my colleagues right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4762812310769724814?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4762812310769724814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4762812310769724814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4762812310769724814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4762812310769724814'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/07/latest-article.html' title='Latest article'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4852563790128406227</id><published>2009-07-09T12:37:00.000-07:00</published><updated>2009-07-09T12:44:19.454-07:00</updated><title type='text'>Problem Determination - High CPU strategies on Windows OS</title><content type='html'>I've been quiet the past couple of months but that is because I have an article coming out on deveoperWorks soon.  I'll post a link to that when it is ready. &lt;br /&gt;&lt;br /&gt;A colleague called me today to talk about a high CPU scenario and steps to take to try and resolve it.  My first recommendation was to get thread dumps of the JVM when it hits the high CPU scenario.  Then I found out the JVM is running on a Windows OS.  Since it is not possible to execute a kill -3 on Windows and one has to use the script methodology with no CPU available it is tough to get a thread dump. &lt;br /&gt;&lt;br /&gt;I suggested he collect thread dumps as the CPU starts to climb.  This works if they can (a) predict when the CPU will start to climb and (b) it climbs slowly enough to be able to collect javacores along the trajectory.  It sounds like the CPU can spike in a matter of seconds even at stead load volumes.  Ugh.&lt;br /&gt;&lt;br /&gt;My final thought is to reduce the thread pool max in half and rerun the test.  Perhaps there are simply too many threads executing and nothing will prevent it from going 100% CPU.  Though I have seen code that can drive even an 8-way to 100% with just a few threads.  I'm waiting to hear back.  But I think the latter strategy of reducing the thread pool max will be the best course of action for them.  I expect an email in the morning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4852563790128406227?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4852563790128406227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4852563790128406227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4852563790128406227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4852563790128406227'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/07/problem-determination-high-cpu.html' title='Problem Determination - High CPU strategies on Windows OS'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4140967999916018455</id><published>2009-03-26T15:13:00.001-07:00</published><updated>2009-03-27T05:39:24.434-07:00</updated><title type='text'>Predicting Capacity</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I have had a number of calls around "We have an application, not built yet, but we want to know if we have enough capacity and/or will the application scale/perform in our environment."&lt;br /&gt;&lt;br /&gt;My analogy to this is the following.  Someone shows me the blueprint to a Formula 1 (or NASCAR) race car.  They ask me "will this car win the race?" &lt;br /&gt;&lt;br /&gt;While the car being proposed may have all the right components (wheels, engine, gearbox, etc) there are other unknown variables that determine if the car can win a race.  Without extensive testing there's no way to know if all the components are assembled correctly nor if they are configured to work together in optimal manner (performance tuned). &lt;br /&gt;&lt;br /&gt;Related to this is the ability of the car to both get off the starting line and finish the race (a prerequisite for winning).  Again, there are a number of variables that impact this.  First is some catastrophic failure in one of the components.  Then there is the skill of the car's driver.  Then the other drivers on the same racetrack and crashing into our car. &lt;br /&gt;&lt;br /&gt;There is simply no way to predict if the car can win much less finish a race. &lt;br /&gt;&lt;br /&gt;The same attitude has to be taken when planning your production IT environment.  You can't predict behaviour.  You can, on the other hand, conduct stringent system integration and performance testing in order to see if your application will (or will not) perform as expected in production. &lt;br /&gt;&lt;br /&gt;This is why everyone should test as early in the development cycle as possible.  I was working with one application that had been in production for several months with constant, recurring failures.  There were fundamental application design problems in how the application was developed.  It took us four more months to fix those design problems and get the final, new version of the application into production.  Don't put off testing.  Do it right.  Do it early.  Test early.  Test often.  That is the key to success in production. &lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=2e64ccd4-2225-8fb7-812f-f0a3f9fbda08" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4140967999916018455?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4140967999916018455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4140967999916018455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4140967999916018455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4140967999916018455'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/03/predicting-capacity.html' title='Predicting Capacity'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8173169020571717992</id><published>2009-02-18T03:57:00.001-08:00</published><updated>2009-02-18T03:57:49.075-08:00</updated><title type='text'>Too many testers?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Wow.  I never thought I'd see a statement so outrageous.  Someone, in this case Microsoft, has too many testers?  Can this be true?  Is this why Windows has fix after fix every week because their testing is so good because they have enough testers that they can get rid of excess testers?  &lt;br/&gt;&lt;br/&gt;I can't believe that is even remotely true.  Most organizations suffer from having not enough testers.  This is why applications deployed in production suffer.  Something had to be cut out of the test plan because they either couldn't test something or didn't have the time/people.  &lt;br/&gt;&lt;br/&gt;A technology enterprise should not cut technical folks out of their organization.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.cringely.com/'&gt;I, Cringely - Cringely on technology&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;"There are too many testers"&lt;/blockquote&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=29c8187e-8a68-4222-b96b-71e59bfb93f2' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8173169020571717992?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8173169020571717992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8173169020571717992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8173169020571717992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8173169020571717992'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/02/too-many-testers.html' title='Too many testers?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4569793179414016013</id><published>2009-01-29T10:03:00.000-08:00</published><updated>2009-01-29T10:10:16.428-08:00</updated><title type='text'>When Performance Counts</title><content type='html'>&lt;a href="http://www.internetretailer.com/dailyNews.asp?id=29091"&gt;Macys.com holiday sales soar 26%&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A site that performs well helps your bottom line.  Note in the article during the critical December 2008 month sales increased 39.1% over December 2007.  Obviously several factors play into this kind of success.  The site had to remain available so users could access it.  The site had to perform in order for users to stay connected and not go somewhere else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4569793179414016013?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4569793179414016013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4569793179414016013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4569793179414016013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4569793179414016013'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/01/when-performance-counts.html' title='When Performance Counts'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-768851769354541185</id><published>2009-01-20T04:45:00.001-08:00</published><updated>2009-03-02T06:25:27.084-08:00</updated><title type='text'>Golden Rule #1 - It is what you don't test that breaks in production</title><content type='html'>I'm putting together information for some folks around performance.  So I'm coming up with a set of golden rules.  My first one is:&lt;br /&gt;&lt;br /&gt;It is what you don't test that breaks in production.&lt;br /&gt;&lt;br /&gt;This isn't specific to WebSphere products either.  This goes pretty much across the board.&lt;br /&gt;&lt;br /&gt;I work with quite a few people on performance issues.  There are two types of problems that could have easily been avoided had the testing been conducted properly.&lt;br /&gt;&lt;br /&gt;(a) 80/20 rule&lt;br /&gt;&lt;br /&gt;Some people live by an 80/20 rule.  We'll test the 20% of the application that 80% of the users use.  Um, what about the other 80% that goes untested?  What if that brings down the site even if only a single user hits it?  I'd rather keep the site up and test everything.  Wouldn't you?&lt;br /&gt;&lt;br /&gt;(b) Boundary value problems&lt;br /&gt;&lt;br /&gt;Everything takes input.  Not every application &lt;span style="font-weight: bold;"&gt;validates&lt;/span&gt; input.  This leads to problems with applications running unbounded database queries because the filter wasn't filled out correctly.  Or someone fills in all 250 rows on a page and crashes the site because the testers missed that point.  Every use case has boundaries.  Test the zero case, the in between case and then infinity.  To infinity and beyond my friends!  That is where we can take our sites if we do the testing right!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-768851769354541185?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/768851769354541185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=768851769354541185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/768851769354541185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/768851769354541185'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/01/golden-rule-1-it-is-what-you-dont-test.html' title='Golden Rule #1 - It is what you don&apos;t test that breaks in production'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1843410571860265547</id><published>2009-01-14T07:55:00.000-08:00</published><updated>2009-01-14T07:57:11.293-08:00</updated><title type='text'>Winter Hibernation</title><content type='html'>I know.  I've been lax on updating this site.  Partly because of the online holiday shopping season (I'm always busy that time of the year).  Partly because of winter (we got socked in with 5" of snow this morning). &lt;br /&gt;&lt;br /&gt;But I will come out of my shell soon and start commenting on new things to cover for 2009.  We have some interesting Process Server testing strategies to talk about too which I'm absolutely excited to share with you. &lt;br /&gt;&lt;br /&gt;Today my focus is on getting my speaker proposals in for the IMPACT 2009 conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1843410571860265547?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1843410571860265547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1843410571860265547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1843410571860265547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1843410571860265547'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2009/01/winter-hibernation.html' title='Winter Hibernation'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-493834188603208961</id><published>2008-11-08T07:58:00.000-08:00</published><updated>2008-11-08T08:03:48.056-08:00</updated><title type='text'>Less is more - shared resources and MAX sizings</title><content type='html'>Less is more.  I don't know who to originally credit for that saying and when it comes to shared resource (i.e. thread and JDBC connection) pools this is the motto to live by.  Need more than 40 threads to drive 100% CPU then the performance expert needs to look at where the bottleneck is in the application.  Think the application needs more than 10 connections to a database?  Think again.  Too often I come across situations where the application is pegging the CPU and/or the database is so overwhelmed in production we can't bring it down to failover.  Next time the team wants to change parameters to shared resource pools encourage them to make them smaller.  They'll look at you as if you're crazy and think you'll be the next one to lose your job ... but you won't when they find your solution was actually the correct way to go. &lt;br /&gt;&lt;br /&gt;Speaking of which, Alex has roadmaps he didn't work on this past week (well, I did have eye surgery and a hard disk crash both within days of each other).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-493834188603208961?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/493834188603208961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=493834188603208961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/493834188603208961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/493834188603208961'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/11/less-is-more-shared-resources-and-max.html' title='Less is more - shared resources and MAX sizings'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3442686940025098127</id><published>2008-11-06T07:53:00.000-08:00</published><updated>2008-11-06T07:55:28.649-08:00</updated><title type='text'>Why Alex needs a backup</title><content type='html'>Because Alex's hard disk failed.  Alex actually does have a back up of his data but not all the applications so it is going to be quite a bit of effort to get a C drive with what I need on it.  That said, I'll start with a fresh Windows XP image and may have lots better performance now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3442686940025098127?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3442686940025098127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3442686940025098127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3442686940025098127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3442686940025098127'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/11/why-alex-needs-backup.html' title='Why Alex needs a backup'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3262390156108462487</id><published>2008-11-04T11:11:00.001-08:00</published><updated>2008-11-04T11:25:54.339-08:00</updated><title type='text'>Disaster Recovery - why you need a plan and execute on it</title><content type='html'>Problems happen.  Fiber cuts can occur out in the wild.  Hardware fails.  Routers go down.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last thing you want is to have no backup.  Put the backup in a separate data center facility on separate ISP inputs.  Have multiple electrical feeds into each data center.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Otherwise you will have a site outage and there will be nothing that can be done to fix it because you are waiting on someone else who you have no control over to fix the problem.  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3262390156108462487?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3262390156108462487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3262390156108462487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3262390156108462487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3262390156108462487'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/11/disaster-recovery-why-you-need-plan-and.html' title='Disaster Recovery - why you need a plan and execute on it'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8918162343141173729</id><published>2008-10-28T09:08:00.001-07:00</published><updated>2008-10-28T09:08:19.469-07:00</updated><title type='text'>Save those (test) results and logs</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Organizations typically have well defined archive policies for the production logs and data.  However, a lot of test environments are ignored.  There is nothing more frustrating than trying to look at test results from a couple of weeks ago and the logs are gone.  Thus any sort of analysis (i.e. pulling the verbose GC data from native_stderr) can not be conducted.  That means the test was inconclusive.  &lt;br/&gt;&lt;br/&gt;If your organization does not have archival procedures and processes for the test environments (at least the performance one) make sure that it gets on someone's agenda.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8918162343141173729?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8918162343141173729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8918162343141173729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8918162343141173729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8918162343141173729'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/10/save-those-test-results-and-logs.html' title='Save those (test) results and logs'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-6918595683438774362</id><published>2008-10-24T08:16:00.001-07:00</published><updated>2008-10-24T08:16:40.064-07:00</updated><title type='text'>Coding for resiliency : long running (or infinite) loops : stop the madness</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;....&lt;br/&gt;while(exception instance of MyException) {&lt;br/&gt;    exception = (MyException)exception;&lt;br/&gt;}&lt;br/&gt;....&lt;br/&gt;&lt;br/&gt;This was code (not verbatim) that was found in a production application.  Please, always have a valid exit condition for your loops.  And then a &lt;a href='http://websphere-performance.blogspot.com/2008/09/code-for-resiliency-circuit-breakers-in.html'&gt;2nd way to exit the loop&lt;/a&gt; somehow if the primary condition always reverts to true.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-6918595683438774362?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/6918595683438774362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=6918595683438774362' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6918595683438774362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6918595683438774362'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/10/coding-for-resiliency-long-running-or.html' title='Coding for resiliency : long running (or infinite) loops : stop the madness'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2383117779895203151</id><published>2008-10-24T04:35:00.001-07:00</published><updated>2008-10-24T04:35:38.660-07:00</updated><title type='text'>Coding for Resiliency : thread locals and cleaning them up in a finally block</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I haven't updated this site because I had a brief vacation that was cut short by a blocked tear duct.  I'm still suffering with this and the medication seems to have alleviated but not rectified the problem.  Unfortunately that means going to an eye doctor on Monday if it hasn't cleared.&lt;br/&gt;&lt;br/&gt;A colleague of mine is working on a problem where they plan to use a thread local within a servlet filter.  When I read this it reminded me of another problem; uncleaned thread local variables.  The key here is to be sure to clear out the thread local in a finally block before exiting the servlet filter.  This is because it is very likely that a thread in WebSphere Application Server will be reused by subsequent requests (especially in high volume environments).  If the thread local is not properly cleaned up during an exception situation then the next request on the same thread will be looking at a thread local in an invalid state.  So use those finally blocks for what they were purposed for!&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2383117779895203151?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2383117779895203151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2383117779895203151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2383117779895203151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2383117779895203151'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/10/coding-for-resiliency-thread-locals-and.html' title='Coding for Resiliency : thread locals and cleaning them up in a finally block'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-56584443072686608</id><published>2008-10-09T07:02:00.001-07:00</published><updated>2008-10-09T07:02:26.372-07:00</updated><title type='text'>HTTP Session failover and performance</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;One of my colleagues wrote a good article that covers HTTP session failover.  There are performance implications to using HTTP sessions and persisting them.  This spurs me to start a series of articles to discuss some of the pros/cons with these mechanisms.  &lt;br/&gt;&lt;br/&gt;Before session persistence existed there was no fail over capability for sessions.  This is, though, probably the most performant deployment.  Sure, users have to log back in but the application server doesn't have to spend time on serializing objects and then pushing them out to a database.  You save on both memory (for the serialized objects) which then have to be garbage collected which is paid for through CPU utilization.  &lt;br/&gt;&lt;br/&gt;If your business requirements can stand it, and require users to relogin in a failure, then this is a good deployment strategy.  I know a number of intra departmental applications that can tolerate such activity.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/techjournal/0810_webcon/0810_webcon.html'&gt;The WebSphere Contrarian: Back to basics: Session failover&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;My preferred alternative is to rely not on session distribution, but instead to rely simply on HTTP server plug-in affinity to “pin” a user to an application server, although this does mean that stopping an application server JVM will result in the loss of the HttpSession object. The benefit of doing so is that there is no need to distribute the session objects to provide for HttpSession object failover when an application server fails or is stopped. The obvious down side is that a user will lose any application state and will need to log back in and recreate it, and this may or may not be acceptable for your application or business requirements. I'll mention that I’ve worked with a number of customers that in fact agree with this view and make this their standard practice.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-56584443072686608?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/56584443072686608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=56584443072686608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/56584443072686608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/56584443072686608'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/10/http-session-failover-and-performance.html' title='HTTP Session failover and performance'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-9004891570862000260</id><published>2008-10-08T11:55:00.000-07:00</published><updated>2008-10-08T11:56:37.001-07:00</updated><title type='text'>pClusters on JDK 1.4.2</title><content type='html'>When enabling pClusters on the 1.4.2 JDK be sure to enable gcpolicy:subpool otherwise it won't work as expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-9004891570862000260?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/9004891570862000260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=9004891570862000260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9004891570862000260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9004891570862000260'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/10/pclusters-on-jdk-142.html' title='pClusters on JDK 1.4.2'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-6262374018249383117</id><published>2008-09-25T12:47:00.000-07:00</published><updated>2008-09-25T12:50:36.827-07:00</updated><title type='text'>Redundancy and unreliable software</title><content type='html'>Redundancy is often a great thing to have and has save many a production environments.  However, redundancy works if the underlying hardware and software work.  Making an unreliable environment redundant simply means that the redundant system is unreliable too.  Failing over from one failing environment to another that will fail is not going to help availability. &lt;br /&gt;&lt;br /&gt;Therefore, the best thing to do is to make sure that the system being copied is reliable in and of itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-6262374018249383117?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/6262374018249383117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=6262374018249383117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6262374018249383117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6262374018249383117'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/redundancy-and-unreliable-software.html' title='Redundancy and unreliable software'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3241289358771947213</id><published>2008-09-18T12:49:00.000-07:00</published><updated>2008-09-18T13:00:24.225-07:00</updated><title type='text'>Deploying with Resiliency - shared libraries testing</title><content type='html'>I've been talking about Coding for Resiliency but figured I should do a little focusing on Deploying with Resiliency today.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anytime one pushes out a new release candidate it should be tested in the same configuration as it will be in the production environment.  This means that any shared libraries must be deployed out with the applications that are using them when multiple applications share the same app server.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The best that can happen is that the production environment will remain stable as long as what was tested is what is in production.  However, the worse that can happen (and it will) is the site will become unstable.  That is not the end of it though.  Whatever deployment was put in place has to be backed out (here is where multiple cells really helps you out and if you don't know what I'm talking about go to this &lt;a href="http://www-128.ibm.com/developerworks/websphere/techjournal/0412_vansickel/0412_vansickel.html"&gt;great article by my colleague Peter&lt;/a&gt;) and the previous deployment has to be re-established in production.  The decision to revert also has to be made.  This is, depending on the people running production, a difficult decision to make.  Even more difficult if a back out cell is not available. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Therefore, depending on when it is discovered that the production site is unstable and the decision to back out is finalized it can be several hours before production can be stabilized.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is one reason why it is important to test prior to deployment in production and that "testing in production" is never a good idea.  &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3241289358771947213?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3241289358771947213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3241289358771947213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3241289358771947213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3241289358771947213'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/deploying-with-resiliency-shared.html' title='Deploying with Resiliency - shared libraries testing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1773589982875378677</id><published>2008-09-12T11:05:00.001-07:00</published><updated>2008-09-12T11:11:13.179-07:00</updated><title type='text'>Code for resiliency - validate input</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Scenario 1&lt;/span&gt;&lt;br /&gt;I was speaking with one of my colleagues about problems they were seeing with an application.  It seems that if the user typed alphabetic characters where a number was expected the application choked, died and rolled over. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;I was amazed.  "Don't they validate their input?" I asked.  Depending on your view point surprisingly they didn't. &lt;br /&gt;&lt;br /&gt;Always, always validate user input.  If expecting a name make sure it doesn't contain characters you don't normally see in names (i.e. Joe123).  If expecting a zipcode make sure it is formatted properly.  But never just take the input from the user and pass it on to the next layer. &lt;br /&gt;&lt;br /&gt;In addition, validating input will help prevent XSS attacks. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scenario 2&lt;/span&gt;&lt;br /&gt;You're running a B2x Web service and have complex XML documents.  But modern day parsers are vulnerable to malformed XML that can contain circular references. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution&lt;br /&gt;&lt;/span&gt;Acquire DataPower and have it front your Web services.  DataPower has incredibly good XML validation and is able to prevent DoS attacks from malformed XML. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1773589982875378677?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1773589982875378677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1773589982875378677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1773589982875378677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1773589982875378677'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/code-for-resiliency-validate-input.html' title='Code for resiliency - validate input'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-305526042556797504</id><published>2008-09-11T06:31:00.001-07:00</published><updated>2008-09-11T06:31:32.490-07:00</updated><title type='text'>This one keeps on going and going</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I blogged about this problem a year and a half ago.  It continues to live on.  If you are writing non-batch applications then set this setting to unshareable.  Yes, it is unfortunate the default is shareable but we need to deal with it.  This descriptor seems to move around so look for it either in the JDBC or thread section of the descriptors.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://websphere-performance.blogspot.com/2007/02/day-one-shareable-jdbc-connection.html'&gt;Alexandre Polozoff on WebSphere Performance: Day One SHAREABLE JDBC connection setting&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;change the descriptor to UNSHAREABLE &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-305526042556797504?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/305526042556797504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=305526042556797504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/305526042556797504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/305526042556797504'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/this-one-keeps-on-going-and-going.html' title='This one keeps on going and going'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3972459968959959460</id><published>2008-09-11T05:57:00.001-07:00</published><updated>2008-09-13T08:46:54.473-07:00</updated><title type='text'>Code for resiliency - circuit breakers in loops</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-weight: bold;"&gt;Scenario&lt;/span&gt;&lt;br /&gt;One common problem I run into on different critsits are run away applications.  You know the type.  The application is sitting there in a tight loop allocating 1 or 2Megs of data on each iteration chewing up CPU and causing the garbage collector fits.  Sometimes the code is buggy.  Other times the data has changed and has pointers to larger data sets than it should.  A few times a new use case was discovered.&lt;br /&gt;&lt;br /&gt;Runaway loops in an online, web application are a bad thing.  If enough users go down the same use case the application can have several threads all running away.  The CPU will be pegged at or close to 100% and the verbose GC data shows tons of memory being allocated at very fast rates because the garbage collector is busy collecting it!&lt;br /&gt;&lt;br /&gt;As more users go down the same use case more and more threads get hung up on different application servers in the farm.  Pretty soon, you're recycling application servers as it is the only administrative solution for this problem.  The problem with recycling is you are also dumping users who have good transactions in progress.  Because the code has run away there are no other options.  Hopefully those good transactions will try their transaction again when it fails and not go shopping somewhere else.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;Pick some arbitrary count limit as a circuit breaker. Once the count limit is reached the loop exits.  In addition, when the circuit breaker is activated the application log that this occurred and dump some of the relevant data around that point.  This way when a problem occurs someone can be alerted that the circuit breaker was activated and examine the problem.&lt;br /&gt;&lt;br /&gt;I would implement the loop exit by throwing an exception (this is an exceptional case right?) from an if statement at the beginning of the loop.  Let the exception handler dump the data to the log.  Make sure something is monitoring the log for the exception and that someone is alerted to examine the problem.&lt;br /&gt;&lt;br /&gt;Resiliency in code is not difficult.  But you do have to anticipate the worst will happen.  Every loop has to have a way to abort if it has executed an unreasonable amount of times. Otherwise production can be very unstable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unreasonable Arguments Opposed&lt;/span&gt;&lt;br /&gt;While I tend to think I'm fairly even handed a number of people have told me this is a stupid idea.  Well, let me tell you why it isn't.  If the circuit breaker is hit then you know you are already in an invalid state.  Regardless of the reason continuing to process the request is pointless because something is not right.  If we only have 800 items in a product catalog then looping a 1000 times means something is wrong.  Therefore there has to be a way to abort the request before we degrade production.  As for that user's request there is no way they will be able to complete it.  However, since the circuit breaker was activated and data was logged and someone was alerted not only do we know that something happened but someone is not actively working the problem to figure out why the breaker was activated. &lt;br /&gt;&lt;br /&gt;What about transaction integrity people ask?  Well, if you handle exceptions properly (and that'll be another CfR article) then you won't have any problems with transaction boundaries and everything will be rolled back appropriately. &lt;br /&gt;&lt;br /&gt;What about open locks?  Again, if you have coded your exception handling properly then all locks should be released. &lt;br /&gt;&lt;br /&gt;What about open JDBC connections?  Again, if you have coded your exception handling properly then all JDBC connections should be released in the finally block, no? &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3972459968959959460?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3972459968959959460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3972459968959959460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3972459968959959460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3972459968959959460'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/code-for-resiliency-circuit-breakers-in.html' title='Code for resiliency - circuit breakers in loops'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3844049038449617178</id><published>2008-09-08T17:21:00.001-07:00</published><updated>2008-09-08T17:21:47.828-07:00</updated><title type='text'>5 9s is not easy, it can be done but you have to know what you're doing</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Continuing the coverage of production outages that make the news it seems that the London Stock Exchange had a serious outage today.  Most likely due to the high volume resulting from the US Government takeover of Freddie &amp;amp; Fannie.  &lt;br/&gt;&lt;br/&gt;We at IBM often put together high volume environments that have high availability requirements.  In order to do this, and do it well, one has to make sure they have built in resiliency, enough capacity and then disaster recovery for business continuity.  I've worked with a number of household name companies, world wide, on providing just such capabilities.  It is disastrous when a e-commerce retailer is unable to sell product during the holiday shopping season.  Things can get particularly bad for financial institutions when money is on the line.  &lt;br/&gt;&lt;br/&gt;I can't say what they did or didn't do but it certainly seems like people want answers.  Reassurances are going to be hard to come by until they do a lot more ground work.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.reuters.com/article/ousivMolt/idUSL01084620080908'&gt;London Stock Exchange crippled by system outage | Reuters&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The exchange would not say whether volume was the issue and declined to give details on what had caused the problem. But angry customers were demanding an explanation.&lt;br/&gt;&lt;br/&gt;"We want answers as to how this happened in the first place and reassurances that it will not happened again," said Angus Rigby, chief executive of brokerage TD Waterhouse.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3844049038449617178?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3844049038449617178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3844049038449617178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3844049038449617178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3844049038449617178'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/5-9s-is-not-easy-it-can-be-done-but-you.html' title='5 9s is not easy, it can be done but you have to know what you&amp;#39;re doing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5051546164365859274</id><published>2008-09-05T10:52:00.000-07:00</published><updated>2008-09-05T10:56:39.497-07:00</updated><title type='text'>debug logging has no place in production</title><content type='html'>You know, I'm often confronted with this problem and I have yet to really understand why it exists.  Lots of people are running applications in production and they have logging set to the debug level.  From a performance perspective this is intolerably horrible!  You're constantly hitting disk, garbage collecting spurious strings, serializing around the disk access that it just makes no sense to me how I keep getting javacores with stack traces in logger.debug (or worse, SystemOut.println!)...  speaking of  println, one should never, ever use println for logging.  There is no way to control it like a logger.  With JDK v1.4 (I believe, maybe it is Java 5) there is a logger in the JDK.  Use it!  And set your log level to WARN or ERROR but nothing more granular than that unless you're debugging a problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5051546164365859274?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5051546164365859274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5051546164365859274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5051546164365859274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5051546164365859274'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/debug-logging-has-no-place-in.html' title='debug logging has no place in production'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3389161796032316282</id><published>2008-09-04T14:48:00.001-07:00</published><updated>2008-09-04T14:48:01.671-07:00</updated><title type='text'>tprof is your friend</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I've collected data on various 100% CPU problems and always am amazed how useful tprof data is yet it is very unintrusive.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www-01.ibm.com/support/docview.wss?uid=swg21116458'&gt;IBM - MustGather: 100% CPU usage on AIX&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;Collecting data for 100% CPU usage problems with IBM® WebSphere® Application Server on the AIX® operating system. Gathering this information before calling IBM support will help familiarize you with the troubleshooting process and save you time. &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3389161796032316282?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3389161796032316282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3389161796032316282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3389161796032316282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3389161796032316282'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/09/tprof-is-your-friend.html' title='tprof is your friend'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3947203027537135038</id><published>2008-08-27T06:45:00.001-07:00</published><updated>2008-08-27T06:45:08.669-07:00</updated><title type='text'>Disaster Recovery is not easy (just ask the FAA)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I commented on the flight plan problem yesterday and it is interesting to see that the FAA actually had a Disaster Recovery (DR) plan and running DR site in place.  But it didn't work.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.nytimes.com/reuters/technology/tech-usa-aviation-delay.html'&gt;U.S. Airports Back to Normal After Computer Glitch - NYTimes.com&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The other flight-plan facility in Salt Lake City had to handle the entire country when the Atlanta system failed but the backup system quickly overloaded, Brown said.&lt;/blockquote&gt;The interesting thing to point out here is that while the FAA had a DR plan in place it seems no one looked at the capacity of the backup site.  Was this bad planning?  Bad execution?  I wonder, did they ever test their DR environment?  It seems kind of pointless to have spent the time and effort to build out the DR environment to then have it fail when it was needed.  A waste of tax payers dollars IMHO.&lt;br/&gt;&lt;br/&gt;Unfortunately a DR site failing to accomplish what it was intended to do is more often the case than not.  First off, building a DR environment is not easy.  I know some pretty smart people that have gotten this wrong.  Secondly, after the DR environment is built it must be tested and tested as if a real disaster has occurred.  The best corollary I can think of is testing your backups.  Does anyone ever restore a server to see if the backups are good?  I once was working with an organization that had their servers crash due to a hardware failure.  They went to recover the servers and only then discovered the backups were corrupt.  It took them a few days to rebuild the servers so I got to go home.&lt;br/&gt;&lt;br/&gt;On a tangent, seeing that this &lt;b&gt;is&lt;/b&gt; a blog on WebSphere Application Server performance, the one mistake I have seen people make with DR from a WebSphere Application Server perspective is to have a cell cross data center boundaries (I'm sure I've blogged about this before but here it goes again).  The reason this is a mistake is that networks are not reliable.  TCP/IP is not guaranteed, reliable delivery.  Any hiccup which can include dropped packets, static electricity or planetary alignment in the solar system that causes even a slight degradation or lag in the networks between the two data centers can reek complete havoc within the cell.  And guess how hard it is to troubleshoot that problem?  Yeah, tough, real tough.   Thus, even when a disaster is not occurring strange "problems" can occur with the applications running in that cell that just can not be easily explained.  And the more distance you put between the data centers the more likely that strange problems will occur.&lt;br/&gt;&lt;br/&gt;Likewise, when a disaster occurs and half the cell disappears this alone can cause other problems.  For one, the application servers left running in the other data center will be looking for their lost siblings and spending time, CPU cycles, RAM and network bandwidth searching.  This too affects the applications running in this configuration.&lt;br/&gt;&lt;br/&gt;Therefore, moral of the story is to never have the cell boundaries leave the data center.  In fact, there are a number of reasons one should be running multiple cells within the same data center to better manage planned and unplanned maintenance.  Particularly in high volume, business critical, high availability environments.  &lt;br/&gt;&lt;br/&gt;Oh, that, and hire a real good DR expert if you're planning on implementing DR.  Nothing like having the DR plan fail.  In the FAA's case there are no repercussions (i.e. fines imposed that cost them millions of dollars a minute).  Granted, this probably did cost the airlines and the unfortunate passengers money but nothing the FAA will have to reimburse.  For a lot of private enterprises there could be severe repercussions not just in terms of penalties/fines but customer loyalty, customer trust and how your enterprise is viewed as a reliable business partner going forward.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3947203027537135038?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3947203027537135038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3947203027537135038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3947203027537135038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3947203027537135038'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/disaster-recovery-is-not-easy-just-ask.html' title='Disaster Recovery is not easy (just ask the FAA)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4523632821194842171</id><published>2008-08-27T06:14:00.001-07:00</published><updated>2008-08-27T06:14:29.189-07:00</updated><title type='text'>Network performance related issues: isolate the network</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Over the years I've worked on a few problems revolving around the network itself.  What I'd like to do is first throw down a gauntlet around performance testing environments and the #1 factor is to have an &lt;b&gt;isolated&lt;/b&gt; network.  This means that the only traffic going across the wire/routers/switches are only related to traffic in the performance test.  &lt;br/&gt;&lt;br/&gt;For example, one time we had spent the day troubleshooting functional problems in the application.  We finally got a good build and set up to start our baseline performance test later that night.  We kicked off the test around 20h00 and about 2 hours into the test our response times were tanking into the several seconds range.  I could not find any problems on the application server or the Web server tier.  A little digging around and I found out the load generators were placed in a location remote from the test environment.  At around 22h00 network backups kicked off as it was their policy to backup their servers at night.  Good idea to run backups at night but because our load generators were sharing the same network their response times went down the drain.  We had to break off our test and we all left the office around 23h00 when it was clear that it would take several hours to relocate the load generators onto the same switch as the isolated performance test environment.  &lt;br/&gt;&lt;br/&gt;There is nothing more disappointing than gearing up for a test in the evening only to have it been a waste of time (both mine and the good folks I was working with) much less keeping everyone away from their families.  The reason the load generators were remotely located was because managers did not give the local team the time they needed to move them.  As it was, we had to move them and had to take the hit to the testing schedule to do it.  &lt;br/&gt;&lt;br/&gt;Moral of the story, make sure every piece of the performance test environment is isolated from the rest of the organizational network.  Otherwise testing will be inconclusive.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4523632821194842171?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4523632821194842171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4523632821194842171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4523632821194842171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4523632821194842171'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/network-performance-related-issues.html' title='Network performance related issues: isolate the network'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4176111545167994984</id><published>2008-08-26T14:53:00.001-07:00</published><updated>2008-08-26T14:53:57.460-07:00</updated><title type='text'>Root cause analysis</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;It is vitally important when problems occur that the root cause is identified.  If it isn't the problem will reappear again.  &lt;br/&gt;&lt;br/&gt;Though my guess is with the cutbacks in future flights we won't see this problem for a while.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://edition.cnn.com/2008/TRAVEL/08/26/faa.computer.failure/?imw=Y&amp;amp;iref=mpstoryemail'&gt;FAA computer problems cause flight delays - CNN.com&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The problem appeared similar to a June 8, 2007, computer glitch that caused severe flight delays and some cancellations along the East Coast.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4176111545167994984?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4176111545167994984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4176111545167994984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4176111545167994984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4176111545167994984'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/root-cause-analysis.html' title='Root cause analysis'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-6846884517155180045</id><published>2008-08-26T06:04:00.001-07:00</published><updated>2008-08-26T06:04:21.358-07:00</updated><title type='text'>Do you have the capacity for holiday shopping season 2008?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Ironic is probably not the right term.  I believe there was a problem in the air once over Canada over a similar situation where the plane was running out of fuel because the guy tanking up the plane was using one unit of measure and the person ordering the fuel used another.  &lt;br/&gt;&lt;br/&gt;That probably isn't the case for Amtrak.  But this story brought to mind a question... do you have enough fuel (capacity) for the upcoming holiday shopping season?  It is the end of August.  By my rough estimate we probably have about another 2 months before the 2008 online holiday shopping season begins.  If you haven't already run the numbers on your capacity I would highly recommend at least reviewing them right now.  Be sure you have the horsepower to let your end users have a pleasant shopping experience.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.usatoday.com/travel/news/2008-08-26-amtrak-fuel_N.htm'&gt;Amtrak train runs out of fuel, stranded 2 hours - USATODAY.com&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;It was the little engine that couldn't — because it was thirsty for fuel.&lt;br/&gt;&lt;/blockquote&gt;Otherwise you could find yourself having some pretty severe strain in the server environment.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-6846884517155180045?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/6846884517155180045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=6846884517155180045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6846884517155180045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6846884517155180045'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/do-you-have-capacity-for-holiday.html' title='Do you have the capacity for holiday shopping season 2008?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5176359152765763539</id><published>2008-08-26T05:53:00.001-07:00</published><updated>2008-08-26T05:53:11.379-07:00</updated><title type='text'>Test out the different GC algorithms</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The latest versions of the IBM JVM provide a number of different Garbage Collection (GC) algorithms.  Since no one algorithm is always the best to use it is imperative that the performance test plan allows for testing that cycles through each of the GC algorithms, adjusts the parameters based on the verboseGC output and sees if the results help improve the application's performance.  &lt;br/&gt;&lt;br/&gt;For example, I have noticed on a number of engagements around Process Server that using the gencon (generational garbage collection) has a positive effect on the server's performance.  Obviously tuning the nursery and tenured spaces is necessary based on each individual application from the verbose GC output.  But the fact that Process Server always seems to run better with gencon it is one of the first things I like to test out.  &lt;br/&gt;&lt;br/&gt;On the flip side, there are some tools out there that dynamically create object classes.  My understanding is these are used for transformations but what I don't get is why they need to be dynamically created.  Most object transformations are from one static object model to another.  Once the transform is generated to continually generate another duplicate object makes no sense.  Anyhow, I digress... the point I'm trying to make is that when dynamically generating lots of object classes (oh, say about 10,000 per second!) this can create serious havoc with the GC algorithms.  In this particular case of 10k/sec it actually ends up looking like a native heap leak when using gencon.  Thus if you're doing something like this (and I hope you're not but that is a different posting) then you may have to look at one of the GC opt algorithms instead.  &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5176359152765763539?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5176359152765763539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5176359152765763539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5176359152765763539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5176359152765763539'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/test-out-different-gc-algorithms.html' title='Test out the different GC algorithms'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-7933376691539986275</id><published>2008-08-25T13:42:00.001-07:00</published><updated>2008-08-25T13:42:15.900-07:00</updated><title type='text'>Operational stability</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;One aspect of performance problems occurs with runtime operations and the stability from a runtime perspective separate from application code or content changes.  Some of the things to consider when building out a 24/7 site and the ability to maintain availability even when things take a turn for the worst.  I assume you already have built out multiple &lt;b&gt;cells&lt;/b&gt; for the deployment of your high availability environment.  I prefer cells over clusters because you have more operational/runtime flexibility with cells than you do with clusters particularly when you are trying to apply maintenance (i.e. shut of the load balancing to the cell that is going to be updated).  &lt;br/&gt;&lt;br/&gt;1.  Ability to make repeatable changes to the configuration.  This involves scripting and testing the scripts (preferably &lt;b&gt;not&lt;/b&gt; in production) to be sure they work as intended.  &lt;br/&gt;&lt;br/&gt;2.  Identify what is the active configuration.  This is important to understand which configuration is active such that the correct cells are taken out of rotation.  &lt;br/&gt;&lt;br/&gt;3.  Make the scripts aware of the active configuration.  One really doesn't want to have scripts making changes to the active configuration by mistake.  &lt;br/&gt;&lt;br/&gt;4.  Back out.  Depends on your requirements but being able to flip back to a previously working configuration as quickly as possible minimizing downtime.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-7933376691539986275?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/7933376691539986275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=7933376691539986275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7933376691539986275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/7933376691539986275'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/operational-stability.html' title='Operational stability'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1633498719505311372</id><published>2008-08-20T06:47:00.001-07:00</published><updated>2008-08-20T06:47:51.303-07:00</updated><title type='text'>fn:toLowerCase</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Ran into a stange situation where starting up the app server resulted in an exception.  It appears the error manifests itself thinking there is no function mapped to the name fn:toLowerCase.  This started happening after fixpack 19 was applied over fixpack 11.  Long and short of it is the solution was to clear out the tmp files so the JSPs were recompiled after applying fixpack 19.&lt;br/&gt;&lt;br/&gt;&lt;span id='pmrhtml'&gt;&lt;font&gt;&lt;font face='Verdana' size='2' color='#000000'&gt;&lt;pre&gt;00000042 ServletWrappe E   SRVE0068E: Could  &amp;lt;br /&amp;gt;   not invoke the service() method on servlet /global/tiles/g  &amp;lt;br /&amp;gt;   eturl.jsp. Exception thrown : javax.servlet.ServletException: No  &amp;lt;br /&amp;gt;   function is mapped to the name "fn:toLowerCase"  &amp;lt;br /&amp;gt;           at org.apache.jasper.runtime.PageContextImpl.handlePageException  &amp;lt;br /&amp;gt;   (PageContextImpl.java:650)  &amp;lt;br /&amp;gt;           at com.ibm._jsp._geturl._jspService(_geturl.java:192)  &lt;/pre&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1633498719505311372?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1633498719505311372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1633498719505311372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1633498719505311372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1633498719505311372'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/fntolowercase.html' title='fn:toLowerCase'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5425751151223823454</id><published>2008-08-18T08:37:00.001-07:00</published><updated>2008-08-18T08:37:45.970-07:00</updated><title type='text'>Collect traces when having problems with the JDBC connection pool</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The referenced technote below provides the instructions on how to collect JDBC traces when encountering certain JDBC connection pool problems.  &lt;br/&gt;&lt;br/&gt;0000006b FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/abcd. &lt;br/&gt;&lt;br/&gt;If you see the above error message in your logs we really need to collect JDBC traces.  The traces will tell us why we are seeing this error.  Is it long running transactions? Not a high enough max?  Connections not properly closed? Who knows... the trace knows.  Collect the trace and analyze the problem or open a PMR.  Don't just blindly increase the connection pool maximum without knowing why they are being increased.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www-1.ibm.com/support/docview.wss?uid=swg21217062'&gt;IBM - Using Connection information in WebSphere trace files to troubleshoot J2CA0045E and J2CA0020E or connection wait time-out problems.&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;J2CA0045E and J2CA0020E errors can be caused by many problems. They are showing a time-out condition where a resource or a managed connection is not available to fulfill a connection request.&lt;br/&gt;&lt;br/&gt;In this technote we will use connection information in WebSphere® trace files to troubleshoot J2CA0045E and J2CA0020E or connection wait time-out problems. &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5425751151223823454?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5425751151223823454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5425751151223823454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5425751151223823454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5425751151223823454'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/collect-traces-when-having-problems.html' title='Collect traces when having problems with the JDBC connection pool'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4860022718478926555</id><published>2008-08-16T07:35:00.001-07:00</published><updated>2008-08-16T07:35:36.715-07:00</updated><title type='text'>3 days of not selling burgers</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Wow, a 3 day outage at Netflix.  I know this is a blog about performance (specifically around WebSphere Application Server) but I have a fascination with production outages because I normally work those kinds of problems.  They always revolve around human error either by fumble fingering something or not executing (like not conducting performance testing).  &lt;br/&gt;&lt;br/&gt;But a three day outage is excessive.  That must have been a real interesting problem because I've never seen an outage that long (at least not after I have arrived to fix it).  And it'll cost Netflix an estimated $6 million.  &lt;br/&gt;&lt;br/&gt;As the article states, imagine if McDonald's couldn't see burgers for 3 days.  BTW, the McD's in Dwight, IL off I-55 lost their cash registers one day a couple of weekends ago when I stopped in to get some food on my long drive to Chicago.  It was interesting to see how dependent McD's is on that register system because it drives their whole operations and what the human equivalent (i.e. yelling orders into the back area) and having to use calculators and paper/pen to record how many of each item was sold.  Needless to say the credit card readers were down too so if you didn't have cash you were going hungry that day.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://bits.blogs.nytimes.com/2008/08/15/lessons-from-netflixs-fail-week/index.html?ref=technology'&gt;Lessons From Netflixs Fail Week - Bits - Technology - New York Times Blog&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;Netflix, the DVD-by-mail service, largely ceased shipping DVDs to its 8.4 million subscribers for three days this week. The company vaguely blames a technology glitch.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4860022718478926555?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4860022718478926555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4860022718478926555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4860022718478926555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4860022718478926555'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/3-days-of-not-selling-burgers.html' title='3 days of not selling burgers'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2554437125014720976</id><published>2008-08-13T05:52:00.001-07:00</published><updated>2008-08-13T05:52:15.575-07:00</updated><title type='text'>One reason I like to take thread dumps during performance testing</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I've written before about thread dumps and the value of taking them during a performance test.  The other day we finished our baseline testing so we started a duplicate test simply for taking thread dumps.  Even though I wasn't seeing any anomalies in the baseline this is just something I do to make sure I dot all my i's and cross my t's.  Plus, if there are any anomalies they will show up in the thread dump.&lt;br/&gt;&lt;br/&gt;Lo and behold in the thread dumps (remember we take at least 3 thread dumps spread at least 2 minutes apart) I found a number of threads sitting on &lt;br/&gt;&lt;br/&gt;&lt;em&gt;at java/net/Inet6AddressImpl.lookupAllHostAddr(Native Method)&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;which seemed odd to me.  I live by the rules of mathematics and its definition of randomness.  A random thread dump at any random point in time should result in the threads doing random different things in each thread dump.  If one thread dump in the series shows a couple of threads doing the same thing then that is odd.  If more than one thread dump in the series shows more than one thread doing the same thing then we have a bottleneck!  Bottlenecks can limit an application's ability to use CPU and keep the throughput down.  If you can't fix the bottleneck then you'll need more hardware to scale up which means spending more money.  If you can afford that then stop here and call your finance guy.&lt;br/&gt;&lt;br/&gt;I searched the PMR database and found that indeed there is an interesting side effect to IPv6 and it was affecting the throughput of the application I was testing!  Fortunately the PMR referenced a technote on the subject and I'm hoping we can eliminate this issue.  The good thing that will come out of this is we will see a throughput improvement in the application once we apply the proper configuration.  The improved throughput will mean an immediate cost savings in additional hardware we would have had to purchase to make up for the differential.  A win win for everyone (well, except for the IBM hardware sales folks but c'est la vie!).  &lt;br/&gt;&lt;br/&gt;Although in this particular multi-tiered environment (Process Server talking to WebSphere Application Server talking to CICS) I still have to go back and collect thread dumps on Process Server once I'm satisfied I am not seeing any other issues in the WAS tier.  Who knows what anomalies that will uncover (hopefully none so this testing can wrap up soon).  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www-1.ibm.com/support/docview.wss?uid=swg21170467'&gt;IBM - HostName lookup causes a JVM hang or slow response&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;If the DNS is not setup to handle IPv6 queries properly, the application must wait for the IPv6 query to time out. &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2554437125014720976?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2554437125014720976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2554437125014720976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2554437125014720976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2554437125014720976'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/one-reason-i-like-to-take-thread-dumps.html' title='One reason I like to take thread dumps during performance testing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4198351800725152235</id><published>2008-08-13T05:31:00.001-07:00</published><updated>2008-08-13T05:31:25.590-07:00</updated><title type='text'>Test early - Test often</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;There is nothing I can stress more (and I'm sure I've done it before but I'll do it again) than to start performance testing with the first build of any application.  If one thing that 20-30 years of computer science has taught us, particularly in the past decade of the .com boom, is that performance testing can not be just the last few weeks of an application lifecycle.  &lt;br/&gt;&lt;br/&gt;Performance testing is where the application's warts and ugliness are exposed.  It takes time to troubleshoot and solve each problem as they are encountered.  A lot of the problems will entail code changes that then have to be re-tested functionally.  I've been on some performance engagements that have lasted months due to the sheer number of application code defects that had to be corrected.  &lt;br/&gt;&lt;br/&gt;Managers have to understand that software will always have bugs and definitely will have performance issues.  This is a fact of life.  No single person has the brain power to take Java code (or any other language of choice) compile it and load test it in their head.  So do the right thing.  Take each application build (or weekly release candidate if you do daily builds) and start performance testing from the start.  This way as each week progresses you'll be able to determine if the application is meeting expected performance, non-functional requirements objectives.  You'll also be able to see if the application is improving or degrading each week.  &lt;br/&gt;&lt;br/&gt;Finally, with continuous performance testing there won't be any surprises in the last few weeks leading up to the "go live" date in production. &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4198351800725152235?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4198351800725152235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4198351800725152235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4198351800725152235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4198351800725152235'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/test-early-test-often.html' title='Test early - Test often'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5870846784642173643</id><published>2008-08-11T17:41:00.001-07:00</published><updated>2008-08-11T17:41:49.747-07:00</updated><title type='text'>JVM tuning - too little heap</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I'm working with an application this week that has been given a max heap of 256M.  This is causing GC to occur every 250-400ms which consumes about 35-40ms of time each GC.  In addition, the tenured space is down to 7% free.  Thinks we need a high maximum JVM heap?  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5870846784642173643?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5870846784642173643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5870846784642173643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5870846784642173643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5870846784642173643'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/jvm-tuning-too-little-heap.html' title='JVM tuning - too little heap'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8812391538316766949</id><published>2008-08-07T16:29:00.001-07:00</published><updated>2008-08-07T16:29:30.406-07:00</updated><title type='text'>More outages making the news</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I noticed yesterday that American Airlines went down.  There was discussion about it at www.flyertalk.com and I then found this article about a Google outage.  This just goes to show folks how hard it really is to provide reliable Internet services to the masses.  While one can only speculate how either of these outages occurred it is clear that even the big guys have a hard time doing a hard thing.&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.eweek.com/c/a/Messaging-and-Collaboration/Google-Gmail-Google-Apps-Suffer-Outage-in-The-Cloud/'&gt;Google Gmail, Google Apps Outage in the Cloud&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The search company spends billions of dollars on servers that can support the services its millions of Gmail and Apps users require;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8812391538316766949?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8812391538316766949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8812391538316766949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8812391538316766949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8812391538316766949'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/08/more-outages-making-news.html' title='More outages making the news'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4037112323693969190</id><published>2008-07-31T16:47:00.001-07:00</published><updated>2008-07-31T16:47:10.257-07:00</updated><title type='text'>Messaging engine and its database</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Some optimizations are required on database tables.  My good friend Tom Alcott discusses the lack of necessity to optimize the messaging engine database tables and for good reason.&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/techjournal/0807_webcon/0807_webcon.html'&gt;The WebSphere Contrarian: Are you sure you want to reorg that messaging engine database?&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The standard practice for database administration is to periodically check on the database and table organization to insure optimal performance -- but do these standard practices apply to a database used for JMS persistent message storage with IBM® WebSphere® Application Server?&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4037112323693969190?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4037112323693969190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4037112323693969190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4037112323693969190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4037112323693969190'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/messaging-engine-and-its-database.html' title='Messaging engine and its database'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8549634645387530106</id><published>2008-07-31T06:56:00.001-07:00</published><updated>2008-07-31T06:56:09.431-07:00</updated><title type='text'>New book on DataPower</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;If you are not aware of the performance boost DataPower can provide your environment and the XML threat protections it provides you really need to get up to speed on it.  Some of my colleagues have taken the time to put this book together.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.amazon.com/IBM-WebSphere-DataPower-Appliance-Handbook/dp/0137148194/ref=sr_11_1?ie=UTF8&amp;amp;qid=1217456810&amp;amp;sr=11-1'&gt;Amazon.com: IBM WebSphere DataPower SOA Appliance Handbook: Bill Hines, John Rasmussen, Jaime Ryan, Simon Kapadia, Jim Brennan: Books&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;IBM WebSphere DataPower SOA Appliance Handbook (Hardcover)&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8549634645387530106?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8549634645387530106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8549634645387530106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8549634645387530106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8549634645387530106'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/new-book-on-datapower.html' title='New book on DataPower'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-4938679388068051817</id><published>2008-07-23T18:56:00.000-07:00</published><updated>2008-07-23T18:59:21.762-07:00</updated><title type='text'>"free -m" on the Linux command line</title><content type='html'>One thing you can never do is over commit available RAM in the machine.  If the application server fails to start and SystemOut.log contains a message like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;JVMJ9VM015W Initialization error for library j9gc23(2): Failed to instantiate heap. 1G requested&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Could not create the Java virtual machine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then it is highly likely that you tried to start an app server with not enough free physical RAM.  Check the "free -m" command on Linux.  Otherwise refer to your OS specific manuals to see how to determine how much free RAM you actually have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-4938679388068051817?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/4938679388068051817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=4938679388068051817' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4938679388068051817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/4938679388068051817'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/free-m-on-linux-command-line.html' title='&quot;free -m&quot; on the Linux command line'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5564383351190134294</id><published>2008-07-22T09:52:00.001-07:00</published><updated>2008-07-22T09:52:38.387-07:00</updated><title type='text'>Reliability and Availability</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Common topics in the performance space are reliability and availability.  This article goes on to describe some of the problems that can occur in such an environment.  This is the challenge of building reliable systems from unreliable components.  From a hardware perspective this can be done if one has enough money for all the redundancy that is necessary.  If one tries to do this on the cheap they will fail.  &lt;br/&gt;&lt;br/&gt;There is an interesting point in the article that Google is trying to solve this problem with software.  While there are products like WebSphere XD that provide software level solutions for some problems they can't solve the problem as easily as hardware can.  For example, the database is slow.  Giving the database faster disk, more RAM or a RAM backed SAN and you can eliminate that problem.  There is relatively little you can do from a software perspective to fix that.  Another example is a server goes down.  Sure, we could route data to another server using a software component but then why not just do it from the hardware level?  Okay, so there are a couple of places where software is useful like maintaining J2EE affinity but the same can be done by a hardware load balancer.  It just depends on where you put the smarts.  &lt;br/&gt;&lt;br/&gt;The problem with software to try and fix this is that it introduces another, more complex, layer of hardware/software where as redundant hardware makes things a lot simpler.  &lt;br/&gt;&lt;br/&gt;A few people will argue that software is cheaper.  I don't agree with that argument.  I think hardware is cheaper.  Especially when it makes troubleshooting that much easier (and quicker) than home built software.  If it takes 6-12 months to debug software in production then that is a lot of money (and bad press earned) down the drain.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://news.cnet.com/8301-1001_3-9995937-92.html'&gt;Amazon S3: For now at least, sometimes you have to reboot the cloud | News - Business Tech - CNET News&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;Afterward, Om Malik called cloud computing frail: "The S3 outage points to a bigger (and a larger) issue: the cloud has many points of failure--routers crashing, cable getting accidentally cut, load balancers getting misconfigured, or simply bad code. And he's right, to a degree, but there are three things that shouldn't be overlooked before writing cloud computing off as a failure.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5564383351190134294?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5564383351190134294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5564383351190134294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5564383351190134294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5564383351190134294'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/reliability-and-availability.html' title='Reliability and Availability'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2027347353276974179</id><published>2008-07-18T09:45:00.001-07:00</published><updated>2008-07-18T09:45:12.823-07:00</updated><title type='text'>Negative testing</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The following article is a good example why companies writing software need to hire subject matter experts when it comes to testing their applications.  Particularly in what is commonly referred to in performance speak as "negative testing."  This is where we, subject matter experts on performance testing, purposely cause a negative event to occur.  For example, I routinely disable the Network Interface Card (NIC) [also known as your ethernet card] while running load/stress tests just to see how the application environment handles the event.  If the application breaks then it fails the test and a defect is written up against the application and back to development it goes.  It is easy enough in Unix environments to disable a NIC card but if worse comes to worse I'll pull the ethernet cable out of the jack.  Crude but it works just as well.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.examiner.ie/breaking/index.aspx?c=ireland&amp;amp;jp=mhqlaukfcwid'&gt;Irish Examiner | Airport radar meltdown due to 'faulty' component&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The malfunctioning network card, a component that allows computers to communicate with each other, was also blamed for previous glitches in the Dublin system.&lt;br/&gt;&lt;/blockquote&gt;It is unfortunate that the people that put that airport radar system didn't conduct negative testing because a problem like the one that occurred could have been completely avoided.  &lt;br/&gt;&lt;br/&gt;Likewise, while they are adding more monitoring I'm dubious that will help them.  The fact that they haven't tested for negative events what other negative events they haven't thought of could occur?  For example, some of the others I routinely test for are lost packets in the network, total network failure, network lag, 100%+ CPU, low memory, too many airplanes in the radar, duplicate radar images, etc, etc, etc and the list goes on and on.  &lt;br/&gt;&lt;br/&gt;All they need is for a different negative event to occur and they could (and probably will) suffer another outage.  What they need to do is get a subject matter expert to teach them how to test their code.  &lt;br/&gt;&lt;br/&gt;BTW, notice the sentence about "delays were still being experienced at peak times"?  Seems someone hasn't done stress testing either...&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2027347353276974179?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2027347353276974179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2027347353276974179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2027347353276974179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2027347353276974179'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/negative-testing.html' title='Negative testing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-6877851713395893403</id><published>2008-07-16T10:17:00.001-07:00</published><updated>2008-07-16T10:18:21.446-07:00</updated><title type='text'>IBM Support Assistant</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;There is an update to the IBM Support Assistant.  If you are running WebSphere Application Server and you do &lt;b&gt;not&lt;/b&gt; have this tool then click on the next link and download it.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www-306.ibm.com/software/support/isa/'&gt;IBM Software Support - Overview&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;The IBM Support Assistant is a complimentary software serviceability workbench that helps you resolve questions and issues with IBM software. &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-6877851713395893403?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/6877851713395893403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=6877851713395893403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6877851713395893403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/6877851713395893403'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/there-is-update-to-ibm-support.html' title='IBM Support Assistant'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-9017594552502914104</id><published>2008-07-11T07:47:00.001-07:00</published><updated>2008-07-11T07:52:34.051-07:00</updated><title type='text'>createOrWaitForConnection and why we need a finally block</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;In previous versions of WebSphere Application Server this method actually had a name I liked better which was: createOrWaitForVictimConnection where the victim connection was one that was not closed within the same thread that opened it and eventually reaped by the app server.  But either way, if you see this message timeout in your log file then that means somewhere, somehow someone has not closed a connection to a pooled resource properly.  Get the following 3 words into someone's vocabulary... try, catch, finally.  I can't emphasize enough how important it is to close the connection in the finally block.  If you don't, then any exception that occurs can leave un-closed connections hanging around.  If you are in a high volume environment you'll find this to be a serious bottleneck!  Follow the following psuedo code...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Connection con;&lt;br /&gt;try {&lt;br /&gt;  con = ds.getConnection();&lt;br /&gt;   // do some work&lt;br /&gt;  methodThatUsesConnection(con);&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;  //maybe log an error here if you like?&lt;br /&gt;} finally {&lt;br /&gt;  con.close();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-9017594552502914104?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/9017594552502914104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=9017594552502914104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9017594552502914104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9017594552502914104'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/createorwaitforconnection-and-why-we.html' title='createOrWaitForConnection and why we need a finally block'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5421373974732256260</id><published>2008-07-11T06:56:00.001-07:00</published><updated>2008-07-11T06:56:14.658-07:00</updated><title type='text'>Off topic alphaworks listing</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I try not to go off topic as this is a performance blog but some folks might find the following technology preview useful.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://services.alphaworks.ibm.com/PassItAlong/?open&amp;amp;ca=dna-flht-07102008&amp;amp;S_TACT=106AH62W&amp;amp;S_CMP=NEWS'&gt;alphaWorks Services | IBM Pass It Along | Overview&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;A peer-to-peer knowledge exchange network that builds communities of experts and learners around "nuggets" of knowledge.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5421373974732256260?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5421373974732256260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5421373974732256260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5421373974732256260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5421373974732256260'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/off-topic-alphaworks-listing.html' title='Off topic alphaworks listing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1650343222096049292</id><published>2008-07-02T07:20:00.001-07:00</published><updated>2008-07-02T07:24:24.816-07:00</updated><title type='text'>Do you run WebSphere? Then you need this diagnostic tool!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_V519e05cxcY/SGuPg7a0P6I/AAAAAAAAARA/O8YwcpifrB0/s1600-h/javagc.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_V519e05cxcY/SGuPg7a0P6I/AAAAAAAAARA/O8YwcpifrB0/s320/javagc.jpg" alt="" id="BLOGGER_PHOTO_ID_5218422389107605410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=isa"&gt;IBM: IBM Support Assistant&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have used this tool (and its predecessors) so frequently I don't go anywhere without it/them.  Not only does it produce handy little graphs like the one above showing Java GC but it also provides some darned good analysis on recommended changes to the JVM command line parameters (especially if you're running on WAS v6.0.x or earlier which do not run on Java 1.5) to improve your memory utilization.  Now, of course, you can only get this kind of feedback from the tool if you followed one of my earlier recommendations to turn on verbose GC.  You have turned on verbose GC by now, right?  If you haven't then you have to go and do that right now.&lt;br /&gt;&lt;br /&gt;So, go to the link for the IBM Support Assistant and download this tool.&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="file:///C:/DOCUME%7E1/polozoff/LOCALS%7E1/Temp/moz-screenshot-16.jpg" /&gt;&lt;img src="file:///C:/DOCUME%7E1/polozoff/LOCALS%7E1/Temp/moz-screenshot-18.jpg" alt="" /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1650343222096049292?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1650343222096049292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1650343222096049292' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1650343222096049292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1650343222096049292'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/do-you-run-websphere-then-you-need-this.html' title='Do you run WebSphere? Then you need this diagnostic tool!'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_V519e05cxcY/SGuPg7a0P6I/AAAAAAAAARA/O8YwcpifrB0/s72-c/javagc.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2766278107888079743</id><published>2008-07-02T07:13:00.001-07:00</published><updated>2008-07-02T07:13:16.350-07:00</updated><title type='text'>ITCAM instrumenting your own method capture</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;One of the nice things that application monitoring tools provide is the ability to specifically measure information about your own method calls.  This page describes how to do so with the IBM ITCAM tooling.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://publib.boulder.ibm.com/infocenter/tivihelp/v3r1/index.jsp?topic=/com.ibm.itcamwas_b.doc_6.1/rev/dc_ws_basic79.htm'&gt;Help -&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;A custom request is an application class and method that you designate as an edge or nested request. When the method runs, a start and end request trace record is written to the Level 1 or Level 2 tracing.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2766278107888079743?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2766278107888079743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2766278107888079743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2766278107888079743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2766278107888079743'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/itcam-instrumenting-your-own-method.html' title='ITCAM instrumenting your own method capture'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3253608824056184331</id><published>2008-07-02T07:10:00.001-07:00</published><updated>2008-07-02T07:10:18.994-07:00</updated><title type='text'>WebSphere Process Server Performance</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The first week of June I got to work in person with a colleague of mine, Richard Metzger, from the IBM labs in Böblingen on a process server engagement.  Richard has started his own performance blog for process server!  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://websphere-process-server-performance.blogspot.com/'&gt;WebSphere Process Server Performance&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;Thoughts and opinions around performance of and capacity planning for IBM WebSphere Process Server and other products (like e.g. DB2), as they are used in the context of business process management and business process automation solutions.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3253608824056184331?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3253608824056184331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3253608824056184331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3253608824056184331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3253608824056184331'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/07/websphere-process-server-performance.html' title='WebSphere Process Server Performance'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5373847074945012154</id><published>2008-06-23T07:35:00.001-07:00</published><updated>2008-06-23T07:35:18.101-07:00</updated><title type='text'>kill -3 does not produce a javacore</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This is a sporadic problem I run into when kill -3 does not generate a javacore and the process has to be terminated.  The first thing to check is the service release of the JVM and ensuring the JVM is at the correct level with the corresponding level of WebSphere Application Server.  In some cases I have installed later fixes than those that have been tested with WebSphere Application Server. &lt;br/&gt;&lt;br/&gt;Another suggestion a colleague of mine had was to generate an AIX core of the process (make sure the ulimits for file and core are properly set to unlimited but you already knew that because you followed the installation instructions for WebSphere Application Server).  I don't remember which kill signal needs to be sent but I'm sure a Goggle search will reveal that answer.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5373847074945012154?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5373847074945012154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5373847074945012154' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5373847074945012154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5373847074945012154'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/06/kill-3-does-not-produce-javacore.html' title='kill -3 does not produce a javacore'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1519901445285480009</id><published>2008-06-17T14:50:00.001-07:00</published><updated>2008-06-17T14:50:14.852-07:00</updated><title type='text'>Get thread dumps during supplemental load tests</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I recently found a bug in an application that the developers were not aware of.  The code had a synchronized block they thought would be low cost.  Low and behold in our load testing we found that after a certain number of users were active their response times started to go up exponentially.  I took some thread dumps and found the synchronized block of code.  &lt;br/&gt;&lt;br/&gt;For anyone interested in performance:&lt;br/&gt;&lt;br/&gt;1.  Load test&lt;br/&gt;2.  Get thread dumps during bad response times.  &lt;br/&gt;&lt;br/&gt;If neither is done there will be problems in production.  If you do not know how to analyze javacores open a PMR with IBM and IBM Support can help identify the problem.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1519901445285480009?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1519901445285480009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1519901445285480009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1519901445285480009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1519901445285480009'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/06/get-thread-dumps-during-supplemental.html' title='Get thread dumps during supplemental load tests'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3680946692039435355</id><published>2008-06-11T02:19:00.001-07:00</published><updated>2008-06-11T02:19:31.426-07:00</updated><title type='text'>WebSphere Process Server - database configuration</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;It is crucial that a WPS gold topology have the databases properly configured.  If they are not (i.e. all pointing to the same database instance) there will be contention issues that will &lt;b&gt;not&lt;/b&gt; resolve themselves.  One of my esteemed colleagues wrote this great article.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/library/techarticles/0803_chilanti/0803_chilanti.html'&gt;Building clustered topologies in WebSphere Process Server V6.1&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;This leads you to the database settings screen, arguably the most complex of all the steps. &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3680946692039435355?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3680946692039435355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3680946692039435355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3680946692039435355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3680946692039435355'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/06/websphere-process-server-database.html' title='WebSphere Process Server - database configuration'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2981488894131573329</id><published>2008-06-04T12:15:00.001-07:00</published><updated>2008-06-04T12:15:45.507-07:00</updated><title type='text'>Why cross cell data centers are not a best practice for disaster recovery</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This topic has been coming up time and time again.  It is time that people read about the trade offs when trying to conduct DR with a single cell across multiple data centers.  Yes, this might work.  But more often than not the various interconnects between the two data centers and the interaction can lead to very negative consequences that disables the intended DR effort.  &lt;br/&gt;&lt;br/&gt;Do the right thing.  Isolate the two data centers with separate cells.  You'll find this works not only much better but has a very high success rate if done correctly (i.e. you use scripting to build your environments therefore having repeatable processes across DCs).  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/techjournal/0606_col_alcott/0606_col_alcott.html'&gt;Comment lines: Tom Alcott: Everything you always wanted to know about WebSphere Application Server but were afraid to ask -- Part 3&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;While the notion of a single cell across data centers is bad from a risk aversion perspective, running a cluster across two data centers not only requires you to forget about minimizing risk, as noted above (since a cluster cannot span cells), but further increases risk along multiple dimensions.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2981488894131573329?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2981488894131573329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2981488894131573329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2981488894131573329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2981488894131573329'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/06/why-cross-cell-data-centers-are-not.html' title='Why cross cell data centers are not a best practice for disaster recovery'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2561043946067487027</id><published>2008-05-27T11:39:00.001-07:00</published><updated>2008-05-27T11:39:13.386-07:00</updated><title type='text'>Selling Application Monitoring</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Take the word "security" and replace it with "application monitoring" in this article and you have my problem.  Application Monitoring is really important.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.schneier.com/blog/archives/2008/05/how_to_sell_sec.html'&gt;Schneier on Security: How to Sell Security&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;How to Sell Security&lt;br/&gt;&lt;br/&gt;It's a truism in sales that it's easier to sell someone something he wants than something he wants to avoid. People are reluctant to buy insurance, or home security devices, or computer security anything. It's not they don't ever buy these things, but it's an uphill struggle.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2561043946067487027?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2561043946067487027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2561043946067487027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2561043946067487027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2561043946067487027'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/05/selling-application-monitoring.html' title='Selling Application Monitoring'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-5548322397412333059</id><published>2008-05-22T07:28:00.001-07:00</published><updated>2008-05-22T07:28:52.611-07:00</updated><title type='text'>Recent performance related articles</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Every once in a while I take pen to paper (well, more correctly fingers to keyboard) and key out another article.  Here are a couple I've written this year.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/techjournal/0805_col_polozoff/0805_col_polozoff.html'&gt;Comment lines: Alexandre Polozoff: Cultivating a performance specialist&lt;/a&gt;&lt;br/&gt;&lt;a href='http://www.ibm.com/developerworks/websphere/techjournal/0802_col_polozoff/0802_col_polozoff.html'&gt;Comment lines: Alexandre Polozoff: How well does traditional performance testing apply to SOA solutions?&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-5548322397412333059?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/5548322397412333059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=5548322397412333059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5548322397412333059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/5548322397412333059'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/05/recent-performance-related-articles.html' title='Recent performance related articles'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2229497708193395602</id><published>2008-05-22T06:18:00.001-07:00</published><updated>2008-05-22T06:18:21.709-07:00</updated><title type='text'>Disaster Recovery &amp; AIX GLVM</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://www-03.ibm.com/systems/p/os/aix/whitepapers/aix_glvm.html'&gt;IBM eServer - Using the Geographic LVM in AIX 5L&lt;/a&gt; &lt;br/&gt; &lt;blockquote&gt;"GLVM can help protect your business from a disaster by mirroring your mission-critical data to a remote disaster recovery site. If a disaster, such as a fire or flood, were to destroy the data at your production site, you would already have an up-to-date copy of the data at your disaster recovery site."&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;Absolutely critical technology if you are at all interested in DR (Disaster Recovery).  I know at least two customers who have used this with synchronous updates (i.e. the local disk update is synchronized with the remote disk update) and seeing little overhead even over a distance of about 150 miles between data centers.  This is an ideal technology for people looking to setup DR for their WebSphere Application Server, Portal, Process Server, MQ, DB2 and the list goes on and on.  I'm absolutely excited about this technology and the potential impact this can have for our high availability site customers.  &lt;br/&gt;&lt;br/&gt;If you haven't read up on GLVM I highly recommend taking the time.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2229497708193395602?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2229497708193395602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2229497708193395602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2229497708193395602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2229497708193395602'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/05/disaster-recovery-aix-glvm.html' title='Disaster Recovery &amp;amp; AIX GLVM'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-9126159620238817361</id><published>2008-05-22T06:07:00.001-07:00</published><updated>2008-05-22T06:07:29.880-07:00</updated><title type='text'>JVM memory and high CPU</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;In the "Butterfly Effect" a butterfly flapping it's wings on one side of the world can create a typhoon on the other.  &lt;br/&gt;&lt;br/&gt;In the world of Java: memory usage can cause high CPU.  Summer of 2007 I spent 3 weeks working with a customer in the UK and we spent a few days measuring the memory usage of the application.  We worked with the developers at reducing the memory footprint.  In many cases these were simple code changes not requiring architectural or design changes to the app.  &lt;br/&gt;&lt;br/&gt;Reducing an application's memory footprint reduces the amount of garbage collection the JVM needs to execute.  GC will use up CPU so obviously executing fewer GC cycles reduces the CPU load.  &lt;br/&gt;&lt;br/&gt;The UK application went from about 80+% CPU down to 25-30% for the exact same load test and better response times.  &lt;br/&gt;&lt;br/&gt;Verbose GC is your friend here too.  Another application I'm looking at right now is suffering from high CPU and we can see in verbose GC that during these high CPU events the JVM is actively GCing because it is running low on memory.  Obviously the memory settings need to be changed here but I wonder if we spent some time profiling the app and reducing its footprint if we wouldn't have to?  I guess it depends if they will take the time to work on this effort.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-9126159620238817361?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/9126159620238817361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=9126159620238817361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9126159620238817361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/9126159620238817361'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/05/jvm-memory-and-high-cpu.html' title='JVM memory and high CPU'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1240251513671592961</id><published>2008-05-21T07:59:00.000-07:00</published><updated>2008-05-21T08:04:03.812-07:00</updated><title type='text'>JDBC driver versions</title><content type='html'>In helping one of my colleagues this week I've come across another common problem that should be audited by everyone running a J2EE app server; JDBC driver version.&lt;br /&gt;&lt;br /&gt;Typical scenarios:&lt;br /&gt;1.  If you're application has been working and all of the sudden starts to have strange SQL errors it never had before&lt;br /&gt;2.  Your application works with intermittent SQL errors (unrelated to SQL statement bugs).&lt;br /&gt;3.  See a lot of StaleConnectionExceptions&lt;br /&gt;&lt;br /&gt;Check the version of the database server and then the version of the JDBC driver (in WebSphere Application Server the JDBC driver version is printed in SystemOut.log during the app server startup sequence).  Typically the DBA just updates the server without telling anyone.  This means that a bunch of clients are backlevel on the JDBC driver.  I don't know what it is that some database vendors do in their fixpacks but they often seem to break the protocol used by the previous client drivers.  So... audit your JDBC drivers periodically and if you can get your DBA to notify you of when updates are going on to the database servers you could even save yourself some grief in production.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1240251513671592961?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1240251513671592961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1240251513671592961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1240251513671592961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1240251513671592961'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2008/05/jdbc-driver-versions.html' title='JDBC driver versions'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-3691768259370309529</id><published>2007-11-21T11:25:00.001-08:00</published><updated>2007-11-21T11:33:04.084-08:00</updated><title type='text'>Some common mistakes</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Sending the right files&lt;/span&gt;&lt;br /&gt;I spent a frustrating day yesterday reading log files from a server that I was told had stopped running (i.e. the process was gone).  I spent a long time reading the logs looking for an indication of a problem and couldn't find one.  On examining the IP addresses in the logs it was clear they had sent me the logs from the wrong server.  Sysadmins, make sure you send the right log files.  Once I had the right log files I had the answer within the hour and a fix to go forward with.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Verbose GC&lt;/span&gt;&lt;br /&gt;Too many people run with verbose GC turned off.  Unfortunately the word verbose is over loaded and in this case verbose does not mean verbose in the Unix sense.  Verbose GC is actually &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; that verbose and has a heck of a lot of great information in there.  Run with the ST_VERIFY option if you are on pre-Java5 JVMs (i.e. earlier than WAS v6.1)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Stay current with maintenance&lt;/span&gt;&lt;br /&gt;Time and time again I go in to debug a problem and what do I find?  The problem is "known" and a fix has been available for some time.  Just because things are working today doesn't mean that they won't break in the future.  Yeah, I also understand the "if it ain't broke don't fix it" mentality and application servers are one place I don't like to play that card.  Run the maintenance through all your test environments (including your performance test environment... you do have one, right?) and things should be okay in production.  But don't expect to run on a 5 year old JVM and not run into problems one day...&lt;br /&gt;&lt;br /&gt;I'm sure I'll think of more of my pet peeves so I'll add them later.  In the meantime, if you're bored and need something to read see&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/0711_polozoff/0711_polozoff.html"&gt;&lt;/a&gt; &lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/0711_polozoff/0711_polozoff.html"&gt;my paper on large topologies.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-3691768259370309529?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/3691768259370309529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=3691768259370309529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3691768259370309529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/3691768259370309529'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2007/11/some-common-mistakes.html' title='Some common mistakes'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-2125073752313907407</id><published>2007-11-19T07:50:00.001-08:00</published><updated>2007-11-19T07:51:03.700-08:00</updated><title type='text'>HTTP tuning</title><content type='html'>I often have to modify the performance of the HTTP side of the conversation and here is a link to a decent basics:&lt;br /&gt;&lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;Best Practices for Speeding Up Your Web Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also like the fact they used IBM's Page Detailer &lt;a href="http://alphaworks.ibm.com/tech/pagedetailer" rel="nofollow"&gt;http://alphaworks.ibm.com/tech/pagedetailer&lt;/a&gt; which is an awesome application my colleague performance whiz Phil Theiller showed me.  It is really awesome for getting a good visual feel for the HTTP side of things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-2125073752313907407?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/2125073752313907407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=2125073752313907407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2125073752313907407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/2125073752313907407'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2007/11/http-tuning.html' title='HTTP tuning'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-1738549112098626693</id><published>2007-02-09T06:34:00.000-08:00</published><updated>2007-02-09T06:44:13.414-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ITCAM ITCAMfWAS performance testing links'/><title type='text'>Lack of Performance Testing (load and stress)</title><content type='html'>One thing I can not stress thoroughly enough is the necessity to conduct performance testing.  I've already written an article on this subject &lt;a href="http://www-128.ibm.com/developerworks/websphere/techjournal/0211_polozoff/polozoff.html"&gt;(click here)&lt;/a&gt; and there is no reason not to do it.  In fact, the #1 reason most critsits happen is either the complete lack of performance testing or very poorly executed testing.  This is what I refer to as self-inflicted pain because, from my point of view, if you make the decision not to thoroughly test then you have accepted the reality that you will have a production outage and it will be difficult to resolve.  &lt;br /&gt;&lt;br /&gt;In addition, you should be monitoring your application using an appropriate tool like &lt;a href="www.redbooks.ibm.com/redbooks/pdfs/sg247252.pdf "&gt;IBM Tivoli's ITCAMfWAS&lt;/a&gt; (IT Composite Application Manager for WebSphere Application Server).  v6.1 was just released and I got a chance to play with it at a critsit over the past couple of weeks and it is a good improvement over v6.0 addressing some of the usability issues I had.  It is tools like this that help me resolve a critsit in a matter of hours instead of days or weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-1738549112098626693?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/1738549112098626693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=1738549112098626693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1738549112098626693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/1738549112098626693'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2007/02/lack-of-performance-testing-load-and.html' title='Lack of Performance Testing (load and stress)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1167046991516597285.post-8658492180137595401</id><published>2007-02-09T06:24:00.000-08:00</published><updated>2007-02-09T06:24:00.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JDBC connection pool setting SHAREABLE'/><title type='text'>Day One SHAREABLE JDBC connection setting</title><content type='html'>I do not know why I didn't start a blog on this topic earlier!  This is what I do day in and day out so having an outlet where I can describe and discuss various scenarios is going to be helpful to me.&lt;br /&gt;&lt;br /&gt;So, for our first topic we are going to talk about a common malfeasance in production performance that typically negatively affects any application that runs in the WebSphere Application Server environment.  Okay, maybe not all that common but I've seen it three times now and obviously someone needs to start paying attention.  &lt;br /&gt;&lt;br /&gt;Inside the application EAR file there are deployment descriptors for the JDBC connection pool that refer to SHAREABLE and UNSHAREABLE connections.  While there is plenty of documentation on this particular deployment descriptor there seems to be little understanding of how this particular setting works.  BTW the default setting is SHAREABLE which is where most problems seem to stem from.  &lt;br /&gt;&lt;br /&gt;Now, what I'm writing here is not gospel so you will need to understand your application and how it uses JDBC connections particularly if there are transactional UOW involved.  However, for the other 90% of you that are doing simple SQL queries and a few inserts here and there you will want to pay close attention... change the descriptor to UNSHAREABLE and run your performance test suite (you do have a performance load test, right?) and notice the change in behaviour of the JDBC connection pools.  If you did this right you should see fewer connections being used.  &lt;br /&gt;&lt;br /&gt;This is because the default setting of SHAREABLE does &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; return the connection to the pool when you call close().  In fact, that connection is held with the thread until the thread finishes processing the request.  This is an optimization that some people may need but the majority do not.  &lt;br /&gt;&lt;br /&gt;So the next question people always ask me is "why is this the default setting?" Well, heck, someone had to decide on what to use as a default and they picked one.  But just because something is a default setting does not necessarily mean it is the right setting for your application.  I think the JVM defaults to 128M for a maximum and you can pretty sure that probably is not the right maximum for 99% of the J2EE-based applications out there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1167046991516597285-8658492180137595401?l=websphere-performance.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://websphere-performance.blogspot.com/feeds/8658492180137595401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1167046991516597285&amp;postID=8658492180137595401' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8658492180137595401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1167046991516597285/posts/default/8658492180137595401'/><link rel='alternate' type='text/html' href='http://websphere-performance.blogspot.com/2007/02/day-one-shareable-jdbc-connection.html' title='Day One SHAREABLE JDBC connection setting'/><author><name>Alex</name><uri>http://www.blogger.com/profile/16310744996196312026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
