node.js - 为什么未检测到 Cloudfoundry (Bluemix) 应用程序崩溃

标签 node.js cloud-foundry ibm-cloud recovery

你好,

我有一个在使用 Cloudfoundry 的 Bluemix 上运行的 node.js 应用程序。当我的应用程序检测到 fatal error 时,它会停止接受连接并在日志记录完成后以退出代码 1 退出。

我在想,Bluemix 会检测到这一点并尝试重新启动应用程序,但目前它没有在控制台中显示任何问题,只是负载均衡器返回 503 状态代码。

这是 cf 日志返回的输出

TIMESTAMP [App/0]      OUT FATAL ERROR WITH STACKTRACE
TIMESTAMP [App/0]      ERR npm ERR! Linux 3.13.0-39-generic
TIMESTAMP [App/0]      ERR npm ERR! argv "/home/vcap/app/vendor/node/bin/node" "/home/vcap/app/vendor/node/bin/npm" "start"
TIMESTAMP [App/0]      ERR npm ERR! node v0.12.7
TIMESTAMP [App/0]      ERR npm ERR! npm  v2.11.3
TIMESTAMP [App/0]      ERR npm ERR! code ELIFECYCLE
TIMESTAMP [App/0]      ERR npm ERR! myapp@0.1.0 start: `node app/app.js`
TIMESTAMP [App/0]      ERR npm ERR! Exit status 1
TIMESTAMP [App/0]      ERR npm ERR! 
TIMESTAMP [App/0]      ERR npm ERR! Failed at the myapp@0.1.0 start script 'node app/app.js'.
TIMESTAMP [App/0]      ERR npm ERR! This is most likely a problem with the myapp package,
TIMESTAMP [App/0]      ERR npm ERR! not with npm itself.
TIMESTAMP [App/0]      ERR npm ERR! Tell the author that this fails on your system:
TIMESTAMP [App/0]      ERR npm ERR!     node app/app.js
TIMESTAMP [App/0]      ERR npm ERR! You can get their info via:
TIMESTAMP [App/0]      ERR npm ERR!     npm owner ls myapp
TIMESTAMP [App/0]      ERR npm ERR! There is likely additional logging output above.
TIMESTAMP [App/0]      ERR npm ERR! Please include the following file with any support request:
TIMESTAMP [App/0]      ERR npm ERR!     /home/vcap/app/npm-debug.log
TIMESTAMP [RTR/2]      OUT myapp.bluemix.net - [TIMESTAMP] "GET /myroute HTTP/1.1" 503 0 89 "-" "-" PUBLICIP:41145 x_forwarded_for:"IP" vcap_request_id:requestID response_time:0.002571320 app_id:myappId
TIMESTAMP [App/0]      OUT TIMESTAMP http: proxy error: dial tcp 127.0.0.1:61872: connection refused
TIMESTAMP [App/0]      OUT TIMESTAMP myapp.bluemix.net - [TIMESTAMP] GET /myroute HTTP/1.1 - 467.106us
TIMESTAMP [App/0]      OUT TIMESTAMP http: proxy error: dial tcp 127.0.0.1:61872: connection refused
TIMESTAMP [App/0]      OUT TIMESTAMP myapp.bluemix.net - [TIMESTAMP] GET /doc HTTP/1.1 - 289.874us
TIMESTAMP [RTR/0]      OUT TIMESTAMP - [TIMESTAMP] "GET /myroute HTTP/1.1" 503 0 89 "https://myapp.bluemix.net" (https://myapp.bluemix.net)  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" PUBLICIP:39419 x_forwarded_for:"IP" vcap_request_id:REQUESTID response_time:0.001849779 app_id:APP_ID
TIMESTAMP [App/0]      OUT TIMESTAMP http: proxy error: dial tcp 127.0.0.1:61872: connection refused
TIMESTAMP [App/0]      OUT TIMESTAMP TIMESTAMP - [TIMESTAMP] GET /static/swagger/images/favicon-16x16.png HTTP/1.1 - 1.150624ms
TIMESTAMP [RTR/1]      OUT myapp.bluemix.net - [TIMESTAMP] "GET /static/swagger/images/favicon-16x16.png HTTP/1.1" 503 0 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" PUBLICIP:38110 x_forwarded_for:"IP" vcap_request_id:REQUESTID response_time:0.004067078 app_id:APPID

知道这里出了什么问题吗?我已经通过运行“npm start; echo $?”在本地对其进行了测试。它返回 1,因此退出代码应该有效。

编辑:

list .yml:

applications:
- disk_quota: 1024M
  host: myapp
  name: myapp
  path: .
  domain: mybluemix.net
  instances: 1
  memory: 512M
  env:
    BLUEMIX_APP_MGMT_ENABLE: devconsole+shell

package.json 看起来像:

{
    "name": "myApp",
    "description": "MyDescription",
    "version": "0.1.0",
    "engines" : { "node" : ">=0.12.7" },
    "dependencies": {
        "express": "4.13.3",
        "express-session": "1.11.3",
    ...
    },
    "devDependencies": {
        "grunt": "0.4.5",
        "mocha": "2.2.5",
        ...
    },
    "scripts": {
        "test": "grunt dev-test",
        "start": "node app/app.js"
    },
    "repository": {
        "type": "git",
        "url": "..."
    }
}

Bluemix 通过解释 npm start 命令在启动时生成一个 procfile。

我正在调用我的 app/app.js

var app = express();
app.set("port", process.env.VCAP_APP_PORT);
...
var server = http.createServer(app);
server.listen(app.get("port"), function () {
    logger.info("Express server listening on port" + app.get("port"));
});

环境看起来像:

cf env myapp
Getting env variables for app myapp in org myOrg / space mySpace as my@mail.com...
OK

System-Provided:


{
 "VCAP_APPLICATION": {
  "application_name": "myApp",
  "application_uris": [
    "myapp.mybluemix.net"
  ],
  "application_version": "HASH",
  "limits": {
   "disk": 1024,
   "fds": 16384,
   "mem": 512
  },
  "name": "myApp",
  "space_id": "HASH",
  "space_name": "mySpace",
  "uris": [
   "myapp.mybluemix.net",
  ],
  "users": null,
  "version": "HASH"
 }
}

User-Provided:
BLUEMIX_APP_MGMT_ENABLE: devconsole+shell

No running env variables have been set

No staging env variables have been set

重要的是,该应用程序会运行几分钟,并且在发生 fatal error 后应该重新启动。

list 文件和文件夹结构正常,因此不会放错文件夹。

cf 事件显示:

$ cf events myApp
Getting events for app myApp in org myOrg / space mySpace as my@mail.com...

time                          event                   actor                 description   
TIMESTAMP   audit.app.update        my@mail.com      
TIMESTAMP   audit.app.map-route     my@mail.com      
TIMESTAMP   audit.app.update        my@mail.com      
TIMESTAMP   audit.app.unmap-route   my@mail.com      
TIMESTAMP   audit.app.update        my@mail.com      
TIMESTAMP   audit.app.update        my@mail.com      
TIMESTAMP   audit.app.map-route     my@mail.com      
TIMESTAMP   audit.app.update        my@mail.com   state: STARTED   
TIMESTAMP   audit.app.update        my@mail.com      
TIMESTAMP   audit.app.map-route     my@mail.com      
TIMESTAMP   audit.app.create        my@mail.com   disk_quota: 1024, instances: 1, memory: 512, state: STOPPED, environment_json: PRIVATE DATA HIDDEN 

如果我用浏览器连接它,会显示以下内容:

503 Service Unavailable: The server is not available now. Please try your request later.

在 Bluemix 控制台上,它显示为正在运行:

enter image description here 运行后

cf restart myapp

应用再次运行。

最佳答案

因为你在请求

BLUEMIX_APP_MGMT_ENABLE: devconsole+shell

它阻碍了容器被杀死,你想在崩溃后调试它,对吧?看起来像预期的那样工作。

生命值

关于node.js - 为什么未检测到 Cloudfoundry (Bluemix) 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203964/

相关文章:

python - 在 IBM Watson 中部署笔记本

javascript - 关于 gulp .pipe() 的 Node 路径说明

javascript - Node JS + Passport 登录

node.js - ExpressJS - 如何处理同时请求?请求似乎相互阻塞。

java - 使用 Spring Cloud 连接器访问 CloudFoundry 用户提供的服务

spring-boot - 来自manifest.yml的PCF任务/调度程序作业内存分配

java - 在 Cloud Foundry Java API 中获取服务 key

node.js - 我应该如何使用 IBM Bluemix 的 API Manager 在 OpenWhisk 中调用异步操作?

javascript - 嵌套 ES6 代理未按预期工作

ibm-cloud - 如何在 IBM Watson Assistant 中为助手添加多项技能?