0

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.

adbrpc
  • 3
  • 1
  • 2
  • Do you know how much of a system's resources the average transaction uses? You'll need to know this before such a calculator could be devised, and then you'd need to know what the hardware can handle in terms of resources. One way you could do the former is to enable performance counters and collect data while throwing a number of sample transactions at the system, and then study the results. As for the latter, you'll only know that after you have purchased the hardware, and you could extrapolate this from the results, but real-world results may vary - be sure to bear that in mind. – Aaron Mason Oct 23 '13 at 04:22
  • I have done profiling and have the necessary data e.g. avg response time, tps, CPU utilization etc. what I need is an algorithm based mathematical model something on line of [link](http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=1657920). This paper applies to calculate server farm but I have only 1 server – adbrpc Oct 23 '13 at 05:20

1 Answers1

3

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).

voretaq7
  • 79,345
  • 17
  • 128
  • 213
  • My intention was to have complete model (number of servers, RAM, CPU power etc) that helps me establish some benchmark. Of course, real world results will vary than mathematical model. Thanks for advise. – adbrpc Oct 23 '13 at 07:58
  • @adbrpc The problem is servers vary: the 5 machines you bought this year will not have the same specs (likely not even the same components) as ones you buy next year. That's why you benchmark (see [my fixed link above](http://serverfault.com/questions/384686/can-you-help-me-with-my-capacity-planning), determine limiting factors, and plan based on that. If you know your unit load is based on 4 cores at 2GHz and 4 GB of RAM then next year's box with 12 cores at 2GHz and 12G of RAM can theoretically do the work of 3 machines (in reality it will probably expose another limiting factor…) – voretaq7 Oct 23 '13 at 15:48