EC2,内存不足崩溃

EC2, out of memory crash

我无法通过 ssh 连接到我的 ec2 实例,不得不重新启动。

日志显示以下消息 (journalctl -b -2 -e)

Jan 12 02:08:03 ip-172-31-20-233 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/docker/654b69f95e8c8fc9dde5cf1b6554dfa2ebbd6554bee760c6de410186a3bdfe3d\
,task=java,pid=27444,uid=1000
Jan 12 02:08:03 ip-172-31-20-233 kernel: Out of memory: Killed process 27444 (java) total-vm:8005004kB, anon-rss:4744424kB, file-rss:177124kB, shmem-rss:0kB, UID:1000 pgtables:10620kB oom_score_adj:0
Jan 12 02:08:03 ip-172-31-20-233 kernel: oom_reaper: reaped process 27444 (java), now anon-rss:4575556kB, file-rss:181220kB, shmem-rss:0kB

所以我猜我的系统是因为内存不足而崩溃了..

导致 oom 的进程是 elasticsearch 服务器。

我有哪些选择可以防止将来发生此类崩溃?

我在这台机器上 运行 postgresql 和 elasticsearch 用于 Web 服务。

我正在使用 t3-large

  1. 我可以考虑将elasticsearch分离到它自己的服务器..(可能还有多个ES节点,这意味着多个EC2用于elasticsearch服务)

  2. 我能上去t3-xlarge

  3. 我可以切换到更多以内存为中心的实例吗? R5类型实例?

还有其他选择吗?
我有一种预感,#1 可能是最值得推荐的思考方式。我对吗?

如果它是一个生产系统,或者如果你正在尝试构建一个,你绝对应该 运行 它在集群中,其中 ES 的不同节点具有不同的角色(数据注释、主节点、负载平衡器)等.

您还应该注意要推送、检索、编制索引的数据量,并相应地选择您的 AWS 硬件和内存。