有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在tomcat上每秒处理2000多个请求?

我正在用Java开发一个SMS应用程序。我的客户通过SMS发送查询,这些查询将通过SMS网关以http请求的形式转发到我的服务器。现在,我的应用程序处理这些请求,并通过短信网关再次向客户端发送回复。最多只发送300个字符作为响应。我预计流量会非常高(每秒2000个请求)。我想在某个网络托管公司(考虑mochahost)托管我的应用程序。在托管(RAM、CPU等)之前,我应该考虑哪些因素,还有哪些主要瓶颈?如果调整得当,专用tomcat服务器能处理如此高的流量吗?你有什么建议

没有数据库交互(我只使用Java堆内存)。我用JMeter运行了一个测试(每秒100个请求)。我的堆内存使用率为35MB,平均响应时间为532ms。而且我没有使用任何会话变量


共 (3) 个答案

  1. # 1 楼答案

    在不知道自己在servlet中做什么的情况下,很难回答问题。但简单的回答是,它真的与tomcat没有任何关系

    我们目前在Tomcat服务器上使用Dell R410(双四核,32G ram)。对于在后端与membase集群通信的REST服务,我们可以在一台服务器上轻松处理~15k req/秒(这是使用Jersey JAX-RS实现的)。我们目前在F5负载平衡器后面有4个这样的设备。平均而言,每一个请求都会在大约10毫秒内得到服务

    它真正归结为并发性;servlet处理请求需要多长时间。每个并发请求都有一个线程,所以如果你试图以每秒2000个请求的速度处理一个请求需要500毫秒。。。你需要一些硬件。问题不是tomcat,而是servlet的可用资源之一

  2. # 2 楼答案

    假设每个请求没有太多工作要做,一个在普通硬件上具有默认设置的Tomcat服务器应该可以轻松处理每秒2k个请求。如果处理一个请求需要500毫秒以上的时间,您可能需要增加线程池中的线程数,并且可能会开始突破限制。或者,如果您可以将部分工作转移到其他线程,它将加快响应时间,并且您可以保留默认的200个线程。那么问题就在于你的工作线程是否能跟上传入的请求。这将取决于负载是恒定的还是突发的,以及在处理过程中可以接受的延迟程度。这甚至不能解决HA、DR和可接受的停机时间。这都是一个巨大的平衡行动,而且有太多的变量,不能简单地给出一个简单的答案

  3. # 3 楼答案

    看起来您可能需要实现集群/负载平衡方法。以this为例