2017-01-16 110 views
0

我正在基于expressjs的网站上工作,它可以流式传输视频,用户可以从中下载视频文件。
当我启动应用程序时,一切正常。但过了一段时间,应用程序无法流式传输视频,下载文件也无法工作(长时间延迟后它会返回空文件),修复它的唯一方法是重新启动应用程序。Nodejs从磁盘读取时崩溃

Nginx的错误日志:

2017/01/16 19:39:39 [error] 10584#10584: *23717 upstream prematurely closed connection while reading upstream, client: x.x.x.x, server: example.com, request: "GET /api/course/.../video/.../stream HTTP/1.1", upstream: "http://127.0.0.1:8080/api/course/.../video/.../stream", host: "example.com" 

我使用PM2在集群模式。

我有这样的应用程序记录错误:

process.on('uncaughtException', function(err) { 
    console.log(err); 
    winston.error('Caught exception : ' ,err); 
}); 

但在日志文件中没有错误。

流式视频我使用类似于this的方法。
用于下载文件我使用快速下载功能。

+0

你能泄漏文件句柄或其他系统资源,最终你用完了吗? – jfriend00

回答

0

首先,检查winston每日轮换文件,它们有一个用于记录未处理异常的传输。其次,如果在某段时间之后,您的应用程序变慢,则可能是因为垃圾回收减慢了进程或线程被长时间运行的同步代码阻塞而导致内存泄漏,如果您在此处显示代码,这将会很有帮助。