2017-01-16 80 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每日輪換文件,它們有一個用於記錄未處理異常的傳輸。其次,如果在某段時間之後,您的應用程序變慢,則可能是因爲垃圾回收減慢了進程或線程被長時間運行的同步代碼阻塞而導致內存泄漏,如果您在此處顯示代碼,這將會很有幫助。