サーバーでTomcat7を実行しています(現在は仮想マシンですが、無制限の接続として構成する必要があります)。
SMTPサーバーとfacebookサーバーにも接続しています。私のトラフィックは約 250 ヒット/分です。
djabberd を実行しており、接続ユーザーの平均時間は約数百人です。
時々私は得る:
javax.mail.MessagingException: Could not connect to SMTP host: xxx.xxx.xxx.xxx, port: xxxxx;
nested exception is:
java.net.SocketException: No buffer space available
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at xxxxxxxxxxxxxxxx.controllers.EmailManager.sendEmail(EmailManager.java:151)
または、Facebook サーバーへの接続で同じエラーが発生します。
netstat -n | wc -l
348
Tomcat は acceptCount="1024" 接続を受け入れることができます。
どこを調査すればよいですか?
[更新 1]
メールを送る :
Context envContext = (Context) initContext.lookup("java:/comp/env");
session = (javax.mail.Session) envContext.lookup("mail/emailSession");
MimeMessage message = new MimeMessage(session);
//....
Transport.send(message);
構成 :
<resource-ref>
<description>
JNDI javamail session resource reference
</description>
<res-ref-name>mail/emailSession</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
フェイスブック接続 :
FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
User user = facebookClient.fetchObject("me", User.class);