Recently, I had 2 memory related crashes of my Wicket app. Thanks to the priceless -XX:+HeapDumpOnOutOfMemoryError option, I had a heap dump to look at (one crash was due to a GC overhead exception, so no dump there). One thing that immediately attracted my attention was that there were 116.917 instances of org.apache.wicket.protocol.http.pagestore.DiskPageStore$SessionEntry. As objects of this class "represent a session" (javadoc), it seems that I had 116.917 sessions mapped in DiskPageStore.sessionIdToEntryMap.
In my app, i spotted two reasons for this; 1. search engine bots (e.g. googlebot) receive a new session for each page they access, as we cut of the ;jsessionid= from the URL in our app in order not to have those ugly IDs on the search engine result pages. As a result, when google tried to index 100.000+ pages 100.000+ sessions had been created. I am certainly going to work on this issue, however, it helped me to spot reason number 2: 2. No entries are removed from DiskPageStore.sessionIdToEntryMap. I guess, this should be added to the DiskPageStore.unbind(String sessionId) method: public void unbind(String sessionId) { // FIX: replace get() with remove() SessionEntry entry = (SessionEntry)sessionIdToEntryMap.get(sessionId); if (entry != null) { if (isSynchronous()) { entry.unbind(); } else { List pages = getPagesToSaveList(sessionId); synchronized (pages) { flushPagesToSaveList(sessionId, pages); entry.unbind(); } pagesToSaveAll.remove(sessionId); } } } ----- ------- Stefan Fußenegger http://talk-on-tech.blogspot.com // looking for a nicer domain ;) -- View this message in context: http://www.nabble.com/Memory-leak-in-DiskPageStore-tp17597466p17597466.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]