我只有一个亚马逊EC2免费层实例。 它承载了两个Django站点,目前几乎没有stream量,每天几乎没有任何请求。 服务器是mod_wsgi的apache,而apache是使用WSGIDaemonProcessconfiguration的
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上用相同的configuration和设置没有问题,所以我有点惊讶有问题。
访问这些站点时非常频繁(超过50%的时间),我得到一个504 Gateway Time-out并且访问尝试甚至不会在apache错误或访问日志中注册,因此很难debugging。
我在这里看到类似的线程讨论弹性负载平衡,但是这不是我的情况。 我不知道如何着手解决问题。
下面是一个给定时间的请求的顶部arbritrary屏幕截图:
编辑
我最终发现这是一个错误configuration的fail2ban脚本,它在有限的时间内将我的ip添加到iptables黑名单。 我的第一个请求将工作,但随后的请求将被iptables阻止,直到时限到期,导致504s。
EC2 t2.micro实例是可怕的 。 在那里,我说了。 可怕。 如果您运行的是非交互式应用程序,并且您不介意某个作业运行的时间比应该多10倍,那么t2.micros就可以正常工作。 对于任何types的交互式Web应用程序,它们都是毫无价值的。
我的猜测是,如果在发生这种情况的时候,你会看到最高的CPU,你会看到很高比例的CPU和/或iowait。 不幸的是,你可以做的唯一的事情就是升级到一个更大的实例。
如果您不需要AWS提供的更高级的function,那么就性能价格而言,这不是一个好的解决scheme。 Linode,DO和其他VPS提供商轻松地执行类似规模的EC2实例。