Утечка памяти в SMTP-приложении для Tomcat под Tomcat

Я настроил Tomcat для использования SLF4J/logback для всех журналов. Я настроил SMTPAppender в файле server/lib/logback.xml. Он отправляет электронное письмо за ошибку, и все кажется нормальным. Но когда я выключаю Tomcat, я получаю следующую ошибку:

13:44:14,431 |-INFO in ch.qos.logback.classic.net.SMTPAppender[ERROR_EMAIL] - About to send out SMTP message "ERROR: o.a.c.l.WebappClassLoader - The web application [] appears to have started a thread named [logback-1] but has failed to stop it. This is very likely to create a memory leak."

13:44:14,446 |-ERROR in ch.qos.logback.classic.net.SMTPAppender[ERROR_EMAIL] - Error occurred while sending e-mail notification. javax.mail.MessagingException: IOException while sending message;

nested exception is:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
boundary="----=_Part_2_1458580013.1444423454431"
at javax.mail.MessagingException: IOException while sending message
at  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1177)
at  at javax.mail.Transport.send0(Transport.java:195)
at  at javax.mail.Transport.send(Transport.java:124)
at  at ch.qos.logback.core.net.SMTPAppenderBase.sendBuffer(SMTPAppenderBase.java:394)

Конфиг выглядит так:

<appender name="ERROR_EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <!-- guarantees that only logs of ERROR will be emailed -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

        <asynchronousSending>true</asynchronousSending>
        <includeCallerData>true</includeCallerData>

        <smtpHost>xyz.company.com</smtpHost>
        <smtpPort>25</smtpPort>
        <STARTTLS>false</STARTTLS>

        <to>me@company.com</to>
        <from>administrator@company.com</from>

        <subject>ERROR: %logger{20} - %m</subject>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date %-5level %logger{35} - %message%n</pattern>
        </layout>  

    </appender>

Все электронные письма были отправлены за несколько минут до закрытия. Сообщение об ошибке появляется только когда я выключаю сервер. Я пробовал mail.jar (версия 1.4.5) и javax.mail-1.5.4.jar.

Я запускаю Tomcat 7 с Java 7 JDK, на Windows 7 в качестве службы. Я использую SLF4J 1.7.12 и logback 1.1.3. Существует только одно веб-приложение, и в нем нет почтового банка (я поместил файл mail.jar в папку lib веб-приложений, чтобы проверить наличие проблем с загрузчиком классов, но в сообщениях об ошибках нет тела)

Я пытался и не смог понять, почему он имеет ошибку MIME в первую очередь. Я попытался добавить Activation.jar версии 1.1, но это не помогло.

Сейчас, когда я публикую это и ожидаю некоторого всплеска, я думаю, что мне следует создать очень простое веб-приложение, которое просто регистрирует ошибку и устраняет любые конфликты web-inf / lib jar, которые могут происходить. Кроме того, мне нужно посмотреть, есть ли какой-нибудь способ заставить аппендер сбрасываться после отправки и пытаться не отправлять ни асинхронный режим. Но я ценю любую помощь в то же время.

1 ответ

Ваше веб-приложение должно корректно завершать logback, когда контекст веб-приложения разрушен.

В общем, no object DCH for MIME type multipart/mixed из-за лабиринта загрузчика классов. Вы можете проверить это, включив -Djavax.activation.debug=true

Другие вопросы по тегам