Log4j and javax.mail are deadlocking

Solution Unverified - Updated -

Issue

  • JBoss became unresponsive. Thread dumps show it was due to threads deadlocking between log4j SMTP appenders and direct usage of javax.mail from the application:

    "WorkManager(2)-1" J9VMThread:0x000000011877C800, j9thread_t:0x0000000118754320, java/lang/Thread:0x070000003BD50160, state:B, prio=5
    (native thread ID:0x36C0D9, native priority:0x5, native policy:UNKNOWN)
    Java callstack:
    at org/apache/log4j/Category.callAppenders(Category.java:201(Compiled Code))
    at org/apache/log4j/Category.forcedLog(Category.java:388(Compiled Code))
    at org/apache/log4j/Category.log(Category.java:849(Compiled Code))
    at org/jboss/logbridge/LogBridgeHandler.publish(LogBridgeHandler.java:72(Compiled Code))
    at java/util/logging/Logger.log(Logger.java:1121(Compiled Code))
    at java/util/logging/Logger.log(Logger.java:1021(Compiled Code))
    at com/sun/activation/registries/LogSupport.log(LogSupport.java:73)
    at javax/activation/MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:548)
    at javax/activation/DataHandler.getDataContentHandler(DataHandler.java:625)
    at javax/activation/DataHandler.writeTo(DataHandler.java:329)
    at javax/mail/internet/MimeUtility.getEncoding(MimeUtility.java:264)
    at javax/mail/internet/MimeBodyPart.updateHeaders(MimeBodyPart.java:1299)
    at javax/mail/internet/MimeMessage.updateHeaders(MimeMessage.java:2071)
    at javax/mail/internet/MimeMessage.saveChanges(MimeMessage.java:2039)
    at javax/mail/Transport.send(Transport.java:119)
    at com/package/Helper.sendDeadlockingMail(Helper.java:166)
    
    "WorkerThread#2[10.2.52.204:58412]" J9VMThread:0x0000000119B48400, j9thread_t:0x0000000119914A80, java/lang/Thread:0x070000003C6E2AE0, state:B, prio=5
    (native thread ID:0x2C508B, native priority:0x5, native policy:UNKNOWN)
    Java callstack:
    at javax/activation/DataHandler.getDataContentHandler(DataHandler.java:625)
    at javax/activation/DataHandler.writeTo(DataHandler.java:329)
    at javax/mail/internet/MimeUtility.getEncoding(MimeUtility.java:264)
    at javax/mail/internet/MimeBodyPart.updateHeaders(MimeBodyPart.java:1299)
    at javax/mail/internet/MimeBodyPart.updateHeaders(MimeBodyPart.java:1008)
    at javax/mail/internet/MimeMultipart.updateHeaders(MimeMultipart.java:414)
    at javax/mail/internet/MimeBodyPart.updateHeaders(MimeBodyPart.java:1285)
    at javax/mail/internet/MimeMessage.updateHeaders(MimeMessage.java:2071)
    at javax/mail/internet/MimeMessage.saveChanges(MimeMessage.java:2039)
    at javax/mail/Transport.send(Transport.java:119)
    at org/apache/log4j/net/SMTPAppender.sendBuffer(Bytecode PC:216)
    at org/apache/log4j/net/SMTPAppender.append(Bytecode PC:56)
    at org/apache/log4j/AppenderSkeleton.doAppend(AppenderSkeleton.java:230(Compiled Code))
    at org/apache/log4j/helpers/AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65(Compiled Code))
    at org/apache/log4j/Category.callAppenders(Category.java:203(Compiled Code))
    at org/apache/log4j/Category.forcedLog(Category.java:388(Compiled Code))
    at org/apache/log4j/Category.error(Category.java:302)
    

Environment

  • JBoss Enterprise Application Platform

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content