0

我在服务器上运行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);
4

1 回答 1

2

什么操作系统?Linux?您可能已达到客户端套接字的最大数量的限制,没有无限连接之类的东西。在您的应用程序的某个地方,您没有关闭连接,或者您打开的连接太多。“太多”可能比您想象的要低很多,因为它受到进程可以打开的文件描述符的最大数量的限制。如果您正在运行 Linux,请查看http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

于 2012-06-13T00:32:20.890 回答