Node.js 崩溃问题

3
我的Node.js应用程序一直崩溃。它是一个从MySQL数据库中获取数据的简单Web服务。我每天会有大约20k到30k个查询。我不确定它是否因为需要提供更多资源或者我的代码存在问题而崩溃。它托管在AppFog上,这里是崩溃记录。
我不确定hashish包是什么,但我尝试使用“npm install hashish”进行安装并没有解决问题。您有任何想法吗?
C:\Users\Tom\\nodejs>af crashlogs TomsApp
====> /logs/staging.log <====

# Logfile created on 2013-02-05 00:53:01 +0000 by logger.rb/25413
Installing dependencies. Node version 0.8.14
Installing mysql@mysql@0.9.6 from local path
Installing hashish@hashish@0.0.4 from registry
Package is not found in npm registry hashish@hashish@0.0.4
Failed getting the requested package: hashish@hashish@0.0.4
Installing require-all@require-all@0.0.5 from local path

====> /logs/stderr.log <====


events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: Connection lost: The server closed the connection.
    at Protocol.end (/mnt/var/vcap.local/dea/apps/ta-0-365d7313671d4e40105a4d158
f1247d5/app/node_modules/mysql/lib/protocol/Protocol.js:63:13)
    at Socket.onend (stream.js:66:10)
    at Socket.EventEmitter.emit (events.js:126:20)
    at TCP.onread (net.js:417:51)

我解决了哈希错误。这与我的npm-shrinkwrap.json和package.json文件有关。我安装的内容与package.json文件中的不同,shrinkwrap.json出现了问题。我所要做的就是安装与package.json相对应的正确软件包。 - Dev01
3个回答

1

你是如何获取连接的?一次请求中只获取一次,还是每次请求都获取新连接并将其返回到池中?池应该在后台处理过期连接。

var mysql = require('mysql');
var pool  = mysql.createPool({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
});


// for each request where you need the database connection, wrap it with
pool.getConnection(function(err, connection) {
  // do something with connection here
  ...
  connection.end();
});

好主意。我会尝试的。那应该能帮助缓解拥堵,对吧? - Dev01
只需确保您的连接池中有足够的连接,并且数据库可以接受比您的连接池需要的数量更高的数字。 - Pascal Belloncle
我已经实现了连接池。虽然仍然会出现“连接丢失”错误,但似乎运行得更好了一些。我还添加了connection.end()代码,我认为这应该有所帮助。我将池大小设置为100,但我不知道appfog的限制是多少。 - Dev01

1
我会说MySQL服务器拒绝连接,也许你需要调查一下。

0

好的,谢谢。我添加了错误处理代码,现在我们等待看看它会带来什么。关于日志中提到“hashish”的部分,你有什么想法吗? - Dev01
我现在看到这些错误:重新连接丢失的连接:错误:连接丢失:服务器关闭了连接。 在Protocol.end (/mnt/var/vcap.local/dea/apps/ta-0-5c083ea6143fd3e9b24d1e082 ab5ce14/app/node_modules/mysql/lib/protocol/Protocol.js:72:13)处 在Socket.onend (stream.js:66:10)处 在Socket.EventEmitter.emit (events.js:126:20)处 在TCP.onread (net.js:417:51)处 - Dev01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接