来自官方BoneCP文档:http://jolbox.com/index.html?page=http://jolbox.com/configuration.html
partitionCount为了减少锁争用从而提高性能,每个传入连接请求从具有线程关联的池(即poolthreadId % partition_count )中选择一个连接。当你有很多短命线程时,这个数字越高,你的表现就越好。超过某个阈值后,这些池的维护将开始对性能产生负面影响(仅在分区上的连接开始耗尽时)。 默认值: 2,最小值: 1,建议: 3-4 (但非常特定于应用程序)
但它不是那么清楚,也没有一个很好的例子。我正在运行一个普通的web服务,与0-500同时线程。这是一个很好的价值,为什么?
发布于 2013-01-21 19:08:25
因此,在内部BoneCP有连接池的分区计数数。每次线程尝试使用连接时,它都会接受thread.getId() % partitionCount
,并使用来自该池的连接。而且您的连接总数将有maxConnectionsPerPartition * partitionCount
数。
为什么这会对业绩产生积极的影响?为了不同时在同一个连接上使用两个线程(显然这是不好的),BoneCP必须使用一个锁来释放或获取连接。但是在同一时间,所有其他想要这样做的线程都必须等待那个锁。因此,在某种意义上,您可以并行地释放或获取partitionCount
数量的连接。
要把它设置成什么号码?我认为#的核心是一个好的开始,因为你不会有更多的工作发生在并行方式。但除此之外,还可以尝试预测有多少线程在争夺连接、测量和重复。
顺便说一句,世界上大多数人已经依赖c3po十多年了,而这实际上是将分区数设置为1,所以你不会觉得它很糟糕。
https://stackoverflow.com/questions/14445129
复制相似问题