我知道有许多卡桑德拉和OOM相关的问题,但这与他们有点不同。
我们公司有一个测试环境的产品,运行在卡桑德拉3.9,在测试阶段。这个环境运行在一个节点上,有4个vCPU和8GB的RAM。在5个月的时间里,这个环境被定期地输入数据,每天大约40k行,没有一个OOM。
几周前,我们决定加载更多数据以查看测试环境的限制,并在几个小时内插入了大约500 K行。因此,卡桑德拉因OOM而坠毁。在此之后,我们删除了500 k行,应用程序又恢复了每天40k行的输入。
但是在我们执行了负载测试之后,尽管我们恢复了我们的更改,我们开始定期地遇到OOMs和VM崩溃,比如一周两次。
我的问题是,有人知道卡桑德拉为什么会那样做吗?似乎卡桑德拉已经扩大了它的极限,需要比过去更多的记忆。
更新
数据模型中有几个表,但这是其中的主要两个表,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(所以没有墓碑),而且它是一个编写密集型系统。
发布于 2017-12-09 23:51:51
这些信息不足以弄清楚OOM造成了什么。通常,您应该从您的数据模型开始,然后是jvm.options和cassandra.yaml,然后找出发生了什么。与缺省值相比有什么不同?
另外,从3.9开始,就像你的生活取决于它一样。有一个可怕的错误,打开的文件句柄,一旦你开始修复,它几乎每次崩溃。
我的建议是更新到3.11并使用默认配置,然后查看它的行为。
https://stackoverflow.com/questions/47709281
复制相似问题