如何确定AWS Elastic Beanstalk关闭错误的根本原因

时间:2019-07-11 19:17:08

标签: django server amazon-elastic-beanstalk

我在AWS Elastic Beanstalk上托管了一个Django应用。

用户将文档上传到站点。有时,用户上传文档而服务器完全关闭。服务器立即运行500s,脱机大约4分钟,然后神奇地备份了该应用程序并开始运行。

很明显,应用程序发生了一些不堪重负的事情。

我从Elastic Beanstalk获得的唯一信息是以下消息:

Environment health has transitioned from Ok to Severe. 100.0 % of the requests are failing with HTTP 5xx. ELB processes are not healthy on all instances. ELB health is failing or not available for all instances.

然后大约4分钟后:

Environment health has transitioned from Severe to Ok.

我有1个t2.medium EC2实例。我将其设置为“负载平衡”,但是使用“最小1最大1”,因此我没有利用负载平衡功能。

这是我的“健康”标签的屏幕截图:Screenshot of Health tab

如图1所示,我的应用程序在7/10时关闭。我的CPU此时达到峰值,但是我无法想象20%的CPU足以淹没我的服务器。

我如何确定可能导致这些短500错误的原因?我还有其他地方可以找到它的来源吗?我在access_log或error_log中看不到任何有用的信息。我不知道从哪里开始寻找。

1 个答案:

答案 0 :(得分:0)

在不使用负载平衡器的情况下,Elastic Beanstalk遇到了类似的问题。因此,当我遇到这个问题时,我的应用程序简直崩溃了,我需要从头开始重建环境。进一步的搜索显示,问题有时出在EC2内存已超出,这导致弹性beantalk关闭。解决方案是添加一个交换区域(我更喜欢2048MB的交换空间),并防止这些突然的内存超出。

以下是如何在弹性beantalk实例中添加交换区域:

.ebextensions / swap-area.sh:

#!/usr/bin/env bash

SWAPFILE=/var/swapfile
SWAP_MEGABYTES=2048

if [ -f $SWAPFILE ]; then
    echo "$SWAPFILE found, ignoring swap setup..."
    exit;
fi

/bin/dd if=/dev/zero of=$SWAPFILE bs=1M count=$SWAP_MEGABYTES
/bin/chmod 600 $SWAPFILE
/sbin/mkswap $SWAPFILE
/sbin/swapon $SWAPFILE

.ebextensions / 00-swap-area.config:

container_commands:
  00_swap_area:
    command: "bash .ebextensions/swap-area.sh"

然后,在部署之后,您可以在EC2中使用top等命令来检查交换区域。