我正在将 Cheyenne 用于相对高负载的 Web 应用程序。它工作得很好而且很快。但是我在升级到 Ubuntu 14.04 后开始出现一个问题,或者我开始注意到它,因为负载增加了。
工作几天后,当 Rebol 工作进程应该退出时,该进程开始消耗 100% CPU 并且“不执行任何操作”。我用 strace 查看了进程,当它处于 100 个 CPU 时,它不会以任何方式调用操作系统。我查看了 Cheyenne 工作代码(如果那里有任何错误),代码对 Rebol 命令 exit 执行正常。该命令使其永远循环。如果我尝试使用 sigterm 终止该进程,情况也是一样。
然后我可以用 sigkill 杀死它。该过程仅在几天的重负载后才进入这种状态,并且我无法在非生产环境或本地计算机上复制它。
我天真的想法是,它会永远循环,同时尝试在退出之前清除内存,或者可能是打开的文件/套接字。我用 lsof (和类似的)查看了之前/之后的流程,但由于该事件不容易重现,所以还没有弄清楚任何事情。
我的问题是:有谁见过 Rebol2 在退出时进入永恒的 100% 循环,在什么情况下?有人知道如何解决这个问题吗?
最佳答案
我在我们的夏安生产服务器上看到过这种情况,100% cpu 没有响应,可能是在提供了一个很长的文件之后(响应中包含大量数据)...从来没有设法找到时间来诊断更多这个问题,结束在 go 中编写一个长时间杀死 100% cpu 进程的监视器。
https://github.com/Softinnov/bearded-monitor
您可以在 Docker 容器中使用它
https://hub.docker.com/r/softinnov/bearded-monitor/
希望有帮助。
关于linux - Linux 上的 Rebol 2 进程在 "day of heavy load"之后在 SIGTERM 处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41881200/