I’ve been trying to catch up on House MD episodes in the past 3 weeks. I’m hooked with the series because of Hugh Laurie‘s acting, the writing, and the story telling. I’m especially amused with the radical diagnoses and treatments of the patients. I know the cures for the exotic diseases are somewhat made up and exaggerated, but getting Dr. House to come up with them is half the fun.
Also in the past 3 weeks, I was struggling at work to figure out a problem with a Java application. The application sits on an Open Source Java container with a proxy web server connected to it. Drawing parallels to the show, the system exhibited a chronic heart attack that I couldn’t cure. The system would freeze up when we load tested it with 100 concurrent users. The developers didn’t see it was a code issue and suspected Oracle’s JDBC driver. It couldn’t be the driver because direct connection to the container was successful, all the time. All the symptoms seemed to indicate there may be a problem with the proxy web server. The system would only hang when it was connected via AJP protocol. I tried to keep the heart beat going by putting in timeout values, keep-alives, and header/thread size tweaks. I even tried changing the module, without any luck. I was stumped. Searched Google for clues and they didn’t help. I was running out of ideas. I basically said the disease was “lupus” because it looked bad on the outside – the client facing layer. I was ready to abandon this web server proxy altogether and do a skin transplant using a Cisco hardware load balancer. Everyone in the team thought about doing major surgery: replacing the Java container! We were ready to make hard decisions to keep the project alive. I could use a vicodin at this point.
However, earlier this week, I decided to download the enterprise (commercial) version of the Java container and combed through the documentation. I saw something that was a revelation. My eyes lighted up, jaw opened, and stared at the page:
In the production/run.conf file, the -Xmx and -Xms parameters specify the maximum and minimum heap sizes respectively. It is recommended that you set the -Xmx and -Xms to the same value to avoid dynamic re-sizing of the heap, which is a source of instability in many JVMs.
So, it was NOT LUPUS!
The min/max settings in the open source version of the Java container were set with different values. As recommended, I changed them to be the same and ran the load tests again. Sure enough, the system stabilized! This patient no longer have a chronic heart attack and can now go about doing its business. We were excited, glad and relieved. I picked up my cane, waddled over to my next project, and moved on to cure the next patient.
As for the show, recently I just watched the first two episodes of Season 4. I have 12 more episodes to watch in my DVR. I’m looking forward to more House antics and crazy diagnosis. Solving a problem is fun, especially when the patient is still alive!
Tags: applications, tv
I like House as well! Cool little drawing of him by the way.
I’m bad with series though… way too much commercials and I can never remember to watch TV at a specific time.
Zhu’s last blog post..Dona Nobis Pacem
Hi Zhu,
I put all of the episodes on DVR that way I can skip the commercials. The only show that I kind of don’t mind the commercial is 24. It’s suppose to happen in real time. Make it somewhat realistic.
Bet you would have figured your software problem out faster if you weren’t watching so much TV.
Take a couple of Aspirins then call me in the morning.
Periapex’s last blog post..Can Someone Read These For Me?
BTW, your blog looks bare now without the Entrecard widget 🙂
Periapex’s last blog post..Can Someone Read These For Me?
Hey Peri,
EntreCard widget is a big O’ distraction. I don’t know what else to put on that space to replace it. Maybe a dancing hamster widget.
As for my TV distraction, I actually considered it an inspiration. I would’ve given up on problem solving if Gregory House couldn’t solve his cases.
(not really)