我只有一个 amazon EC2 免费套餐实例。它托管两个 Django 站点,目前几乎没有流量,每天只有少量请求。服务器是带有 mod_wsgi 的 apache,apache 配置了 WSGIDaemonProcess,例如
WSGIDaemonProcess mysite.com processes=4 threads=4 display-name=%{GROUP} user=djangoUser group=djangoUser python-path=/srv/mysite:/srv/mysite/venv/lib/python2.7/site-packages
WSGIProcessGroup mysite.com
对于这两个网站来说。这两个网站之前都是在 linode 上托管的,配置和设置都一样,没有任何问题,所以我对遇到问题感到有点惊讶。
当我访问网站时,非常频繁地(超过 50% 的时间)收到一个错误,504 Gateway Time-out
并且访问尝试甚至根本没有在 apache 错误或访问日志中记录,因此很难调试。
我在这里看到过类似的讨论弹性负载平衡的帖子,但这不是我的情况。我不确定如何继续进行路由并解决问题。
以下是发出请求时 top 的任意屏幕截图:
编辑
我最终发现这是一个配置错误的fail2ban
脚本,它会在有限的时间内将我的 IP 添加到 iptables 黑名单中。我的第一个请求可以成功,但后续请求将被 iptables 阻止,直到时间限制到期,从而导致 504 错误。
答案1
EC2 t2.micro 实例可怕。我说了,太可怕了。如果你正在运行一个非交互式应用程序,并且你不介意某项作业的运行时间比应有的时间长 10 倍,那么 t2.micros 可以正常工作。但是,对于任何类型的交互式 Web 应用程序来说,它们都是毫无价值的。
我猜如果你在发生这种情况的期间观察top
,你会看到高百分比的 CPU 窃取和/或 iowait。遗憾的是,你唯一能做的就是升级到更大的实例来解决这个问题。
如果您不需要 AWS 提供的更高级功能,那么就性价比而言,它不是一个很好的解决方案。Linode、DO 和其他 VPS 提供商的性能远胜于类似大小的 EC2 实例。