我将 Cheyenne 用于负载相对较高的 Web 应用程序。它工作得很好而且很快。但是我有一个问题在升级到 Ubuntu 14.04 后开始出现,或者我开始注意到它,因为负载增加了。
经过几天的工作,当一个 Rebol 工作进程应该退出时,该进程开始消耗 100% 的 CPU 并且“什么都不做”。我用strace查看了进程,当它在 100 个 CPU 中时,它不会以任何方式调用操作系统。我查看了 Cheyenne worker 代码(如果那里有任何错误),代码执行 OK 到 Rebol 命令exit。这个命令使它永远循环。如果我尝试用sigterm 终止进程,情况也是如此。
然后我可以用sigkill杀死它。该过程仅在几天的繁重负载后进入此状态,并且我无法在非生产环境或本地计算机上复制它。
我天真的想法是它永远循环,同时试图在退出之前清除它的内存,或者可能是打开的文件/套接字。我用lsof (和类似的)查看了之前/之后的过程,但由于该事件不容易重现,所以没有想出任何答案。
我的问题是:有没有人看到 Rebol2 在退出时进入永恒的 100% 循环,在什么情况下?有人对解决这个问题有任何想法吗?