Cassandra编写基准测试,CPU使用率低(20%)

时间:2015-08-07 10:09:09

标签: amazon-ec2 cassandra cpu datastax cassandra-2.1

我正在Amazon EC2上构建Cassandra 3x m1.large群集。我使用了DataStax Auto-Clustering AMI 2.5.1-pv,以及Cassandra DataStax社区版本2.2.0-1。

在对“生产”数据进行写入基准测试时,似乎群集每秒可以处理大约3k到5k的写入请求,而无需读取负载。 几乎所有时间节点都这样做:

  • system.hints的压缩
  • mykeyspace.mybigtable
  • 的压缩
  • 压缩mybigtable指数

然而,令我担心的是CPU使用率低。所有3个节点的CPU使用率均在17%到24%之间。 CPU使用率是不是太低了?这不是限制我的写入速度吗?对我来说可能是100%。

顺便说一句。如何查看限制(CPU,内存,网络,光盘)的写入性能?

以下是一些统计数据:

netstats

tpstats

top

iostat

编辑:

  • 我正在插入很好地分布在群集
  • 周围的数据
  • 我正在使用一致性等级

3 个答案:

答案 0 :(得分:4)

首先,CPU不是20%。当CPU系统为20%时,用户CPU大约为70%。以下是用户CPU和系统CPU之间的说明:User CPU time vs System CPU time?

其次,没有参数调用的iostat并不是查看光盘使用情况的最佳方式。来自:Basic I/O Monitoring on Linux

  

如果没有指定的间隔,iostat会显示自以来的统计信息   系统出现然后退出,这在我们的案例中没用。

要更全面地了解系统,请使用

  dstat -rcdgilmnps 60

dstat

现在我们清楚地看到了最后一分钟的平均值。 CPU空闲率为1-4%,我们有~340 ios,写入速度为15M。

下一个有用的工具是nodetool cfstats: cfstats

我们可以看到特定表格的某些统计信息。写延迟统计特别有趣,等于1.5ms。

最后,执行trace for write:

id: 12345 -> host NodeAsked:9042, achieved consistency: LocalOne
Sending MUTATION message to /NodeA on NodeAsked[MessagingService-Outgoing-/NodeA] at 0
Sending MUTATION message to /NodeB on NodeAsked[MessagingService-Outgoing-/NodeB] at 0
REQUEST_RESPONSE message received from /NodeA on NodeAsked[MessagingService-Incoming-/NodeA] at 0
Processing response from /NodeA on NodeAsked[SharedPool-Worker-32] at 0
MUTATION message received from /NodeAsked on NodeA[MessagingService-Incoming-/NodeAsked] at 12
Determining replicas for mutation on NodeAsked[SharedPool-Worker-45] at 114
Appending to commitlog on NodeAsked[SharedPool-Worker-45] at 183
Adding to mytable memtable on NodeAsked[SharedPool-Worker-45] at 241
Appending to commitlog on NodeA[SharedPool-Worker-5] at 5360
Adding to mytable memtable on NodeA[SharedPool-Worker-5] at 5437
Enqueuing response to /NodeAsked on NodeA[SharedPool-Worker-5] at 5527
Sending REQUEST_RESPONSE message to /NodeAsked on NodeA[MessagingService-Outgoing-/NodeAsked] at 5739

表明限制我们的是存储速度。在正常写入负载上启用跟踪以查看某些模式时,最好执行几次自发写入。

如果您同意,请投票。

答案 1 :(得分:1)

您的应用程序是否可用于任何地方的可用(开源)基准测试?如果您的应用程序正在执行某些操作,例如串行发送请求,您的吞吐量可能会因延迟(诉讼法)而超出群集的实际限制而受到限制。 CPU应该是写入性能的限制因素,因此20%确实有单线程应用程序可以查看它。

这是一种可以模仿大多数负载的工具cassandra-stress,可以充分利用您的客户。

答案 2 :(得分:0)

这是一致的问题。当您插入数据,并且一致性级别为Quorum时,驱动程序将等待,直到所有节点都响应数据可用,插入时,执行一致性,这将为您提供更好的性能。 至于压实的性能,请参阅以下文章:http://www.datastax.com/dev/blog/ec2-series-doc

写入性能不佳的另一个原因可能是表格设计。如果您没有设置正确的分区键(取决于您的数据),那么您可能会得到很长的行,这在压缩时通常需要更长的时间。 如果您愿意,可以提供表格模型(架构)和数据样本,以便更详细地回答这个问题。

另请注意,C *旨在在商用硬件上运行。它很少使用系统资源到可用处理器功率的全部范围。然而,Cassandra可以 - 在读取时 - 利用尽可能多的内存! 至于写入吞吐量,有一个名为CCM(https://github.com/pcmanus/ccm)的工具可以对您的安装进行基准测试......