我正在将Cheyenne用于相对高负载的Web应用程序。它工作得很好,很快。但我有一个问题,在升级到Ubuntu 14.04后开始出现,或者我开始注意到它因为负载增加了。
经过几天的工作,当一个Rebol工作进程退出时,该进程开始消耗100%的CPU并且"什么都不做"。我用 strace 查看过程,当它在100 CPU中时,它不会以任何方式调用操作系统。我查看了Cheyenne工作代码(如果有任何错误),代码对Rebol命令退出执行OK。此命令使其永远循环。如果我尝试使用 sigterm 来杀死进程,情况就会一样。
然后我可以用 sigkill 杀死它。经过几天的重载后,该过程才进入这种状态,我无法在非生产环境或本地计算机上复制它。
我天真的想法是,它会在退出之前尝试清除内存,或者打开文件/套接字时永远循环。我使用 lsof (和类似的)之前/之后查看过程,但由于事件不容易重现,因此无法解决任何问题。
我的问题是:有没有人看到Rebol2在退出时进入永久的100%循环以及在哪种情况下?有没有人对解决这个问题有任何想法?
答案 0 :(得分:2)
我在我们的生产cheyenne服务器上看到了这一点,100%cpu没有响应,可能是在提供了一个非常长的文件(响应中的大量数据)之后......从未设法找时间进行诊断更多这个问题,结束写一个监视器去杀死100%的cpu进程很长一段时间。
https://github.com/Softinnov/bearded-monitor
您可以在泊坞窗容器中使用它
https://hub.docker.com/r/softinnov/bearded-monitor/
希望它有所帮助。