This post originated from an RSS feed registered with Java Buzz
by Thomas Gideon.
Original Post: Weblogic Performance Tuning
Feed Title: Command Line Interface
Feed URL: http://www.gideonfamily.org/roller/rss/cmdln?catname=Java
Feed Description: The blog of a programmer-hacktivist-curmudgeon who occasional rants about society, work, and technology, among other things. Now how do I get to a command prompt on this thing?
My current task is to identify the cause of a moderate performance problem in our application. The QA folks have crafted a relatively straightforward use case that I suppose it pretty representative of typical usage of the application. The problem is that when they run the scenario through their load test tool, the application bogs down to the point that it starts erroring out. I have duplicated this problem with a very carefully crafted HttpUnit suite and even narrowed the cause down to only particular business objects used in the affected screens.
Over the last few days, I have been instrumenting the code more and more closely trying to pinpoint the ultimate source of the problem but I haven't really been able to come up with anything conclusive. The more complex pieces of code perform just fine, typically only being executed once per page hit. The less complicated code averages response times in the realm of double digits in milliseconds. However, the perceived response time, from the browser, falls outside of our performance target even with a heavily throttled version of the test case. I can only infer that the problem is caused by some aggregation of operations that cause the container to start thrashing when the volume exceeds a certain threshold.
The only real candidate for causing the container heartburn, based on the data I've collected are the entity calls. The throttled test case generates something like a total of 14,400 entity calls in just over an hour, from 40 distinct clients. I've checked the runq during the test run, as well as cpu utilization and while they both exhibit an understandable uptick, neither are even approaching full saturation. The runq averages about 1.5 and the cup utilization about 50%.
Does anyone know of any configuration settings that might apply under Weblogic 6.1, SP5? Container tuning is really outside of my comfort zone, but I've done everything I can to try to optimize the suspect code. I shaved about a half second off every page hit, but when I try to scale the test case back up, I still run into errors. Are we just trying to cram too many entity calls down the containers throat? The current thinking is that we pick the slowest performing entity call and replace it with a sql statement, but I'm loathe to start making that kind of change until I've exhausted all other options.