我是 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 根 44u IPv6 53620 0t0 TCP ip_of_couch_db (CLOSE_WAIT)
任何帮助将不胜感激。