I'm currently setting up a Linux-based server to run some potentially heavy server-side Java (servlets, EJBs, JDBC, whatever) and am now in the postion of choosing one or more VMs. The box has a PIII 733 processor and 256MB RAM, but will probably be running several VM instances for different clients. The OS (Red Hat 7) came with the Kaffe VM, which works but seems sluggish, I have downloaded but not yet installed Sun JDK 1.3 for Linux. Does anyone have any suggestions for which VM(s) to use, or any performance tips for getting the most out of such a set up?
Frank , the box you have mentioned PIII 733 with 256 MB RAM is preety good one. You have mentioned that Kaffe vm coming with red hat linux is sluggish. I haven't found so. It works fine. you have mentioned that you are going to use heavy server side applications ( EJB , SERVLETS , JDBC whatever ). For servlets & jdbc , jsps , you will not have any problem with the configuration that you have mentioned. As , you kanow you require application servers for EJB's to deploy them , which server you are going to use ? BEA weblogic , IBM's websphere , Sun's iPlanet or Sliverstream. Please whether there are any application servers for linux. the main thing you will require in ejb's is your response time. To be on the safer side , as you have said that you are going to multiple instances of the vm's, you can go for the 512 mb ram. the main problem you will have, are that related to memory only. I hope this will be useful.
Thanks. I certainly hope the specification of the machines is good enough - they cost me plenty of money! What I'm trying to do, though, is to squeeze every drop of performance out of the machines, to give them the longest life and the largest number of customers per machine. That's why I'm intersted in comparing the detailed performace of the various JVMs. If (say) Sun's Linux 1.3 JVM uses 10% less memory per thread and runs 5% quicker, then that's the one I would like to use. I've already trimmed the Linux kernel right down and switched off lots of daemons I have no use for, so setting up a lean and mean JVM is just one aspect of the process. As for which servers to use, I plan on offering several, and allowing customers to select whichever they prefer. I will certainly have Apache/JServ, Resin and Tomcat web/servlet/JSP servers available, as well as some of the open source EJB containers (JBoss etc.) Whether I pay big money for the likes of WebLogic, depends on the pricing model I go for.
As far as lean JVMs go, there are JVM options which allow you to tune the heap size (-ms, -mx, -Xms, -Xmx) as well as a non-standard one for setting the thread stack size (-ss or -Xss). And if you want to squeeze every last driblet from each JVM process, then there are some JVMs which can run multiple pseudo-JVMs within one process. I only know of two at the moment, Oracle and GemStone, and obviously these go with their application servers. The pseudo-JVMs work exactly like normal JVMs, but multiple pseudo-JVMs share the same OS process. This allows some VM level things to be shared between JVMs, thus reducing their average resource impact. BTW, if anyone knows of other JVMs that can be shared in this way, I'd be really interested.
As Jack said that oracle & gemstone are having pseudo jvms , but they come at hefty cost . going for jboss is quite a nice idea. what about enhydra ? it is also good option for ejbs. Increasing RAM may save the day. what you feel , Jack ?
In terms of cost-effectiveness, the following order of performance aspects are the best to address: 1. Design & architecture of the apps 2. JVM and Java compiler. Note that these two do not have to be the same. 3. Hardware: CPU, RAM, Disks, Network speed. 4. Java code. RAM is certainly in there, and I have to admit that I've never been asked to tune a server with less than 2 GB of RAM, but then they've all been Solaris/HPUX/AIX boxes. I've never tuned a Linux server. From this early startup stage, I find it really difficult to suggest things. Normally you have applications and server products. Each has their foibles, and every product Shailesh listed has a performance tuning section in their products and probably on their website. I link to a couple on the tips page at my site: search for "web serv" on that page.
As Jack has said that it is very difficult to give suggestion at this point of time. it is absolutely true. Websphere generally assks for 128 mb ram & weblogic asks for 256 mb ram. This is for windows. I don't know about linux performance. All of them have performance tuning section. You will have to check for that.
Thanks Jack. In my case I'm still designing and writing the applications and evaluating server/container software. I had to commit on the hardware spec to get something to write and test the software on, so I'm left with considering the JVM. I've just finished setting up two identical Linux bozes so I can now do direct "one-thing-different" tests. When I get some results I'll post anything useful or interesting back here.