Solved

One Large JVM vs. Multiple Smaller JVMs

Posted on 2006-07-22
14
516 Views
Last Modified: 2008-02-01
Based on the latest JVM technology (J2SE 5 or higher), hardware and Application Server implementations (e.g. WebLogic 9.x or WebSphere 6.x), which of the following two configurations is better on a multiple-CPU UNIX machine:
1. One large JVM with 2-4 GB heap size and 200+ threads for a single Application Server instance.
2. Two or more smaller JVMs, each with < 1 GB heap size and < 100 threads for an Application Server cluster of multiple application server instances

What are the major pros and cons of each solution?

0
Comment
Question by:nbkd72e
  • 5
  • 4
  • 2
  • +1
14 Comments
 
LVL 26

Expert Comment

by:ksivananth
Comment Utility
when you increase the heap, the max no. of threads get decreased!

I have read some ehere that 1GB is good trade off!

More instances can share the load and the possibility of crash is less and possible to have failover mech.

0
 
LVL 23

Expert Comment

by:Ajay-Singh
Comment Utility
> when you increase the heap, the max no. of threads get decreased!
can you pls explain little more? i thought the max no of *active* theads depends on no of CPUs of the box.
0
 
LVL 26

Expert Comment

by:ksivananth
Comment Utility
>>can you pls explain little more?

for e.g.,

heap         #of threads allowed

-Xmx128m    7500
-Xmx1024m  2500
0
 
LVL 26

Expert Comment

by:ksivananth
Comment Utility
>>i thought the max no of *active* theads depends on no of CPUs of the box.

though I have not tested this, I don't think so!
0
 
LVL 23

Expert Comment

by:Ajay-Singh
Comment Utility
GC works better on larger heap JVMs than smaller ones. The GC tuning option "-XX:+UseParallelGC" highly depends on the no of CPU available on the box. It would run efficiently if only one JVM is running.

Have a look to various GC options:
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
0
 
LVL 30

Accepted Solution

by:
mayankeagle earned 84 total points
Comment Utility
I prefer an application server cluster so that if one process fails by any chance, the system is still reliable.
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:nbkd72e
Comment Utility
I really want to hear from people who has done load test and application server performance tuning against those two scenarios, especially the experiences of tuning a high-profile production system.
0
 

Author Comment

by:nbkd72e
Comment Utility
I was told by some application server vendor consultants a few years back that the second approach would perform better. But I am not sure if that principal is still valid based on the latest JVM, hardware and App Server technologies.

I think it worth to specify my concerns of the single large JVM approach (the first one):

    1) GC - How efficiently the JVM can handle 2-4 GB heap size without causing performance penalties. Do you think having multiple JVMs each handles GC more a smaller heap will be more efficient?

    2) Managing threads - 1000 threads per Java process vs. 200-300 threads per Java process (with 4 Java processes on the same machine), would the second case managing Java threads more efficiently, including thread scheduling, handling Java synchronization (or managing the locks/mutexes/monitors) ?

    3) As somebody already mentioned, the availability and reliability. Having to deal with something extremely large always challenges the underneath technology or implementation, and potentially need more time to get mature.
0
 
LVL 23

Assisted Solution

by:Ajay-Singh
Ajay-Singh earned 83 total points
Comment Utility
1) GC runs better on larger heaps. So, multiple JVMs with smaller heap would degrade the performance.
2) The number 1000 is pretty huge if you talk about no of threads you should configure your application with. You really need much more cpu to handle it. At a given moment the number of active threads active (on the cpu) would be no of CPUs. Because of IO wait and other waits on the application you can spawn more threads than no of cpus on the box, but the thread no 1000 is really big.
3) If you want to run multiple instances of same JVM on the single box for more availability - its really bad design. If the box goes down for some catastrophic failure, everything would blackout.
0
 
LVL 26

Assisted Solution

by:ksivananth
ksivananth earned 83 total points
Comment Utility
>>If you want to run multiple instances of same JVM on the single box for more availability - its really bad design. If the box goes down for some catastrophic failure, everything would blackout.

Not exactly, there is no rule that you have to run in single system, we don't expect the cluster running in single system.

>>GC runs better on larger heaps. So, multiple JVMs with smaller heap would degrade the performance.

We design the application not for GC, its for app performance! Of course, heap spec is at runtime. It is not controled by either of the design. I feel, it is to decide if multi node or single node!

The reason for multinode is load balancing and failover.

With single node approach, the two is not possible. Even if you vconfigure single node with high config 2GB... what will you do if the app recieves more load than this config?

and the other factor is that the effort you can invest. Of course, single node approach needs lesser effort than multi.
0
 
LVL 23

Expert Comment

by:Ajay-Singh
Comment Utility
ksivananth,

I agree we don't design system for GC, but we definitely design system for better performance, and then tune with GC for low pause timings.
0
 
LVL 23

Expert Comment

by:Ajay-Singh
Comment Utility
> With single node approach, the two is not possible.
1 or 2 - its single point of failure.

> Even if you vconfigure single node with high config 2GB... what will you do if the app recieves more load than this config?
You really need very very powerful box or your server is doing nothing (kind of ping server)
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now