Our development environment consist of JBoss 5.0.1 DB Server, SQL Server 2008, Oracle IDM. Hardware is Win 2008 32 bit, 4GB RAM. We have reached stage where our environment can not handle application resulting in JBoss shut down throwing out of memory errors and CPU reaching to 90% usage. I am looking methodology to calculate correct server sizing where I input TPS, max number of concurrent users, max CPU utilization etc.. to give me number of servers, RAM size, number of cores. I am expecting application to grow 10% annually. Load Balancer and Failover should also be taken in account while sizing.
1 Answers
This is really pretty basic.
You know what your current server can handle before it falls over (and you presumably have profiled the system to determine what the limiting factor is - RAM, CPU, etc...).
Take either 2/3 or 3/4 of the limiting factor's value when your server falls over and declare it "the unit load", or U.
Estimate what you think your future load will be (This is left as an exercise for the reader. Only you know your growth patterns.) and call this "the target load", or T.
When in doubt, estimate high.
The number of servers you need is equal to ceil(T/U)+1.
That is:
- Divide the target load by the unit load to determine the number of servers you need.
Round up for any fractional servers required. It's better to have more than less. - Add one server (or more) for redundancy & extra capacity.
Figuring out how much RAM, CPU power, disk I/O bandwidth, etc. you need is not something Server Fault can do for you. If you don't know, you need to test and profile.
Based on your experience in your environment you can determine if you need to add more RAM or CPU to your servers to achieve a balance (the server is nearly "maxed out" on its specs and saturates CPU / RAM / Disk / etc. nearly simultaneously, so you don't have resources going to waste).