Image a scenario – You have a shiny new application which works super smooth on the machines you tested. When deployed on a monster core sever with equally large RAM your application performs not so good as you had expected. There are chances that it could perform more badly than your test environments. For the users of the application it would be a frustrating experience as the application performance crawls to a halt.
One of the culprits in Java enterprise applications is the amount of RAM allocated to the application. Many times the same memory configuration which were present in your low powered test environments get moved to the client’s production boxes.
It is like being in a top class restaurant but not able to order anything as the menu is in a different language. What that means is – You are left hungry.
The same goes with your application. It is left hungry for RAM as it starts processing more data or more users are connected to your application. The OS is left with too much of RAM sitting idle as your application even though hungry is not asking for it.
Please therefore give enough attention to RAM.
One of my job duties is to act as a performance tuning adviser for my company’s software product. My clients are product implementation teams who are facing performance issues with the product. One recent ‘complaint’ I received was that the software was performing poorly even on a server with 10 cores. His reasoning was simple – The server has many cores available so why does a application screen take 15 seconds to load. I had to explain him that this was a misconception on his part and it depended on the application code on how to utilize the extra cpu cores. A application which does not use any form of parallelism will execute all the logic serially even though they need not be. Such applications thus will be using only the single core of the machine.The remaining cores although ready for service are not utilized fully.
Application designers and developers need to take modern hardware into consideration when they are designing and writing software. If a unit of work can be made to execute in parallel safely it should be done.
So next time you have a application which shows the same performance on a desktop or an a server, you know the reason why.