3

使用 Apache PoolingClientConnectionManager 时,例如:

PoolingClientConnectionManager cm = new PoolingClientConnectionManager();
cm.setMaxTotal(???);
HttpClient client = new DefaultHttpClient(cm);

什么被认为是一个好的默认值?Apache 网站上的一个例子在这里使用100和其他地方(stackoverflow.com/questions/13310490/apache-defaulthttpclient-how-to-set-max-total-connection-and-default-max-conn)我读到应该大致知道峰值负载将是多少并将其设置为该负载。

那么是否有一个很好的默认值setMaxTotal(???)呢?还是建议您弄清楚您的峰值是多少并以此为基础?

如果是后者,确定峰值负载的好方法是什么? 我通过此幻灯片查看了此处,发现默认值为10,尽管您可以将其设置为0并让美好时光滚动(尽管这显然否定了任何超时服务,有什么好的理由吗?)。我还碰巧浏览了 oracle 文档 (docs.oracle.com/cd/E17904_01/web.1111/e13737/ds_tuning.htm) 并看到了一些关于维护连接池的好技巧,但没有关于确定峰值负载的内容。

对此的任何帮助将不胜感激。

4

1 回答 1

0

始终建议您确定峰值负载并相应地设置该值

我之前也遇到过这样的情况。Dint 找到一个合适的方法来为 setMaxTotal() 获得一个好的值。

但它对我来说是这样的

lsof -p <process id>如果您的应用程序在 linux 上运行,您可以这样做。

这将使您从应用程序中获得所有打开的连接。并且您可以在重负载期间 grep 您的目标服务器名称。

lsof -p <process id>|grep <target server>

这将显示从您的应用程序到目标服务器的所有连接。

如果 httpclient 不能满足重负载,则将此值保持在 100 以下总是好的。池最多只能容纳 100 个对象。

于 2013-08-14T06:15:41.183 回答