6 Stimmen

sun.net.www.http.HttpClient Speicherleck in Tomcat 6

Ich benutze Tomcat 6.0.18 . Nach undeployemnt von meinem app, HttpClient scheint einen Bezug zu haben zu WebappClassLoader und verursacht damit das Speicherleck.

Nach einigen Untersuchungen habe ich die Lösung gefunden in Tomcat 7.0.6 , JreMemoryLeakPreventionListener con keepAliveProtection Attribut. Dieser Ansatz funktioniert jedoch nicht mit Kater 6 (Ich habe den JreMemoryLeakPreventionListener angepasst, um Unterstützung für dieses Attribut hinzuzufügen).

Hat jemand eine Lösung, wie man dieses Leck in Tomcat 6 beheben kann? Vielen Dank!

8voto

Igor Punkte 1366

Ich habe die Lösung für das Speicherleck gefunden.

Man muss die Umsetzung von ServletContextListener wie folgt:

package org.example;

public class MyServletContextListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce) {
         tomcatLeakPreventionForHttpClient();
    }

    private void tomcatLeakPreventionForHttpClient() {
        try {
            final Field kac = HttpClient.class.getDeclaredField("kac");
            kac.setAccessible(true);
            final Field keepAliveTimer = KeepAliveCache.class.getDeclaredField("keepAliveTimer");
            keepAliveTimer.setAccessible(true);

            final Thread t = (Thread) keepAliveTimer.get(kac.get(null));
            if(t.getContextClassLoader() == Thread.currentThread().getContextClassLoader()) {
                t.setContextClassLoader(ClassLoader.getSystemClassLoader());
            }
        } catch(final Exception e) {
        }
    }

    public void contextInitialized(ServletContextEvent event) {
    }

}

und natürlich die Registrierung des Hörers in web.xml :

  <listener>
    <listener-class>org.example.MyServletContextListener</listener-class>
  </listener>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X