spring-projects / spring-webflow

Spring Web Flow
https://spring.io/projects/spring-webflow
Apache License 2.0
323 stars 231 forks source link

HTTP session expiration doesn't ends active flows this caues memory leaks when we have started flow sessions. [SWF-1594] #770

Open spring-operator opened 11 years ago

spring-operator commented 11 years ago

Bartłomiej Mocior opened SWF-1594 and commented

When user starts a flow (or number of flows) and the user is inactive the natural behaviour of HTTP session is that it expires. Started flow session are not removed causing the memory leak. All the data attached to flows still remains in the flow session and will never be removed.


Affects: 2.3.1

Attachments:

7 votes, 9 watchers

spring-operator commented 11 years ago

Jeremy Sanders commented

We are encountering this same problem. Please look into this.

spring-operator commented 11 years ago

Daniel commented

Is there any workaround?

spring-operator commented 10 years ago

Andrzej L commented

This issue is confirmed? I wanted to use SWF in quite big project but such problems without a response for about a year are quite deterrent.

spring-operator commented 10 years ago

Rossen Stoyanchev commented

What server and version are you using? Also would you be able to check what is holding on to the data stored in the HTTP session after it expires, e.g. using a tool like YourKit or you could also obtain a heapdump from the JVM.

spring-operator commented 10 years ago

Tim Andersen commented

We encountered this problem when we tried to upgrade Webflow from 2.0.9.RELEASE to 2.3.3.RELEASE. Our test suite gets a java.lang.OutOfMemoryError: Java heap space. We reproduced the problem by writing a JUnit test that starts a new flow over and over again in a loop and monitoring it with jvisualvm. When we use 2.0.9.RELEASE, our memory usage stays steady at about 100m no matter how many flows are executed. With version 2.1.0.RELEASE and above, it uses all available memory until the GC thrashes and it runs out of memory. We tried this experiment with the flow execution reaching an end-state and without reaching an end-state, and that didn't seem to matter. Based upon our experiments, I believe the memory leak bug was introduced in 2.1.0.RELEASE and affects all subsequent versions.

spring-operator commented 10 years ago

Tim Andersen commented

Screenshots of jvisualvm looping over our flow execution from JUnit (integration tests that load the spring context and save to the database, but do not run in an application container)

spring-operator commented 10 years ago

Rossen Stoyanchev commented

So what are the simplest steps to reproducing this with a running application (as opposed to a unit test)? Can you find out with jvisualvm what are the paths to GC roots? I.e. what's holding on the state? Or if I can get a reproducible case going, I can find out with Yourkit.

spring-operator commented 10 years ago

Karl Trumstedt commented

This seems very serious and should probably be fixed ASAP. I'll try to find some time to try to recreate the issue.