场景
hugegraph 使用一段时间后,与 cassandra 的 tcp 连接一直在增加。
使用 nestat -ano |Grep 9042, 可以达到1000左右。
慢慢的就会抛出, pool busy exceptin
cassandra 连接池的使用
hugegraph 使用线程级别复用 session。
每个session 使用默认的连接池配置,也就是一个 session- > 1 pool-> 1 host
每个pool 里面 默认只开一个 connection。
所以按道理来说, 有多少线程,就有多少个 session,也就是多少个 connection。
那么拿到有1000个线程?
hugegraph 的线程池
有两个, 1 一个是 rest server,一个是 gremlin-server
两个都是使用 fixHtreadPool,并且coresize = maxsize。
也就是说如果没有意外,这两个线程池都是固定不变的。
默认是 2cpu。
也就是最多4 cpu 个线程,推导出 最多 4* cpu 个 session才对。
观察到的现象与我们连接的数据不一样,不知道为什么?
我们通过jstack 看到 有大量 cluster-1-12 ,按到里应该没有这么多才对的。
应该是 某个隐蔽的地方存在线程泄漏,或者是 消费,新建。
问题复现
我们对于每个请求都新开一个session,在压测的时候,就能够快速的进入 poolbusyexception。
也就是说无法获得新的连接,所以还是怀疑, 建立了太多的session导致了问题。
当我把session复用起来,一个keyspace 一个session的时候再也没出现过这个问题。
网友评论