我在我的linux实例上看到cassandra java进程,它使用约38gb的内存并在其下显示约700个线程。
更新- @chris-这是tpstats的输出
Tax
答案 0 :(得分:1)
即使您有10000个已连接的客户端,连接也会转到Netty服务,该服务的线程数应等于内核数。但是,Cassandra最初是采用阶段事件驱动的体系结构(SEDA)设计的,该体系结构介于异步模型和全线程模型之间。它创建线程池以处理不同类型的任务。这确实意味着,但是根据您Yaml中的配置,可能会有很多线程。例如,默认情况下,本机传输池最多有128个线程,32个并发读取器,32个并发写入器,32个计数器突变等,但是如果您的集群针对ssds进行了调整,则这些线程可能会更高。请记住,这些池中有许多使用与SEPExecutor(单个执行程序池)共享的池(显示为SharedWorkers)。因此,随着尖峰的产生,可能会创建许多线程,但是可能不会经常使用线程。
nodetool tpstats
将为您提供有关不同池的详细信息以及有多少活动池可以帮助识别哪些线程以及是否正在使用线程。如果不存在,则还可以使用jstack
(与cassandra进程使用相同的用户)来转储跟踪。如果无法浏览https://fastthread.io/之类的工具,可以使查看变得更加容易。
对于值得32GB的内存和700个线程的内存来说,这听起来并不是一个问题。