Linux套接字中的EKTORP和Spring尚未发布

时间:2013-06-13 15:19:02

标签: spring sockets ektorp

我是ektorp和spring的新手。所以请不要向我扔石头:)。我们有现成的应用程序用php / couchdb编写,现在将其移动到java / spring / couchdb。我已经按照文档如何配置和编写代码。当我运行junit测试代码工作正常,但在暂存环境(Debian)中我看到套接字没有被释放,这最终导致了太多的打开文件错误。 DBConnection对象注释为存储库。我没有使用ektorp spring而且没有通过context.xml配置ektorp

以下是配置代码

private StdCouchDbConnector couchDbConnectior;

public CouchDbConnector getConnection() {
        if (null != couchDbConnectior) {
            return couchDbConnectior;
        } else {
            return createConnection();
        }
}

private CouchDbConnector createConnection() {
        StdCouchDbInstance dbInstance = null;
        if (null != host || !host.equalsIgnoreCase("null")) {
            try {
                HttpClient httpClient = new StdHttpClient.Builder()
                        .url(host)
                        .port(new Integer(port))
                        .username(key1)
                        .password(key2)
                        .maxConnections(new Integer(maxConnections))
                        .connectionTimeout(100000)
                        .socketTimeout(100000)
                        .cleanupIdleConnections(true)
                        .build();
                dbInstance = new StdCouchDbInstance(httpClient);
            } catch (MalformedURLException ex) {
                log.error("Cannot create CouchDB connection", ex);
            }
        }
        if (null != dbInstance) {
            return dbInstance.createConnector(dataBaseName, false);
        } else {
            return null;
        }
    }

正如我前面提到的,连接本身工作正常。问题是当我在tomcat中运行代码时,在阶段环境中套接字没有被释放,我看到很多打开的套接字连接状态为CLOSE_WAIT,我知道它们被卡住了,因为进程在午夜运行,我在上午11点检查了系统。 这是我在运行lsof connand时看到的内容

java 604 root 44u IPv6 53620 0t0 TCP ip_of_couch_db(CLOSE_WAIT)

任何帮助将不胜感激。

0 个答案:

没有答案