It's hard to say.
I guess that you have to detect which of your portlets can be a candidate for improvements.
I would suggest this methodology to have a better control of your environment in terms of performance:
a) Test your infraestrcture with small portlets to have a better understanding of your hardware capacity, for example, you can test your stack OS, GateIn with default portlets using a tool like JMeter. This will give you an idea about limits of your footprint.
b) Introduce in your tests portlet by portlet, to see how much resources your app need, also it's interesting to have a measure per user.
c) Once you have detected a suspected application, try to make a memory dump to investigate what can be improved.
d) Take records of your loops / tests and parameters used, this info will be useful in the future to give you an idea which parameters should modify and why (more heap, more permgen, thread stack, etc).
e) Review if there are some anti-pattern in your code, for example, something big stored in session (global query or similar), so each user is repeating same operations.
Hope this can help.