我有一个Java应用程序,它使用大约3000个可重用的线程,一直在运行并从队列中处理项目。我使用MongoDB作为我的数据存储,每次运行它时,它都可以完美地工作约40分钟左右,之后MongoDB对象开始返回查询的Nullpointer异常。起初我怀疑可能是由于连接丢失,但正如您在Google监控图中看到的那样,连接仍然处于打开状态,但Mongo查询数量显着减少。这里是否有我遗漏的任何事项?
我MongoDB类像这样:
我MongoDB类像这样:
public class MongoDB {
private static MongoClient mongoClient;
private static MongoClient initMongoClient() {
ServerAddress server = new ServerAddress("X.X.X.X");
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.threadsAllowedToBlockForConnectionMultiplier(50000);
builder.socketKeepAlive(true);
builder.connectionsPerHost(10000);
builder.minConnectionsPerHost(2500);
MongoClientOptions options = builder.build();
MongoClient mc = new MongoClient(server, options);
mongoClient = mc;
return mc;
}
public static MongoClient getMongoClient() {
if(mongoClient == null) {
mongoClient = initMongoClient();
}
return mongoClient;
}
public static DB getDb() {
DB db;
MongoClient mc;
try {
mc = getMongoClient();
mc.getDatabaseNames();
} catch(MongoException e) {
mc = initMongoClient();
}
db = mc.getDB("tina");
return db;
}
}