我在对我的应用程序进行压力测试时得到错误list
。
所以我想通过配置来配置[Error] no matching function for call to 'std::list<const AbstractButton*>::insert(std::list<const AbstractButton*>::const_iterator&, PushButton*)'
属性。
我正在使用spring boot来配置mongodb连接。我在我的应用程序中使用@EnableAutoConfiguration,并且我在application.properties文件中只声明了com.mongodb.MongoWaitQueueFullException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 500 has been exceeded.
。
如何使用spring boot配置maxWaitQueueSize
属性?
如何确定spring.data.mongodb.uri=mongodb://user:password@ip:27017
的好价值?
答案 0 :(得分:3)
如果您使用的是MongoDB 3.0+,则可以在 mongouri 中设置waitQueueMultiple
:
spring.data.mongodb.uri=mongodb://user:password@ip:27017/?waitQueueMultiple=10
waitQueueMultiple
是驱动程序将maxPoolSize
值乘以的数字,以提供允许等待连接从池中获得的最大线程数。
如何为maxWaitQueueSize确定一个好的值?
它与MongoDB没有直接关系,但您可以在Hikari github wiki中阅读有关 Pool Sizing 的更多信息。
答案 1 :(得分:1)
您可以通过向MongoTemplate注入MongoOptions对象来实现此目的。
答案 2 :(得分:1)
在com.mongodb.MongoClientURI中,您可以找到可以在MongoClientOption中使用的参数。
if (key.equals("maxpoolsize")) {
builder.connectionsPerHost(Integer.parseInt(value));
} else if (key.equals("minpoolsize")) {
builder.minConnectionsPerHost(Integer.parseInt(value));
} else if (key.equals("maxidletimems")) {
builder.maxConnectionIdleTime(Integer.parseInt(value));
} else if (key.equals("maxlifetimems")) {
builder.maxConnectionLifeTime(Integer.parseInt(value));
} else if (key.equals("waitqueuemultiple")) {
builder.threadsAllowedToBlockForConnectionMultiplier(Integer.parseInt(value));
} else if (key.equals("waitqueuetimeoutms")) {
builder.maxWaitTime(Integer.parseInt(value));
} else if (key.equals("connecttimeoutms")) {
builder.connectTimeout(Integer.parseInt(value));
} else if (key.equals("sockettimeoutms")) {
builder.socketTimeout(Integer.parseInt(value));
} else if (key.equals("autoconnectretry")) {
builder.autoConnectRetry(_parseBoolean(value));
} else if (key.equals("replicaset")) {
builder.requiredReplicaSetName(value);
} else if (key.equals("ssl")) {
if (_parseBoolean(value)) {
builder.socketFactory(SSLSocketFactory.getDefault());
}
}
答案 3 :(得分:0)
此maxQueueSize
限制是在Java客户端源代码中计算的:
https://github.com/mongodb/mongo-java-driver/blob/3.10.x/driver-core/src/main/com/mongodb/connection/ConnectionPoolSettings.java#L273
它是maxConnectionPoolSize
和threadsAllowedToBlockForConnectionMultiplier
的乘积,因此可以通过连接URI中的?maxPoolSize=
和?waitQueueMultiple=
进行修改。
答案 4 :(得分:0)
我正在使用Spring Boot Starter Webflux。此问题也会发生。 我试图添加MongoClientFactoryBean。没用 整个应用程序位于https://github.com/yigubigu/webfluxbenchmark中。我试图测试webflux和原始mvc的性能基准。
@Bean
public MongoClientFactoryBean mongoClientFactoryBean() {
MongoClientFactoryBean factoryBean = new MongoClientFactoryBean();
factoryBean.setHost("localhost");
factoryBean.setPort(27017);
factoryBean.setSingleton(true);
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(1000)
.minConnectionsPerHost(500)
.threadsAllowedToBlockForConnectionMultiplier(10)
.build();
factoryBean.setMongoClientOptions(options);
return factoryBean;
}