I'm developing a system in java that should be running 24/7 on a linux box. It is a soap consuming application and should be making about 15 calls per second. I'm aware of the premature optimization thing, but as this application is handling some considerable amounts of money I'm looking to know if there is something in Ubuntu to set up for maximum robusteness, or maybe choosing other distro or read about something, because I'm not experienced in this kind of application.
Distro is unlikely to make much difference in this regard. Generally speaking, 15 socket connections per second is peanuts on modern hardware. It is very likely that your code is going to be the problem, not the underlying OS. In particular, you may come to regret the overhead associated with SOAP calls. I have observed SOAP operations spending 80% or more of the CPU usage for XML-related overhead.
Some development-related answers:
- What may (unfortunately) matter is which JVM you are using. In particular, there are large behavioural differences between the various 1.6 SUN JVM versions as regards to memory allocation.
- One of the main problems with high performance Java is that the parameters you want to tweak are often hidden by abstractions. Be prepared to create local forks of third-party software. Stick to open source software or commercial suppliers where you have good support directly from the developers.
- All these things means that you will need to construct benchmark unit/integration tests. Write a client to your server that does 15 parallel calls and see how long it takes to get a response. Write unit tests that fail if the total execution time of 1000 calls thru critical code paths take more than an established number of milliseconds.
If "some considerable amounts of money" translates to expensive downtime, I think that you probably want to focus on uptime rather than performance. Can your application be redundant and/or clustered? How quickly can you restore from backup?