卡桑德拉OOM崩溃

时间:2017-12-08 07:01:10

标签: performance cassandra out-of-memory bigdata cassandra-3.0

我知道Cassandra和OOM有很多相关的问题,但这与它们有点不同。

我们公司的产品测试环境在Cassandra 3.9上运行,处于测试阶段。此环境在单个节点上运行,具有4个vCPU和8GB RAM。 5个月以来,这个环境定期提供数据,一天大约4万行,没有一个OOM。

几个星期前,我们决定加载更多数据以查看测试环境的限制,并在几个小时内插入约500k行。结果Cassandra因OOM而坠毁。之后,我们删除了500k行,恢复应用程序再次每天输入40k行。

但是在我们执行负载测试后,虽然我们还原了我们的更改,但我们开始经常遇到OOM和VM崩溃,比如每周2次。

我的问题是,有人知道卡桑德拉为什么会这样做?似乎Cassandra已经扩展了它的极限并且需要比以前更多的内存。

更新

数据模型中有几个表,但这些是主要的两个表,80%-90%的读/写:

CREATE TABLE global_events (
    customer_id bigint,
    start_dt timestamp,
    client_id text,
    connected boolean,
    site_id bigint,
    exit boolean,
    is_new boolean,
    is_visitor boolean,
    last_seen timestamp,
    PRIMARY KEY (customer_id, start_dt, client_id)
);
CREATE INDEX global_events_connected_idx ON global_events (connected);
CREATE INDEX global_events_site_id_idx ON global_events (site_id);
CREATE INDEX global_events_exit_idx ON global_events (exit);
CREATE INDEX global_events_is_new_idx ON global_events (is_new);
CREATE INDEX global_events_is_visitor_idx ON global_events (is_visitor);

CREATE TABLE local_events (
    customer_id bigint,
    local_id bigint,
    start_dt timestamp,
    client_id text,
    connected boolean,
    exit boolean,
    is_new boolean,
    is_visitor boolean,
    last_seen timestamp,
    PRIMARY KEY ((customer_id, local_id), start_dt, client_id)
);
CREATE INDEX local_events_connected_idx ON local_events (connected);
CREATE INDEX local_events_is_new_idx ON local_events (is_new);
CREATE INDEX local_events_is_visitor_idx ON local_events (is_visitor);

这些表中没有TTL(因此没有墓碑),而且它是一个写密集型系统。

1 个答案:

答案 0 :(得分:0)

这并不足以弄清楚OOM造成了什么。通常你应该从你的数据模型开始,然后是jvm.options和cassandra.yaml,并弄清楚最新情况。与默认值相比有什么不同?

另一方面,从3.9开始,就像你的生活取决于它一样。一旦你开始修复就会有一个很糟糕的错误,打开文件句柄,几乎每次都会崩溃。

我的建议是更新到3.11并使用默认配置,然后查看它的行为。