Oracle
 sql >> Base de données >  >> RDS >> Oracle

Permgen Memory Leak avec redéploiement à chaud et base de données Oracle

Essayez de déplacer le pilote Oracle JDBC dans le répertoire lib de Tomcat au lieu d'être dans le dossier lib de l'application. Il semble qu'OracleDiagnosabilityMBean maîtrise Catalina.

Edit :Puisque vous n'avez pas le contrôle sur Tomcat, essayez d'envelopper l'endroit où les classes Oracle sont chargées comme ceci (sauf remplacez AppContext pour votre init Oracle) :

http://cdivilly.wordpress.com/2012/04/ 23/permgen-memory-leak/

//somewhere in application startup, e.g. the ServletContextListener
try {
 final ClassLoader active = Thread.currentThread().getContextClassLoader();
 try {
  //Find the root classloader
  ClassLoader root = active;
  while (root.getParent() != null) {
   root = root.getParent();
  }
  //Temporarily make the root class loader the active class loader
  Thread.currentThread().setContextClassLoader(root);
  //Force the AppContext singleton to be created and initialized
  sun.awt.AppContext.getAppContext();
 } finally {
 //restore the class loader
 Thread.currentThread().setContextClassLoader(active);   
}
} catch ( Throwable t) {
   //Carry on if we get an error
   LOG.warning("Failed to address PermGen leak");
}