Cassandra 卡桑德拉cpu使用率高

Cassandra 卡桑德拉cpu使用率高,cassandra,Cassandra,我正在运行一个六节点集群 有一个节点的行为与cpu使用率高的其他节点不同 我发现system.log中的WARN显示查询了很多墓碑单元格 同时,通过使用jvm工具,展示了一些cpu使用率高的sharedpool工作者 供参考,使用以下工具介绍: 更新 我看过很多墓碑上的文字,也许这与高cpu使用率有关? 我认为它与数据模型设计有关 CREATE TABLE ecoboost_visit.visit ( enterprise_id int, id text, app_name te

我正在运行一个六节点集群

有一个节点的行为与cpu使用率高的其他节点不同

我发现system.log中的WARN显示查询了很多墓碑单元格

同时,通过使用jvm工具,展示了一些cpu使用率高的sharedpool工作者

供参考,使用以下工具介绍:


更新 我看过很多墓碑上的文字,也许这与高cpu使用率有关? 我认为它与数据模型设计有关

CREATE TABLE ecoboost_visit.visit (
enterprise_id int,
id text,
app_name text,
app_version text,
appkey text,
browser_family text,
browser_version text,
browser_version_string text,
city text,
country text,
created_on timestamp,
device_brand text,
device_family text,
device_model text,
device_token text,
first_visit_page_domain_by_session text,
first_visit_page_source_by_session text,
first_visit_page_source_domain_by_session text,
first_visit_page_source_keyword_by_session text,
first_visit_page_source_url_by_session text,
first_visit_page_title_by_session text,
first_visit_page_url_by_session text,
ip text,
isp text,
net_type text,
os_category text,
os_family text,
os_language text,
os_timezone text,
os_version text,
os_version_string text,
platform text,
province text,
resolution text,
sdk_image_url text,
sdk_name text,
sdk_source text,
sdk_version text,
track_id text,
ua_string text,
PRIMARY KEY (enterprise_id, id)
) WITH CLUSTERING ORDER BY (id ASC)
AND bloom_filter_fp_chance = 0.1
AND caching = '{"keys":"ALL", "rows_per_partition":"0"}'
AND comment = ''
AND compaction = {'sstable_size_in_mb': '64', 'tombstone_threshold': '.2',     'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
AND compression = {'sstable_compression':   'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
我用这个表来跟踪访问日志,每个
ent
表示一个网站

这是GC信息

INFO  [Service Thread] 2016-04-02 07:38:16,554 GCInspector.java:278 -    ConcurrentMarkSweep GC in 225ms.  CMS Old Gen: 5640515840 -> 2868732344; Par Eden Space: 16464 -> 418333648; Par Survivor Space: 5774976 -> 3817304
INFO  [Service Thread] 2016-04-03 07:08:27,224 GCInspector.java:278 - ConcurrentMarkSweep GC in 209ms.  CMS Old Gen: 5637562768 -> 2887903056; Par Eden Space: 6704 -> 2306495144;
INFO  [Service Thread] 2016-04-06 06:34:18,908 GCInspector.java:278 - ConcurrentMarkSweep GC in 225ms.  CMS Old Gen: 5642735152 -> 3061550896; Par Eden Space: 8547280 -> 644954400; Par Survivor Space: 6253328 -> 2236696
INFO  [Service Thread] 2016-04-07 06:03:13,598 GCInspector.java:278 - ConcurrentMarkSweep GC in 221ms.  CMS Old Gen: 5638070792 -> 3173030976; Par Eden Space: 670736 -> 683574904; Par Survivor Space: 2089552 -> 2448848
INFO  [Service Thread] 2016-04-12 10:38:15,825 GCInspector.java:278 - ParNew GC in 7860ms.  CMS Old Gen: 5331043280 -> 5331554336; Par Eden Space: 2577006592 -> 0; Par Survivor Space: 2984416 -> 25906264

我会检查你的内核版本。您可能遇到了所描述的java futex_wait错误

现在还不完全清楚发生了什么-查看
nodetool tpstats
的输出可以让我们了解您当前运行的工作负载(读重?写重?计数器?)。如果没有这些,我们可以猜测:

如果有一个节点的行为错误为6,则可能所有客户端都以某种方式固定在该节点上。如果RF=3是典型的情况,那么可能会有3个节点行为不正常(表示数据热点)。您的键空间的
复制系数是多少

你有很多专栏。仅仅指指点点说“这是错误的”是不够的,但这是公平的。如果一次更新一列,则该模式可能有意义。如果您总是一次写入一整行,那么如果您自己将数据序列化为JSON或类似blob,并将其作为不透明列写入,则可能会获得更好的性能

使用0.2的
tombstone\u threshold
,如果要覆盖,可能会非常频繁地重新压缩sstables。鉴于您的墓碑消息,我怀疑您正在创建大量墓碑-您的节点正忙吗?
nodetool compactionstats
说什么?如果您正忙于压缩,可以通过调节压缩吞吐量或减少并发\u压缩程序的数量来对此进行调整

对于5.9GB的压缩分区和2.6GB/s的堆分配,您可能会看到这样的情况。这样做会产生大量java垃圾—如果您使用的是ParNew/CMS,在填充+升级到旧版本时,您经常会出现新一代,并且会看到非常频繁的ParNew时间,然后根据您拥有的空间大小,当您在old gen中收集垃圾时,您可能会填充old gen并看到很长的收集,以便为后续读取中的下一组提升垃圾腾出空间


在3.6中,您可能会看到在CASSANDRA-9754完成之前是临时的

谢谢,我已经检查并更新了内核,但似乎不相关。我上传了更多图片。我的复制系数是system.log info[Service Thread]2016-04-12 10:38:15825 GCInspector中的3gc信息。java:278-7860ms中的ParNew GC。CMS旧代:5331043280->5331554336;标准伊登空间:2577006592~0;PAR幸存者空间:2984416 -2590626A 7.8秒PARNEX是一个非常清楚的迹象表明你在垃圾收集方面处于一个不好的位置。您可能需要考虑提高新一代的大小(或者甚至新的Gen和MAX堆大小),或者修复数据模型——您的分区太大,并且在2 .x中还有一些不太好的行为。X还有一些非常有用的GC调整思路。Al的2.1调优指南中介绍了许多内容。