我在ReactDigitalOcean)上托管了一个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/

10-11 17:36