We did some load testing for our application and found out that performance became extremely bad quickly once the concurrent users number grows and reaches certain threshold. Looking at the memory usage and garbage collection data, we think it is very likely due to the memory consumption in application server. i.e.
(number of users) x (average memory usage per user) is greater than the size of the available memory in JVM.
My first question is, assuming we can find out the average memory footprint per user, is there a "thumb of rule" kind of general formula to calculate the recommended max concurrent users for the application? For example, PRPC engine consumes memory too, how to we account for that.
Secondly, what is the best way to find out total memory footprint per user/requestor? In SMA, "Requestor Management", there is a "Estimate Size" button, which calculate "Data Size" for each requestor in the requestor table show below. Is that a good estimate? Any other or better way to estimate?