NodeJS / Express / Jade App在EC2上表现奇怪

时间:2014-08-08 19:09:09

标签: node.js express amazon-ec2 pug

我有一个NodeJS / Express / Jade应用程序在我的本地Linux环境中运行良好(运行NodeJS的Ubuntu 12.04桌面,与运行Couchbase的Ubuntu 12.04服务器交谈)。我试图将NodeJS应用程序手动部署到EC2上的新Ubuntu 12.04服务器AMI。我的安全组已设置。已设置VM防火墙并测试端口。 NodeJS VM可以与Couchbase VM通信(在启动期间通过控制台日志验证)。两个VM都可以通过其弹性IP访问。对于端口8000上的简单NodeJS“Hello World”服务器,它工作正常。端口3000上的主应用程序存在问题。

1)当我从EC2外部调用应用程序时,layout.jade,样式表和图像的链接记录500错误,但是从另一个EC2实例(Couchbase VM)我可以卷曲图像并接收文件,似乎表明站点路径设置正常。此外,在这种情况下,NodeJS会记录预期的200个结果代码。

2)NodeJS记录错误:建立TCP连接时出错。即使我只是要求来自其他EC2 VM的单个图像文件,也会发生这种情况。

亚马逊支持还表示,该实例偶尔会将峰值记录到100%的CPU使用率,而高于约96%的实例会导致实例丢失网络连接。但是,我无法通过调用我的应用程序或从服务器请求图像文件导致CPU峰值,但仍然记录了TCP错误。

任何有关尝试的建议都将受到高度赞赏。

更新:我仍有同样的问题,但我通过将相同的应用程序部署到Bitnami 64位Ubuntu节点AMI(包括安装),从嫌疑人列表中删除了我对Ubuntu 12.04服务器64位AMI的配置Couchbase SDK +依赖项)。基于Bitnami的实例也会出现同样的问题。因此,问题显然与应用程序识别自己的资源的能力有关......这仍然很奇怪,因为我可以请求相同的资源(图像,css文件)并接收它们,所以Express正在看到它们。我仍然得到TCP连接错误,我无法在日志中解释。

这是在AWS中获取所有500个的layout.jade,但在本地Linux上运行良好:

doctype html
html
  head
    meta(charset='utf-8')
    meta(name='viewport', content='width=device-width, initial-scale=1.0')
    title= title

    link(rel="stylesheet", href="/stylesheets/pure-min.css")
    link(rel="stylesheet", href="/stylesheets/grids-responsive-min.css")
    link(rel='stylesheet', href='/stylesheets/layouts/marketing.css')
    link(rel='stylesheet', href='/stylesheets/layouts/pure-skin-mmc.css')
    link(rel='stylesheet', href='/stylesheets/style.css')
    link(rel='stylesheet', href='/stylesheets/jquery.datepick.css')
    link(href='http://fonts.googleapis.com/css?family=Nunito:400,700,300', rel='stylesheet',     type='text/css')
    link(rel="icon", href="/images/m.png", type="favicon")
    script(type='text/javascript', src='/javascripts/jquery-1.10.2.min.js')
    script(type='text/javascript', src='/javascripts/jquery.validate.js')
    script(type='text/javascript', src='/javascripts/jquery.plugin.js')
    script(type='text/javascript', src='/javascripts/jquery.datepick.js')
    script(type='text/javascript', src='/javascripts/d3.min.js')
    script(type='text/javascript', src='/javascripts/mmc.js')
  body(class="yui3-skin-mmc pure-skin-mmc")
    block content

更新2:我已经能够通过指向EC2 Couchbase服务器实例在本地复制此行为。显然,虽然连接到Couchbase没有导致错误,但与它交谈似乎是一个问题,一旦它出错,应用程序就无法运行。可能这不是应用程序组件的错误,而是由于AWS配置问题。

2 个答案:

答案 0 :(得分:0)

(我在这个帐户上没有足够的声誉来评论......)

500错误代码表示服务器,在这种情况下,它听起来像您的node / express应用程序,有错误。检查stylesheets / pure-min.css上的文件权限和用户/组,并确保可以在本地运行

$ wget localhost/stylesheets/pure-min.css

并下载pure-min.css。

使用提供的信息进行诊断有点困难,但您可以see this question调试HTTP 500错误代码。

您还可以尝试wireshark查看请求中发生的情况。看起来你试图获取文件的时间超过2500毫秒,这意味着无论是服务该文件还是从未看到请求,或者正在抛出错误。

答案 1 :(得分:0)

问题原来是Couchbase服务器的一些连接问题。会话写入失败后,Express尝试读取文件的其余尝试也会失败。显然,AWS的Couchbase服务器AMI的设置与我本地的Ubuntu相比有一些特性。

无论如何,对我来说,快速简便的解决方案是打开免费的RightScale帐户并部署他们的Couchbase服务器模板。根本没有任何问题,我的NodeJS应用程序现在在云端就像在本地一样快乐。我的OCD开发人员希望继续挖掘,直到我找出导致所有这一切的小故障,但我的截止日期会议方面说现在是时候继续了。 : - )

感谢您抽出宝贵的时间尝试并提供帮助!