我在一个 Shiny 的服务器上工作,我正在做一些非常复杂的操作。
我发现的问题是,在处理大型数据帧几分钟后,应用程序因以下错误而崩溃:
错误:C 堆栈使用 7969194 太接近限制。执行暂停。
我在谷歌上搜索了一下,发现在 ubuntu 的 cmd 中使用此命令 ulimit -s 16384
可以增加堆栈大小,但我没有找到如何在 Shiny 的服务器中执行此操作。
拜托,有人有什么想法吗?
谢谢
最佳答案
TLDR:
将以下行添加到 /etc/security/limits.conf
的末尾:
* soft memlock unlimited
* hard memlock unlimited
* soft stack unlimited
* hard stack unlimited
记入this answer .基本上,此更改会将堆栈和 memlock 内存的大小调整为无限。
更多背景:
正如 OP 指出的那样,可以使用 ulimit
在进入 R session 之前调整可用堆栈大小。
R 包 rlimit
应该像命令行实用程序 ulimit
一样工作,但是,在进入 R session 后我无法产生相同的行为:
Cstack_info()["size"] # prints 7969177
rlimit_stack(16384, 16384) # expect 16777216
Cstack_info()["size"] # still prints 7969177
最终我找到了上面的 TLDR 解决方案和 Error: C stack usage 7969194 is too close to the limit.执行停止。
消失。
https://stackoverflow.com/questions/60492048/