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

どのOS?Linux?クライアントソケットの最大数の制限に達している可能性があります。無制限の接続などはありません。アプリのどこかで接続を閉じていないか、開いている接続が多すぎます。「多すぎる」は、プロセスが開くことができるファイル記述子の最大数によって制限されるため、思ったよりもはるかに少ない可能性があります。Linuxを実行している場合は、http: //www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/を参照してください。

于 2012-06-13T00:32:20.890 に答える