我们正在尝试优化hazelcast的性能,并且正在运行一个16节点(8核心VM)集群,以使集群中总共有4001个分区,并且每个节点配置了50个操作线程。我们需要提高性能,即提高吞吐量和缩短响应时间,因此我们也在考虑配置hazelcast.operation.generic.thread.count。
1)hazelcast.operation.generic.thread.count和hazelcast.operation.thread.count有什么区别? hazelcast.operation.generic.thread处理什么样的操作?
2)分区数和操作线程数之比约为5:1,我们打算降低该比率,因为我们认为这将提高性能。建议在相同数量的节点上增加节点数或不增加操作线程数?
3)在我们的情况下,是否建议对hazelcast节点进行线性缩放以保持内核数和内存相同?
答案 0 :(得分:2)
如此处所述,http://docs.hazelcast.org/docs/3.10.4/manual/html-single/index.html#partition-aware-operations,hazelcast.operation.thread.count
控制分区感知操作(例如imap.get/put/delete
等)的线程池大小。如果要提高性能这些操作中,您可以修改此属性。此属性的默认值为CPU核心数,在您的情况下为8。
hazelcast.operation.generic.thread.count
控制通用操作的线程池大小。例如iexecutor.execute
等。我相信您对提高这类操作的性能不感兴趣。
重要的一点是,既然您有4001个分区,那么数据大小是多少? Hazelcast建议分区应在50-100 MB之间。 (请检查https://hazelcast.com/resources/hazelcast-deployment-operations-guide/)因此,在您的情况下,我希望您提供200-400 GB的数据。如果没有,则意味着您有太多的小分区。这也会影响性能。
由于每个VM上有8个核心。将操作线程数设置为50不会过多地提高性能,因为集群中有16 * 8 = 124个CPU内核。除非您添加更多的CPU,否则至少在某些时候,仅增加线程数不会提高性能。因此,您应将更多节点添加到群集或增加每个VM的CPU数量。这将极大地影响性能。