Performance bottleneck can be anything and it is an impediment to the system performance. Let us think software system as a 3 lane highway. During the off peak hours, vehicles can go as fast as possible since almost all the lanes are empty. How about the peak hours when all the lanes are fully occupied? Of course cars need to slow down and may even go bumper to bumper. Why it’s happened? Once the highway reaches the limit of vehicles it can handle, it will to force the vehicles to slow down due to queuing. So the capacity of the highway is a bottleneck here. It is pretty much the same scenario with the software. Your highway capacity is similar to your CPU capacity in the software. When CPU is full and busy serving the request, it cannot take any more requests and everything else will slow down.
Let us assume that there is a road work happening in the highway and one lane is closed. Obviously, highway will reach its capacity earlier than expected. What is the reason? Vehicles are not able to utilize one of the lanes. So the issue here is the blocked 3rd lane. What does that mean in the software? Bottleneck need not be the CPU itself but can be other resources which define the work in the CPU. Best example is software thread. If the system is designed to execute 50 threads but 10 threads are blocked due to an issue, system is left with only the remaining 40 threads. So bottleneck here is the blockage in 10 threads.
Now, we talked about 2 different scenarios affecting performance, think about another scenario where highway is free and no road work. What will happen if you have mechanical issues with your car and can only drive very slow. Definitely, you have to give way to the fast moving vehicles and going to slow down many others in your lane. Well, that is exactly the same problem you see with the code in your software. If one piece of code is performing poor, it is going to affect everything around that and in turn the whole system. Based on aforementioned, your performance bottlenecks can be any hardware resources like CPU, Memory or Storage or it can be even the software resources like threads, connections, process specific memory like Java Heap. And it can even the part of the source code itself.
In order to eliminate performance bottlenecks, we gather metrics about current system performance, create reusable test scripts, setup a repeatable performance testing process.
After deep analysis we provide performance improvement recommendations based on test results and an architecture review and assist in the implementation of the recommendations by utilizing our highly skilled cost effective offshore development team.