我在React
(DigitalOcean
)上托管了一个Ubuntu 16.04
Web应用程序。该应用程序在后端(R
)上具有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
没问题:在node server.js
脚本的同一位置运行简单的R
卡住。该脚本卡在
Seurat
-包函数ScaleData
中: seurat_object <- ScaleData(object = seurat_object, vars.to.regress = c("nUMI"))
具有以下输出:
ScaleData在非标准化值上运行。建议的工作流程是首先运行NormalizeData。
回归:nUMI
| | 0%
但是,当然,它在本地运行良好。在服务器上,它卡在第二个
for
循环迭代中,因此,它一次在服务器上运行得很好,但是第二次失败,就好像运行在DigitalOcean
上设置的进程的时间受到限制一样。更新资料
服务器是
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 - Shell.js执行被困在DigitalOcean上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55409558/