【发布时间】:2016-05-29 16:49:57
【问题描述】:
我有一种在 WebServer 模块上运行的代理服务器,我注意到该服务器由于其内存消耗而被终止。
每次服务器收到新请求时,它都会创建一个子客户端进程,我看到的问题是该进程无限期地保持活动状态。
这是我正在使用的服务器:
我以为response.close() 正在关闭并终止客户端连接,但事实并非如此。
这是显示在 htop 上的子进程列表:
(那些流程就更多了,只是列表的一个片段)
我真的需要杀死这些进程,因为它们正在使用所有可用内存。我错过了什么吗?
我可以简单地重新启动服务器,但仍然会浪费内存。
谢谢!
编辑:
我之前提到的进程是线程,并不是我想象的独立进程(check this)。
每个http请求都会创建一个新线程,这没关系,但是脚本结束后这个线程并没有被杀死。
另外,我发现如果请求处理程序不运行 casper(我的意思是 casper.run(..)),则不会创建新线程。
因此,只有在服务器运行 casper 实例时才会创建新线程,问题是该实例不会在 run 函数结束后结束。
我尝试了casper.done(),如下所述,但它杀死了整个进程而不是当前正在运行的线程。 (我没有找到这个函数的任何文档)。
当我在同一台机器的服务器之外执行其他 casper 脚本时,实例化线程和整个幻象进程成功结束。会发生什么?
我正在使用 Phantom 2.1.1 和 Casper 1.1.1 版本。
如果您想了解更多或具体信息,请随时问我。
再次感谢阅读!
【问题讨论】:
标签: webserver phantomjs casperjs