Any instances of classes that implement the finalize() method are often called finalizable objects. They will not be immediately reclaimed by the Java garbage collector when they are no longer referenced. Instead, the Java garbage collector appends the objects to a special queue for the finalization process. Usually it's performed by a special thread called a "Reference Handler" on some Java Virtual Machines. During this finalization process, the "Finalizer" thread will execute each finalize() method of the objects. Only after successful completion of the finalize() method will an object be handed over for Java garbage collection to get its space reclaimed by "future" garbage collection. I did not say "current," which means at least two garbage collection cycles are required to reclaim the finalizable object. Sounds like it has some overhead? You got it. We need several shots to get the space recycled.
Finalizer threads are not given maximum priorities on systems. If a "Finalizer" thread cannot keep up with the rate at which higher priority threads cause finalizable objects to be queued, the finalizer queue will keep growing and cause the Java heap to fill up. Eventually the Java heap will get exhausted and a java.lang.OutOfMemoryError will be thrown.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
Does anyone know which comes first (or how I can find out) ...if the heap fills up with Finalizer objects, then the [CMS-concurrent-reset-start] is unable to process them causing it to keep looping?Or...does the [CMS-concurrent-reset-start] fail first (for some other reason), making the heap fill up with Finalizer objects?
On Wed, Feb 7, 2018 at 4:15 PM, Austin <aust...@hawaii.edu> wrote:
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--Matthew Buckett, Senior VLE Developer
Systems and Applications, Technology Enhanced Learning
IT Services, University of Oxford
13 Banbury Road, OX2 6NN
Tel: 01865 283349
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--Matthew Buckett, Senior VLE Developer
Systems and Applications, Technology Enhanced Learning
IT Services, University of Oxford
13 Banbury Road, OX2 6NN
Tel: 01865 283349
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
On Freitag, 9. Februar 2018 20:28:04 CET Austin wrote:
> Another thing I was wondering is if Announcements get loaded into memory
> whenever a user is added into memory? The reason I ask is because, we have
> a site that has 30,000 users, which includes a ton of "old" users. (which
> I've also been suspicious of in the past causing problems) And since some
> of the Announcements I inspected were also 'old'... this is kind of a leap,
> but is there any chance that even though these old users are not actually
> logging in, but they are somehow getting loaded into memory (suspect that
> if one person logs in and views that 30K site, every user from that site
> will also be loaded into mem.), are announcements they would have been
> seeing also getting loaded into memory?
I don't think so; sounds rather unlikely.
Also, I just had a look by enabling the mysql general query log for my local development sakai instance and then:
started the server,
logged in with an admin account,
clicked a bit around the announcements tool in my Home site,
went to a course site,
looked at the announcements,
edited one until "preview,
canceled the preview,
logged out of sakai without canceling the edit and
shut down the server again.
Only a few queries were made which included "%announcement%" and nothing of that looked like what you were suspecting (see queries below) ; then again, your setup, tools, customizations etc are going to be different.
I also didn't find what I was suspecting (or not really suspecting because I hadn't found any evidence of it happening in the code) and actually looking for:
In your screenshots, those were "edit"-objects which were waiting for finalization. That seems like there's more happening than e.g. a user or a search engine's crawler opening and reading an old announcement.
I found ~160 four abandoned records which never got cleaned up in my sakai_locks table with the oldest ones from February 2014.
That made me wonder if something could be loading all entries from that locks table and create "ancient" edit objects for those records that way, e.g. for prefilling a local cache or something cleanup-related.
But according to the query log, this doesn't happen; at least not on my one-tomcat-no-distributed-caching notebook without any quartz jobs.
If I were really interested in where those old announcement edits are originating from, I would go into the announcement service where those edit objects for announcements are being created and then add something like
if (switchToEnableThis && "thatOldAnnouncementsId".equals(announcementId)) {
dumpRequestAndSessionInfo();
throwAndCatchSomeDummyExceptionAndLogItsStacktrace();
notifyMe();
}
Regards
Hendrik
-------
Query log:
MariaDB [sakai11]> select argument from mysql.general_log where argument like '%announcement%' and argument not like '%mysql.general_log%' and command_type!= 'Prepare';
| CREATE TABLE ANNOUNCEMENT_CHANNEL ( CHANNEL_ID VARCHAR (255) NOT NULL, NEXT_ID INT, XML LONGTEXT ) |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/!site/motd' ) |
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/!site/motd' and DRAFT = '0') order by MESSAGE_DATE desc |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/~hsteller/main' ) |
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/~hsteller/main' )order by MESSAGE_DATE asc |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' )
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' )order by MESSAGE_DATE asc
| select SAKAI_ALIAS.ALIAS_ID,SAKAI_ALIAS.TARGET,SAKAI_ALIAS.CREATEDBY,SAKAI_ALIAS.MODIFIEDBY,SAKAI_ALIAS.CREATEDON,SAKAI_ALIAS.MODIFIEDON from SAKAI_ALIAS where TARGET = '/announcement/ann
ouncement/30f49e34-5224-49aa-9099-9f11fa490654' order by SAKAI_ALIAS.ALIAS_ID |
| select SAKAI_ALIAS.ALIAS_ID,SAKAI_ALIAS.TARGET,SAKAI_ALIAS.CREATEDBY,SAKAI_ALIAS.MODIFIEDBY,SAKAI_ALIAS.CREATEDON,SAKAI_ALIAS.MODIFIEDON from SAKAI_ALIAS where TARGET = '/announcement/ann
ouncement/30f49e34-5224-49aa-9099-9f11fa490654' order by SAKAI_ALIAS.ALIAS_ID |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' )
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' )order by MESSAGE_DATE asc |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' )order by MESSAGE_DATE asc |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) and ( MESSAGE_ID = 'f419dcea-72ef-4e8b-8f63-3a98b969628a' )
|
| select XML from ANNOUNCEMENT_MESSAGE where (CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) and ( MESSAGE_ID = 'f419dcea-72ef-4e8b-8f63-3a98b969628a' )
|
| insert into SAKAI_LOCKS (TABLE_NAME,RECORD_ID,LOCK_TIME,USAGE_SESSION_ID) values ('ANNOUNCEMENT_MESSAGE', '1275768022 - /announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main/f41
9dcea-72ef-4e8b-8f63-3a98b969628a', TIMESTAMP'2018-02-09 21:29:56.459000', 'd78979c3-f937-48a9-8edc-bcad916955f6') |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| select count(1) from SAKAI_REALM_RL_FN,SAKAI_REALM force index (AK_SAKAI_REALM_ID) where SAKAI_REALM_RL_FN.REALM_KEY = SAKAI_REALM.REALM_KEY and SAKAI_REALM.REALM_ID IN ('/announcement/c
hannel/30f49e34-5224-49aa-9099-9f11fa490654/main','/site/30f49e34-5224-49aa-9099-9f11fa490654','!site.helper') and FUNCTION_KEY in (select FUNCTION_KEY from SAKAI_REALM_FUNCTION where FUNCT
ION_NAME = 'annc.read') and (ROLE_KEY in (select ROLE_KEY from SAKAI_REALM_RL_GR where ACTIVE = '1' and USER_ID = NULL and REALM_KEY in (select REALM_KEY from SAKAI_REALM where SAKAI_REA
LM.REALM_ID IN ('/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main','/site/30f49e34-5224-49aa-9099-9f11fa490654','!site.helper'))) or ROLE_KEY in (1) ) |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| select XML from ANNOUNCEMENT_CHANNEL where ( CHANNEL_ID = '/announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main' ) |
| delete from SAKAI_LOCKS where TABLE_NAME = 'ANNOUNCEMENT_MESSAGE' and RECORD_ID = '1275768022 - /announcement/channel/30f49e34-5224-49aa-9099-9f11fa490654/main/f419dcea-72ef-4e8b-8f63-3a9
8b969628a'
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--Matthew Buckett, Senior VLE Developer
Systems and Applications, Technology Enhanced Learning
IT Services, University of Oxford
13 Banbury Road, OX2 6NN
Tel: 01865 283349
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--Matthew Buckett, Senior VLE Developer
Systems and Applications, Technology Enhanced Learning
IT Services, University of Oxford
13 Banbury Road, OX2 6NN
Tel: 01865 283349
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
Hi Austin,
after glancing over
I would take a closer look at those;
On Mittwoch, 28. Februar 2018 03:47:54 CET Austin wrote:
> | 5,780 | 0 | com.novell.ldap.LDAPConnection
Because:
a)
zero-versus-anything
Doesn't have to mean anything, but being the only one, it it looks a bit suspicious
b)
It does something over the network, i.e. there's a chance of something hanging
c)
To add to b) by looking at the source linked above:
unless explicitly told otherwise, that class use "0" as the default timeout for the sockets it opens
d)
Among other fun things - like potentially making the finalizer-Thread waiting to join() another thread[1] - it also does this in its finalize() method [2]:
while( true ) {
try {
extending_vector_ie_heavily_synchronized.remove(0);
}
catch( ArrayIndexOutOfBoundsException ex) {
break;
}
}
It might be worth to add some debug message at the begin and end of that class's finalize method and see if/when it doesn't leave.
Or maybe change the default socket timeout from 0ms to something like 5 minutes and see what happens.
Hendrik
[1]
[2]
Hi Austin,
Have you been able to get a thread dump out of Tomcat when it has run out of memory? I think that might be the missing piece here (I read back through the archives and didn't see one, but apologies if I missed it).
When an object with a finalize() method is to be garbage collected, a java.lang.ref.Finalizer object is created for it and added to a queue. That queue is processed by a "Finalizer" background thread, which takes care of running the appropriate finalize() method for each of those objects.
All it takes is for one object to have a badly implemented finalize() method for the whole thing to come crashing down. As a perverse example, creating an object with a method like:
class UhOh {
protected void finalize() throws Throwable {
while (true) {}
}
}
is going to permanently lock up that Finalizer thread. At that point you're leaking memory and it's only a matter of time until you get an OOM error (which may take a while to manifest if you're running with a large heap).
The important thing here is that the counts of objects waiting to be finalized don't necessarily tell you the root cause—there may just be millions of ready-to-be-collect object stuck behind a single bad object, so you've got to find the needle in the haystack. My above example is a bit contrived, but I've seen this happen with single LDAP connections deadlocking, for instance.
If you can get a thread dump from the JVM, that will let you see what the Finalizer thread is actually doing, and hopefully give a hint as to what's blocking the queue. While the JVM is running, you can do:
kill -3 <java pid>
and it will log a thread dump to your catalina.out file. Look for an entry called "Finalizer"--something like this:
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007faac04d9000 nid=0x347a in Object.wait() [0x00007faaadf15000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.$$YJP$$wait(Native Method)
at java.lang.Object.wait(Object.java)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000800466d0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
Mine's currently doing nothing, which in a healthy system is probably a good thing. If yours looks different, try running multiple thread dumps a few seconds apart and see how they change. That should give more an idea of where that thread is spending its time.
Cheers,
Mark
Austin <aust...@hawaii.edu> writes:
Hello All,
Sorry to keep bugging you all with this problem. But here's some additional info from our heap dumps.
After comparing the java.lang.ref.Finalizer object between a bad and a normal heap dump (e.g. when the system is running normally), the number objects retained in Finalizer is inflated by the thousands (note these are just a handful of objects, I haven't listed them all). However, that makes sense because Sam Ottenhoff said,
*"If a "Finalizer" thread cannot keep up with the rate at which higher priority threads cause finalizable objects to be queued, the finalizer queue will keep growing and cause the Java heap to fill up. Eventually the Java heap will get exhausted and a java.lang.OutOfMemoryError will be thrown"*
However, we don't have an OutOfMemoryError when this happens, the GC just keeps looping over and over, but you can see below how many more objects are in the Finalizer when the problem happens.
+-----------+----------+------------------------------------ ----------------------------------------------------+ | BAD GC | GOOD GC | | #objects | #objects | Class +-----------+----------+------------------------------------ ----------------------------------------------------+ | 245,941 | 18,875 | org.sakaiproject.announcement.impl.BaseAnnouncementService$BaseAnnouncementMessageEdit | 2,171,252 | 6,289 | org.sakaiproject.content.impl.BaseContentService$BaseCollectionEdit | 444,086 | 2,443 | org.sakaiproject.content.impl.BaseContentService$BaseResourceEdit | 248,318 | 200 | java.util.zip.ZipFile\$ZipFileInputStream | 246,652 | 1,715 | java.util.zip.Inflater | 248,030 | 200 | java.util.zip.ZipFile\$ZipFileInflaterInputStream | 242,115 | 207 | sun.net.www.protocol.jar.URLJarFile | 39,572 | 18 | com.sun.crypto.provider.PBEKey | 341,342 | 3,236 | java.util.jar.JarFile | 103,226 | 57,231 | org.sakaiproject.user.impl.BaseUserDirectoryService$BaseUserEdit | 92,685 | 49 | java.io.FileInputStream | 5,780 | 0 | com.novell.ldap.LDAPConnection | 67,453 | 11 | org.apache.commons.fileupload.disk.DiskFileItem +-----------+----------+------------------------------------ ------------------------------------------------------+
The 2 million org.sakaiproject.content.impl.BaseContentService$BaseCollectionEdit objects above seemed suspicious, so looking into *that* object, there were 400K+ instances each of Content Collection objects that referenced "/" and "/group/". And normal site references seemed to have 1000s of references more than usual. (see screenshots). However, I wouldn't know if these increased number of "/" and "/group/" objects is *CAUSING* the Finalizer to keep growing, or if it's a *SYMPTOM* of it growing.
We also tried adding these to our JAVA config, but the problem still happened (I didn't get a chance to take a heap dump when the prob. happened with these settings)
-XX:CMSMaxAbortablePrecleanTime=10000
-XX:+CMSScavengeBeforeRemarkThanks,
Austin
-- Mark Triggs <ma...@dishevelled.net>
Hi Hendrik,
I see our last messages crossed in the post :) Just to note: NYU had issues with exactly this code, where LDAP connections would deadlock in their finalize method waiting on another thread.
NYU is now running Sam's Unboundid LDAP implementation from here:
https://github.com/sakaiproject/sakai/pull/1924
with the modifications described further down in that PR thread.
Mark
Hendrik Steller <sa...@stellers.net> writes:
Hi Austin,
after glancing over
http://grepcode.com/file/repo1.maven.org/maven2/com.novell.ldap/jldap/4.3/com/ novell/ldap/LDAPConnection.java
I would take a closer look at those;
-- Mark Triggs <ma...@dishevelled.net>
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
Hi, everyone. We've been experimenting those memory leak. We discovered using YourKit that the problem is the same Austin described in the previous emails. We have a lot of objects org.sakaiproject.announcement.impl.BaseAnnouncementService$BaseAnnouncementMessageEdit . They are pending to finalize. I've been seeing the content of those announcements, and they are really old. That, made me think those messages are loaded when somebody access to the Workspace announcements tool and loads all the messages (we had multiple sites that are available for l all students and had announcements since 2008).
There are some announcement specially big, (they use base64
images embeded) and java retains arround 2MB for each object. That
makes that we rapidly gather 4GB of memory just for announcements
when a lot of users access to the announcements tool.
I was wondering if anyone found the solution for this problem
Thanks in advance.
Àlex
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
-- Alexandre Ballesté Crevillén alexandre.balleste at udl.cat ==================== Universitat de Lleida Àrea de sistemes d'Informació i Comunicacions Analista/Programador University of Lleida Information and Communication Systems Service Tlf: +34 973 702148 Fax: +34 973 702130 ===================== Avís legal / Aviso legal / Avertiment legal / Legal notice <http://www.imatge.udl.cat/avis_legal_lopd.html>
With Longsight’s help, we recently resolved (we think) an issue with GC related to Finalizers by switching from the default JLDAP provider to the new unboundid LDAP provider.
https://jira.sakaiproject.org/browse/SAK-23630
Before that, we would see one or two app servers run out of memory and into excessive, repeated Full GCs every week. Since that change, it hasn’t happened again.
Regards
Stephen
---
Stephen Marquard, Learning Technologies Co-ordinator,
Centre for Innovation in Learning and Teaching (CILT)
University of Cape Town
http://www.cilt.uct.ac.za
stephen....@uct.ac.za
Phone: +27-21-650-5037 Cell: +27-83-500-5290
From: saka...@apereo.org <saka...@apereo.org>
On Behalf Of Alex Balleste
Sent: 19 September 2018 02:30 PM
To: Sakai Development <saka...@apereo.org>; aust...@hawaii.edu; sa...@stellers.net
Subject: Re: [sakai-dev] GC memory leak with java.lang.ref.Finalizer / BaseAnnouncementService
Hi, everyone. We've been experimenting those memory leak. We discovered using YourKit that the problem is the same Austin described in the previous emails. We have a lot of objects org.sakaiproject.announcement.impl.BaseAnnouncementService$BaseAnnouncementMessageEdit . They are pending to finalize. I've been seeing the content of those announcements, and they are really old. That, made me think those messages are loaded when somebody access to the Workspace announcements tool and loads all the messages (we had multiple sites that are available for l all students and had announcements since 2008).
There are some announcement specially big, (they use base64 images embeded) and java retains arround 2MB for each object. That makes that we rapidly gather 4GB of memory just for announcements when a lot of users access to the announcements tool.
I was wondering if anyone found the solution for this problem
Thanks in advance.
Àlex
Do you think both problems are related, LDAP and Announcements?. Is LDAP preventing in some way to finalize those BaseAnnouncementEdit Objects? I would try it because we are using LDAP provider too.
Thanks.
Àlex
Disclaimer - University of Cape Town This email is subject to UCT policies and email disclaimer published on our website at http://www.uct.ac.za/main/email-disclaimer or obtainable from +27 21 650 9111. If this email is not related to the business of UCT, it is sent by the sender in an individual capacity. Please report security incidents or abuse via https://csirt.uct.ac.za/page/report-an-incident.php. --
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
Hi Àlex,
The analysis of heap dumps and thread dumps taken when the server was in extreme low-memory conditions suggested that the finalizer queue was being blocked by JLDAP objects, so the GC was never able to run the finalizers and thus free up the BaseAnnouncementEdit objects.
Sam Ottenhof from Longsight may be able to explain that better.
private int writeSemaphoreOwner = 0;
...
synchronized( writeSemaphore) {
if( id == 0) {
ephemeralId = ((ephemeralId == Integer.MIN_VALUE)
? (ephemeralId = -1) : --ephemeralId);
id = ephemeralId;
}
while( true) {
if( writeSemaphoreOwner == 0) {
// we have acquired the semahpore
writeSemaphoreOwner = id;
break;
} else {
if( writeSemaphoreOwner == id) {
// we already own the semahpore
break;
}
try {
// Keep trying for the lock
writeSemaphore.wait();
continue;
} catch( InterruptedException ex) {
// Keep trying for the lock
continue;
}
}
}
writeSemaphoreCount++;
}
private volatile int writeSemaphoreOwner = 0;
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
> > stephen....@uct.ac.za <mailto:stephen.marquard@uct.ac.za>
> > an email to sakai-dev+unsubscribe@apereo.org
> > <mailto:sakai-dev+unsubscribe@apereo.org>.
> > To post to this group, send email to saka...@apereo.org
> > <mailto:saka...@apereo.org>.
> > Visit this group at
> > https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
Hi, thanks for all that information. I'll definitively go to the
new unboundid LDAP provider. It's true that in the logs I can see
problems about semaphores related with LDAP.
> > stephen....@uct.ac.za <mailto:stephen....@uct.ac.za>
> > an email to sakai-dev+...@apereo.org
> > <mailto:sakai-dev+...@apereo.org>.
> > To post to this group, send email to saka...@apereo.org
> > <mailto:saka...@apereo.org>.
> > Visit this group at
> > https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+...@apereo.org.
Well, we've applied the LDAP provider implementation as you
suggested and it really improved the system behavior. It has been
running for a week and the number of GC alerts decreased
drastically.
> > stephen....@uct.ac.za <mailto:stephen.marquard@uct.ac.za>
> > an email to sakai-dev+unsubscribe@apereo.org
> > <mailto:sakai-dev+unsubscribe@apereo.org>.
> > To post to this group, send email to saka...@apereo.org
> > <mailto:saka...@apereo.org>.
> > Visit this group at
> > https://groups.google.com/a/apereo.org/group/sakai-dev/.
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
-- Alexandre Ballesté Crevillén alexandre.balleste at udl.cat ==================== Universitat de Lleida Àrea de sistemes d'Informació i Comunicacions Analista/Programador University of Lleida Information and Communication Systems Service Tlf: +34 973 702148 Fax: +34 973 702130 ===================== Avís legal / Aviso legal / Avertiment legal / Legal notice <http://www.imatge.udl.cat/avis_legal_lopd.html>--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.
To post to this group, send email to saka...@apereo.org.
Visit this group at https://groups.google.com/a/apereo.org/group/sakai-dev/.
-- Alexandre Ballesté Crevillén alexandre.balleste at udl.cat ==================== Universitat de Lleida Àrea de sistemes d'Informació i Comunicacions Analista/Programador University of Lleida Information and Communication Systems Service Tlf: +34 973 702148 Fax: +34 973 702130 ===================== Avís legal / Aviso legal / Avertiment legal / Legal notice <http://www.imatge.udl.cat/avis_legal_lopd.html>
--
You received this message because you are subscribed to the Google Groups "Sakai Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sakai-dev+unsubscribe@apereo.org.