当前位置: 首页 > 面试题库 >

如何在Tomcat上处理2000+请求/秒?

万俟招
2023-03-14
问题内容

我正在用Java开发SMS应用程序。我的客户通过SMS发送查询,查询将以HTTP请求的形式通过SMS网关转发给我的服务器。现在,我的应用程序处理了请求,并通过SMS网关再次将响应发送回客户端。最多仅发送300个字符作为响应。我期望流量很高(每秒2000个请求)。我想将我的应用程序托管在一些虚拟主机公司(考虑mochahost)。托管之前我应该​​考虑哪些因素(RAM,CPU等的中间因素),并且主要瓶颈是什么?如果调整正确,专用的tomcat服务器可以处理如此高的流量吗?您有什么建议?

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


问题答案:

不知道您在servlet中正在 什么,很难回答您的问题。但是简短的答案是,它实际上与tomcat没有任何关系。

我们当前将Tomcat服务器使用Dell R410s(双四核,32G
ram)。对于与后端membase群集进行通信的REST服务,我们可以在单个服务器上轻松处理〜15k req / second(这是使用Jersey
JAX-RS实现)。目前,我们在F5负载均衡器后面有4个。这些请求中的每一个平均大约需要10毫秒。

真正归结为并发。您的servlet完成请求所需的时间。您的每个并发请求都有一个线程,因此,如果您尝试达到2000 req /
sec的速度,而单个请求需要500毫秒的处理时间,那么您将需要一些硬件。问题不是tomcat,而是servlet的可用资源之一。



 类似资料:
  • 我有ApacheTomcatWeb服务器,在这里我运行3-4JavaSpring和hibernate应用程序。但问题是,当有太多请求进入服务器时,服务器会给出内存不足错误或堆大小错误,最后由于服务器没有响应而导致站点关闭。有时还会出现连接错误或套接字错误。我希望我的服务器至少能处理2000个请求。 到现在为止,我用了很多方法来处理这个问题。 通过更改setenv中的大小来增加服务器的堆大小。sh文

  • 我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能

  • 问题内容: 所以我用Go编写了这个RESTful后端,它将通过跨站点HTTP请求来调用,即从另一个站点(实际上,只是另一个端口,但是同源策略启动了,所以我们来了)提供的内容中调用。 在这种情况下,在某些情况下,用户代理将发送预检OPTIONS请求,以检查实际请求是否可以安全发送。 我的问题是如何在Go上下文中最好地处理和充分响应这些预检请求。我构想的方法感觉不太优雅,我想知道是否还有其他我没有想到

  • 我正在使用OkHttpClient向网站的网页url发送请求,并通过以下方法存储它提供的cookie,我仅从stackoverflow获得该方法。 有必要存储cookie,否则网站会将请求重定向到超时页面。 然后,我看到页面的html来检查我是否到达了正确的网址。 现在,我以类似于网址“www.example.com/loginPage”的方式制作另一个请求变量,并尝试查看html,但它将我重定向

  • 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始: server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_nam

  • 请求处理 fpm_run()执行后将fork出worker进程,worker进程返回main()中继续向下执行,后面的流程就是worker进程不断accept请求,然后执行PHP脚本并返回。整体流程如下: (1)等待请求: worker进程阻塞在fcgi_accept_request()等待请求; (2)解析请求: fastcgi请求到达后被worker接收,然后开始接收并解析请求数据,直到req