When you have a memory leak, it signals that you have a Permanent Generation leak in your application, what means that whenever you redeploy an application in your application server it leaves a whole lot of classes behind. These old class definitions end up in your JVM permanent generation, eating up precious memory therefore the solution is never to increase Permgen size, this "solution" is a time bomb.
As is also the case with other types of memory leaks, there is no golden tool or a fixed how-to list that you can follow to magically solve the problem. There are many possible cases and many ways to solve it.
Having said that I recommend to use Plumbr (official website) and here you have a very usefulguide to solve it:
Solving run-time OutOfMemoryError
Good luck.