我正在开发一个与 Google Analytics 非常相似的分析应用程序。 它基本上将来自各个站点的统计信息存储在数据库中。
应用程序具有以下属性:
- 大量请求(高峰时2.5k/s)
- 对每个请求进行少量处理
我正在使用 Tomcat 6 和 Apache HTTPD 2。
对于这种特定类型的应用程序,我应该为 Tomcat 的 maxThreads
和 connectionTimeout
属性设置什么值?
最佳答案
确定适合您的特定站点的最佳设置的唯一方法是通过测试。显然,您的 Tomcat 实例将处理大量相当小的请求,但返回的数据很少——这不是正常情况。我的猜测是,您可能需要大量线程(可能是 1000,默认值为 200)和较短的超时,但最佳的确切值必须通过测试确定,并可能在现场试验后进行调整。
在过去,我编写了一些小的多线程应用程序来在服务器上触发请求,它既便宜又令人愉快,并且可以获得非常高的请求率。如果您想要更复杂的东西,请查看 JMeter它可以很好地对大多数网站进行负载测试。
如果您担心请求数量会淹没单个实例,我认为您应该考虑使用某种形式的负载平衡运行多个 Tomcat 实例。由于您似乎在 Apache 后面运行 Tomcat,因此在 AJP 连接器中设置它应该相当简单。
编辑
刚看到你更新的数字。我更喜欢看请求/秒,你给出的数字大约是 18/秒。我原以为 Tomcat 能够在不更改设置的情况下应对这种情况。我的猜测是您在其他地方遇到了瓶颈,可能是在数据存储中,因为我猜它会进入数据库。
关于java - 分析应用程序的 Tomcat 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732787/