我有一个React网络应用程序托管在DigitalOcean (Ubuntu 16.04)上。应用程序的后端(node)上有一个node脚本,由shelljs调用(shCMD命令调用R脚本)。它永远不会进入exec回调):
exec_full_analysis = shell.exec(shCMD, function(code, stdout, stderr) {
if (code === 0) {
console.log('Program output:', stdout);
pdfService.drawChartsPDF(typeArr, analysisId, datasetArr, pairArr, filterArr);
console.log('sendStatus 200')
res.sendStatus(200);
} else {
console.log('Program stderr:', stderr);
//res.sendStatus(500);
}
});我正在使用foreverjs启动服务器。它在conda环境中运行。因此,当脚本开始运行时,我看到了正确的日志输出(R脚本正在运行),这是foreverjs提供给我的,但是日志输出很快就停止了。浏览器和forever日志输出都不存在错误。在我的R脚本中,服务器到达了一个特定的阶段,并且不知怎么地被卡住了。有没有办法搞清楚到底出了什么问题?你有什么推荐的?在当地一切都很好。唯一不同的地方可能是conda环境,但我希望它会产生错误,但是没有。
更新
我查看了/var/log/syslog,但没有发现OOM错误:https://www.digitalocean.com/community/questions/python-script-gets-killed
更新
这并不是foreverjs的问题:在R脚本中的同一位置运行简单的node server.js标记。
脚本被卡在Seurat包函数ScaleData中。
seurat_object <- ScaleData(object = seurat_object, vars.to.regress = c("nUMI"))具有以下输出:
ScaleData运行在非规范化值上。推荐的工作流是首先运行NormalizeData。回归: nUMI连体0%
但是,当然,在当地,它运行良好。在服务器上,它会被困在第二次for-loop迭代中,所以有一次它在服务器上运行得很好,但是第二次它失败了,好像在DigitalOcean上运行一个进程集的时间是有限的。
更新
服务器是apache2。我切换到了nginx,现在服务器运行正常,没有卡住,问题几乎解决了,只是现在我得到了504网关超时错误。
发布于 2019-03-29 05:06:30
所以,我不知道为什么,但这是apache2服务器的问题。我切换到了nginx,但随后出现了内存错误RAM,通过减少R脚本使用的内存量修复了这些错误:
options(java.parameters = "-Xmx6000m")是-Xmx8000m。然后,脚本在服务器上正确地完成了,但是在客户机上,我看到了504网关超时错误,这是我在这里找到的解决方案:https://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/修复的。
刚在/etc/nginx/conf.d/timeout.conf创建了以下文件:
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;从那以后,它终于开始工作了
https://stackoverflow.com/questions/55409558
复制相似问题