我们有一台64位的linux机器,我们与其他服务建立多个HTTP连接,Drools网站(如果您不知道规则引擎)就是其中之一。在drools中,我们在每个被触发的规则中创建知识库,并且知识库的创建使一个HTTP连接到Guvnor网站。
所有其他线程都被阻塞,CPU利用率高达100%,从而导致OOM。我们可以在15-20分钟后对规则进行修改。但如果有人已经面对了这个问题,我想确定一下。
我检查了"cat /proc/sys/kernel/threads-max",它显示了27000个线程,这是一个原因吗?
我有几个问题:
谢谢,
发布于 2012-10-30 11:55:22
我检查了"cat /proc/sys/内核/ 27000 max“,它显示了27000个线程,这是一个原因吗?
这个数字看起来确实很大,但我们不知道大多数线程是否属于您的java应用程序。创建一个java线程转储来确认这一点。您的线程转储还将显示每个线程占用的CPU时间。
我们什么时候知道我们的能力过剩了?
您有100%的CPU和OOM错误。除了笑话之外,您还应该监视HTTP连接队列,以确定您做错了什么。您的帖子没有提到您是如何处理HTTP连接的(大概是通过某种由队列支持的池机制?)。我见过容器和程序队列请求无穷无尽地导致它们大爆炸而崩溃。绘制以下图表以隔离您的问题
有多少线程可以在内部生成(任何有关差异参数的粗略估计或公式都可以)?
只有负载测试才能回答这个问题。加载您的服务器并确定其在60-70%的容量下可以支持的并发用户的数量。注意此时在内部产生的线程数。这是您的高峰容量(允许意外交通的空间)。
其他人有没有见过类似的口水问题?同时访问古弗纳网站基本上是造成这个问题的原因。
因为我没有用这种方式访问drools,所以我在那里无能为力。抱歉的。
发布于 2012-10-30 13:42:36
我的回答是基于这样的假设,即你为每个请求创建了一个知识库,而这个知识库的创建包含了从Guvnor下载最新规则源的过程,如果我弄错了,请更正。
我怀疑构建包的/compilation需要时间并占用您的系统。
与对每个请求编译包不同,您可以从guvnor下载预构建包,如果规则变化不大,您也可以在本地缓存这些包。唯一的限制是您需要在guvnor和您的应用程序中使用相同版本的drools。
https://stackoverflow.com/questions/13137234
复制相似问题