我在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”,因此我没有利用负载平衡功能。
如图1所示,我的应用程序在7/10时关闭。我的CPU此时达到峰值,但是我无法想象20%的CPU足以淹没我的服务器。
我如何确定可能导致这些短500错误的原因?我还有其他地方可以找到它的来源吗?我在access_log或error_log中看不到任何有用的信息。我不知道从哪里开始寻找。
答案 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
等命令来检查交换区域。