Hi all,
We had a problem last week where a very large number of sessions (millions)
were created in uPortal. As a server in a cluster tried to purge expired
events, it eventually ran out of memory.
I think the source of the problem is in the method purgeEventSessionsBefore
of org.jasig.portal.events.aggr.session.JpaEventSessionDao. It appears to
create a list of all the EventSessionImpl's to purge and then delete them
one by one. In our case, it made it to about 7,000,000 of them
(100,000,000 when you count all the supporting hibernate objects) and
almost 4GB of heap space.
I'm not a hibernate specialist, but is it possible to do this more
efficiently and/or in batches? (My workaround for the time being is calling
setMaxResults(100000) on the query.)
----------------
@AggrEventsTransactional
@Override
public int purgeEventSessionsBefore(DateTime lastAggregatedEventDate) {
final TypedQuery<EventSessionImpl> query =
this.createQuery(this.findExpiredEventSessionsQuery);
query.setParameter(this.dateTimeParameter, lastAggregatedEventDate);
final List<EventSessionImpl> resultList = query.getResultList();
for (final EventSessionImpl eventSession : resultList) {
this.getEntityManager().remove(eventSession);
}
return resultList.size();
}
--
You are currently subscribed to [email protected] as:
[email protected]
To unsubscribe, change settings or access archives, see
http://www.ja-sig.org/wiki/display/JSG/uportal-dev