Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I was asked to make some small technical presentation about specific application scalability. The application is developed using Java, Spring MVC, Hibernate. I have access to the application source code.

How can I measure software scalability (using sources) and what metrics do I need to look after when measuring software scalability?

share|improve this question
up vote 3 down vote accepted

I would start with reading Wikipedia article on the subject.

In short, scalability is how system performance grows with adding more resources or, alternatively, how the resource utilization grows with increasing load. For example, how many concurrent users can your site handle until response time grows beyond 0.3 sec? The same question after you double the available RAM/disk/CPU/etc. You probably can use your knowledge of the application internals to decide which parameters are worth checking.

Setup a test bench with a server machine and one or more client machines. Use some tool to limit the amount of resources available to the server (e.g. ulimit) or run some interfering application on the server. Measure how the server deals with client requests. Repeat the above gradually increasing/decreasing interfering load/available resources. At the end you get n-dimensional space with dots in it. It may be simpler to change only one parameter at a time while fixing all the others at some typical value (or a couple of values). In this case you can represent the result as a bunch of 2D graphs with server performance (e.g. number of users/requests) on one axis and resource utilization/availability on the other.

There are more complex scenarios where your application uses several servers for several part of the application and you can vary their amount and ratio, but I guess it's not your case. At most, you probably may want to vary the number of threads/processes, if this matters.

If you measure the whole application you usually don't need source code access. However, you may be interesting in measuring some specific part of the code (e.g. only DB or UI). Then you can use the source code to expose only this module for measurements and run your tests. This is called a microbenchmark.

If you're looking for examples, there is a plenty of them in academic articles. Search the google scholar for performance evaluation + your preferred terms.

share|improve this answer

Scalability is not really a quantifiable property for real applications.

In practical terms, scalability is about being able to support workloads that are increasing in various dimensions.

To start with the application will support the increasing workloads with existing hardware resources. But there are various points where you hit limits; e.g. the amount of memory, the number of cores, contention on data structures, database throughput, and so on. Each time you hit one of these limits, you have to take a different approach to supporting increasing workloads. Scalability is about how long you can keep increasing the workload before you hit an insurmountable limit, or you need to undertake a major redesign.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.