We have a pentaho 1.7.1.GA running for quite a while, executing a quartz job every minute.
After some days we can see increasing memory use, up to the point of hitting OOM.
The leaked objects are instances of StandaloneSession, SolutionRepository, and RuntimeRepository.
The leak is caused by QuartzExecute, which creates a new StandaloneSession for every job execution.
When building the output, we eventually end up in PentahoSystem.getSolutionRepository() and .getRuntimeRepository(), which each create a new object as their scope is "session" in our (default) configuration.
Both SolutionRepository and RuntimeRepository (as well as ContentRepository) have a method setSession() that puts the current session into a threadlocal.
If this is called with the StandaloneSession created by QuartzExecute, we have a leak:
The thread's ThreadLocalMap will now refer to the session (both via the new Solution- and RuntimeRepository), and the session refers to the repositories via it's attributes member.
This will never get cleared.
Workaround that seems to work for us: set the scope of the repositories to "global" in pentaho.xml.