I have a linode 64 and a 128, JBoss 3.2.3, tomcat5 configuration. I haven't been able to get JBoss working well on a linode 64. I use the /jmx-console built-in web app as a crude benchmark. I'm expecting jmx-console to be much slower than a page in typical web app I would deploy. I use a command like this to test:
time wget
http://localhost:8080/jmx-console
On the 64 the best performance I got was about a minute to compile and 2-3 seconds to retrieve the page after that. On the Linode 128 i was getting about 28 seconds to compile and like 0.2 sec to access it after that, using the default config without tuning. The 128 performance seems good to me so I intend to use JBoss there. I've got JBoss and the Eclipse IDE on my laptop and they seem to work decently together. The cool thing about JBoss is you can run it on almost any platform for testing purposes and deploy the web apps to a production server.
About tuning.. I find the JVM -X settings are very key in low-memory situations. What I did is I ran the JVM with the -Xloggc: option to log the garbage collector activity. It turns out, in the default config on the 64 it was frequently spending like a minute doing garbage collection, and also it was using like 80 megs of memory which caused lots of swapping to occur. It seems that JBoss only really uses like 12 megs of heap in the default configuration, but it produces lots of garbage that fills up fast. So I adjusted the JVM settings for a max heap size of 24 megs (-Xmx24m) and told it to use the incremental garbage collector (supposed to reduce long garbage collection delays) and that helped a lot, according to the logs. There is a tradeoff with the heap that can be tricky. Lower heap sizes require more "urgent" (CPU-intensive) garbage collection but they use less disk swap on the host, while larger heap sizes cause less urgent garbage collection but use more disk swap which is slow and uses precious IO. On a Linode, I think lower heap is the way to go since IO seems to me much more scarce than CPU. There are probably some JBoss components I could disable to improve the speed, but I think I want most of em enabled. Oh and another thing to rememember is that certain JBoss components require tuning, I think one of the cache components triggers at specific memory usage levels, so those need to be tuned in conjunction with the heap size tuning.
Another important factor on Linode is the new I/O fairness bucket thing talked about on another post. JBoss and Java are real resource hogs, especially in a low RAM situation, and with the new IO bucket thing on the 2.4 kernels it seems that JBoss runs much slower. It mostly affects the startup time. I found that it took like 8 minutes for JBoss to start after the bucket thing and like 1 minute before. It didn't affect the response time at all though for my one-page test, which is a good sign, but it might affect the response time for higher, sustained loads. I'll have to do more testing for that. For me, the response times are key, not the compile times or startup times. I can test on my laptop (which is kinda like a baby dedicated server) and deploy to JBoss on Linode, without restarting it, but once my web apps are up I want my site visitors to get the pages back quickly.
Well, that's my two cents, if anybody has other experiences with JBoss/Linode I'd like to hear em.