Problem: email thread is hanging at socket read
Today we found a email problem in production, all of the mail threads (3 threads) are hanging/sitting/blocking at same point
I search the "javax.mail.Transport.send" and "com.sun.mail.smtp.SMTPTransport.readServerResponse", got no hits.
while my colleague get answer from internet.
http://jira.sakaiproject.org/browse/KNL-96
http://forums.sun.com/thread.jspa?forumID=43&threadID=474662
"I have a servlet which uses JavaMail to send out emails to a smtp server. During our peak access hours, we have many requests to send out emails, after a while my application went into CLOSE WAIT accumulation and finally my application server stops processing."
Solution
"JavaMail send() method is synchronous call. If the smtp server does not return a response JavaMail may wait forever.
Therefore you should set the smtp timeout properties:
mail.smtp.connectiontimeout
mail.smtp.timeout"
My postmortem
1. try different search keywords in problem description : blocking, handing, never return. setting...
2. try different API:"javax.mail.Transport.send
"javax.mail.Transport.send" is abstract API.
"com.sun.mail.smtp.SMTPTransport.readServerResponse" is bottom.
Try a middle point: com.sun.mail.smtp.SMTPTransport.connect
3.We do not get the root cause: why 'CLOSE_WAIT ' accumulation.
It means one peer of socket connection is closed, while the other do not.
![]()
本文记录了一次生产环境中邮件发送线程挂起的问题排查过程。问题表现为多个邮件发送线程在Socket读取阶段阻塞。通过互联网搜索并调整JavaMail的SMTP超时设置,最终解决了此问题。
7943

被折叠的 条评论
为什么被折叠?



