我在我的linux实例上看到了cassandra java进程,它使用~38gb的内存并在其下显示~700个线程。什么时候通过python或java与数据库建立连接?他们成了一个线程……
即使您有10000个连接的客户端,连接也会转到netty服务,该服务的线程数应等于核心数。然而,Cassandra最初设计有一个分阶段事件驱动架构(SEDA),它位于异步和完全线程模型之间。它创建线程池来处理不同类型的任务。这确实意味着,根据您的yaml中的配置,可能会有很多线程。例如,默认情况下,本机传输池最多有128个线程,32个并发读取器,32个并发写入器,32个计数器突变等,但如果您的集群针对ssds进行了调整,则这些线程可能会更高。记住,有许多这些池使用共享池(显示为SharedWorkers)与SEPExecutor(单执行程序池)。因此,使用尖峰可能会创建许多但是线程可能不会经常使用。
nodetool tpstats 将为您提供有关不同池的详细信息以及有多少池的详细信息,这些池可以帮助确定哪些线程以及线程是否正在使用。如果没有,那么你也可以使用 jstack (使用与cassandra进程相同的用户)来转储跟踪。如果通过theres工具看起来太多了 https://fastthread.io/ 使观看更容易。
nodetool tpstats
jstack
对于什么是值得32GB的内存和700线程听起来不是一个问题。