我有一个托管在 DigitalOcean
(Ubuntu 16.04
) 上的 React
Web 应用。该应用程序在后端 (node
) 上有一个由 shelljs
调用的 R
脚本(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
环境中运行。因此,当脚本最初开始运行时,我看到 foreverjs
为我提供的正确日志输出(R
脚本正在运行),但很快日志输出就停止生成。浏览器中和 forever
日志输出中均不存在错误。服务器在我的 R 脚本中到达某个阶段并不知何故卡住了。有没有办法找出到底出了什么问题?你会推荐什么?本地一切都工作得很好。唯一可能不同的是 conda
环境,但我希望它会给出错误,但实际上没有。
Update
我查看了 /var/log/syslog
但没有看到 OOM
错误: https://www.digitalocean.com/community/questions/python-script-gets-killed
Update
这不是 foreverjs
的问题:运行简单的 node server.js
卡在 R
脚本中的同一位置。
脚本卡在Seurat
- 包函数ScaleData
中:
seurat_object <- ScaleData(object = seurat_object, vars.to.regress = c("nUMI"))
输出如下:
ScaleData is running on non-normalized values. Recommended workflow is to run NormalizeData first. Regressing out: nUMI | | 0%
但是,当然,它在本地运行良好。在服务器上,它陷入了第二次 for 循环迭代,因此一次它在服务器上运行得很好,但第二次它失败了,就好像运行进程的时间有限一样设置为 DigitalOcean
。
Update
服务器是apache2
。我切换到 nginx
,现在服务器运行良好,它没有卡住,问题几乎已经解决,只是现在我收到 504
网关超时错误。
最佳答案
所以,我不知道为什么,但这是 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;
之后它终于开始工作了
关于r - shelljs 执行在 DigitalOcean 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409558/