【问题标题】:NodeJS/Express/Jade App Behaving Oddly On EC2NodeJS/Express/Jade 应用程序在 EC2 上表现异常
【发布时间】:2014-08-10 00:17:27
【问题描述】:

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

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

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

Amazon 支持人员还表示,该实例的 CPU 使用率偶尔会达到 100%,超过 96% 会导致实例失去网络连接。但是,我无法通过调用我的应用程序或从服务器请求图像文件来导致 CPU 峰值,但仍会记录 TCP 错误。

任何尝试的建议将不胜感激。

更新:我仍然有同样的问题,但我通过将相同的应用程序部署到 Bitnami 64 位 Ubuntu 节点 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 配置的问题。

【问题讨论】:

  • 顺便说一句,这里是来自 NodeJS 应用程序的控制台日志:ubuntu@ip-172-31-13-231:~/mmc$ node ./bin/www 打开 CB 连接... 过去的连接... index - SessionID: 991pOoY1mrzo_49cJf5hWmQrHc2xzti7 错误:建立 TCP 连接时出错 GET / 304 2507ms GET /stylesheets/pure-min.css 500 2532ms - 1.36kb ... 剩下的空间被省略了,只是更多的 500s

标签: node.js express amazon-ec2 pug


【解决方案1】:

(我在此帐户上没有足够的声誉来发表评论...)

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

$ wget localhost/stylesheets/pure-min.css

并下载 pure-min.css。

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

您也可以尝试wireshark 来查看请求发生了什么。看起来您在 2500 毫秒尝试获取文件时超时,这意味着提供该文件的任何东西要么永远看不到请求,要么抛出错误。

【讨论】:

    【解决方案2】:

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

    无论如何,对我来说快速简便的解决方案是开设一个免费的 RightScale 帐户并部署他们的 Couchbase Server 模板。完全没有问题,我的 NodeJS 应用程序现在在云中和在本地一样快乐。我内心的强迫症开发者想要继续挖掘,直到我弄清楚是什么小故障导致了这一切,但我的最后期限会议方面说现在是时候继续前进了。 :-)

    感谢您花时间尝试和帮助!

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2014-07-25
      • 2018-04-19
      • 2013-11-11
      • 2013-07-07
      • 1970-01-01
      • 2019-03-30
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多