Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 cassandra可以在m1.xlarge实例上处理多少负载?_Amazon Ec2_Garbage Collection_Cassandra - Fatal编程技术网

Amazon ec2 cassandra可以在m1.xlarge实例上处理多少负载?

Amazon ec2 cassandra可以在m1.xlarge实例上处理多少负载?,amazon-ec2,garbage-collection,cassandra,Amazon Ec2,Garbage Collection,Cassandra,我在EC2 m1.xlarge的3个实例上设置了Cassandra(1.2.10)集群的3个节点 基于默认配置,包括以下准则: datastax_集群_ami_2.4 没有使用EBS,而是在星历上袭击了0辆XF 在单独的磁盘上提交日志 RF=3 6GB堆,200MB新大小(也使用更大的新大小/堆值进行测试) 增强的limits.conf 当每秒写入次数500次时,群集只能工作几个小时。之后,由于CPU过载(主要是GC+压缩),它似乎无法响应 节点仍处于运行状态,但其负载巨大,日志中充满了GC

我在EC2 m1.xlarge的3个实例上设置了Cassandra(1.2.10)集群的3个节点

基于默认配置,包括以下准则:

  • datastax_集群_ami_2.4
  • 没有使用EBS,而是在星历上袭击了0辆XF
  • 在单独的磁盘上提交日志
  • RF=3
  • 6GB堆,200MB新大小(也使用更大的新大小/堆值进行测试)
  • 增强的limits.conf
当每秒写入次数500次时,群集只能工作几个小时。之后,由于CPU过载(主要是GC+压缩),它似乎无法响应

节点仍处于运行状态,但其负载巨大,日志中充满了GC信息和消息,如:

ERROR [Native-Transport-Requests:186] 2013-12-10 18:38:12,412 ErrorMessage.java (line 210) Unexpected exception during request java.io.IOException: Broken pipe
nodetool在每个节点上显示许多缺失的突变:

Message type           Dropped
RANGE_SLICE                  0
READ_REPAIR                  7
BINARY                       0
READ                         2
MUTATION               4072827
_TRACE                       0
REQUEST_RESPONSE          1769

对于m1.xlarge的3节点集群,500 wps是否太多,我应该添加节点?或者是否有可能以某种方式进一步调整GC使用m1.XLAGE的3个节点,您能承受多大的负载?您的GC配置是什么?

Cassandra完全能够在单个节点上每秒处理数万次小写入。我刚在笔记本电脑上查看,在cassandra 1.2上,我每秒收到大约29000条来自cassandra压力的信息。因此,即使对于单个节点,每秒500次写入也不是一个令人印象深刻的数字

但是,请注意,数据刷新到磁盘的速度也有限制,您肯定不希望传入的数据速率接近HDD的物理性能。因此,如果这些写入足够大,每秒500次写入可能太多

那么首先,写操作的平均大小是多少?您的复制因素是什么?将写操作数乘以复制因子和平均写操作大小,您将大致了解集群所需的写吞吐量。但对于其他I/O相关任务(如压缩),您应该采取一些安全余量。互联网上有各种各样的基准测试告诉我们,单个m1.xlarge实例应该能够写20 MB/s到100 MB/s之间的任何地方

如果您的群集具有足够的I/O吞吐量(例如,比需要的多3倍),但您发现OOM问题,则应尝试:

  • 减少memtable_total_space_mb(这将导致C*刷新较小的memtable,更频繁地,更早地释放堆)
  • 将write_request_timeout降低到2秒,而不是10秒(如果您有大量写入,您不希望在驻留在堆上的传入队列中保留太多写入)
  • 关闭行缓存(如果启用过)
  • 密钥缓存的较小大小
  • 考虑升级到Cassandra 2.0,它将大量内容移出了堆(例如bloom过滤器和索引摘要);如果只是在每个节点上存储大量数据,这一点尤其重要
  • 添加更多硬盘并设置多个数据目录,以提高刷新性能
  • 设定更大的新一代规模;对于6GB堆,我通常将其设置为800M左右,以避免对终身发电机造成压力
  • 如果确定memtable刷新滞后,请确保启用了sstable压缩—这将减少物理上保存到磁盘的数据量,但会增加CPU周期

  • 就我们的I/O速率而言,性能非常糟糕(即使是短暂的存储),所以我们最终放弃了它。我不认为我们在从S3读取/写入数据并将其转储到C*(尽管它是实时的)时将大量数据拉入其中。可能有一个参数可以提高我们的性能,但最终我们决定不浪费时间。别误会我的意思,这可能在很多情况下都能奏效,有些人是超级粉丝,但这对我们没用。这完全是我们的主观意见。我进一步调查了集群。我在它上运行了许多压力测试(包括连接到datastax java驱动程序的压力测试),看起来集群本身能够在测试期间每秒管理大约5K次写操作。它也表现稳定。现在我认为问题在于我们拥有的特定数据结构,或者可能是驱动程序的使用?复合密钥是否可能有这样的性能损失?还有什么重要的吗?@Rico是哪个版本?也许你被虫子击中了?例如,就在最近,我对一个早期的C*2.0版本进行了压力测试,获得了糟糕的性能,然后意识到我没有使用最新的稳定版本-升级版,它工作得很好。@Bartek写的平均大小是多少?您是否使用准备好的声明?您的负载平衡策略是什么?集群是否平衡良好,写操作是否分布良好?system.log中是否存在任何警告/错误?@PiotrKolaczkowski平均写入量约为4K。它具有由UUID和时间戳构建的复合密钥。我们使用的是事先准备好的声明。我们使用每个节点设置256个令牌的VNode。集群平衡良好,写操作分布均匀。除非情况非常糟糕,否则system.log中不会出现错误/警告。然后是大量的GC跟踪,最后是:ERROR[Native Transport Requests:100]2013-12-12 13:36:40903 ErrorMessage.java(第210行)请求过程中出现意外异常java.io.IOException:break pipe(…)