Java 高流量时Rest API的响应时间增加

Java 高流量时Rest API的响应时间增加,java,tomcat7,inputstream,blocking,response-time,Java,Tomcat7,Inputstream,Blocking,Response Time,我们将Tomcat7与Java7一起使用。我们的吞吐量约为500请求/秒。但由于有多个实例,单个实例只处理20个请求 问题在于,单实例响应时间加起来超过20个请求 例如: ***一,。如果第一次请求需要:-5毫秒(毫秒) 然后第二个请求需要:-10毫秒 第三:15毫秒等*** 我试着让它保持不变,但不起作用 我们尝试了什么:- 1.在Tomcat7中将连接器从BIO更换为NIO。 2.增加maxThreads=1000。 3.将核数从2核增加到10核。 4.异步API实现 上述措施都不起作用 我

我们将Tomcat7与Java7一起使用。我们的吞吐量约为500请求/秒。但由于有多个实例,单个实例只处理20个请求

问题在于,单实例响应时间加起来超过20个请求

例如:

***一,。如果第一次请求需要:-5毫秒(毫秒)

  • 然后第二个请求需要:-10毫秒

  • 第三:15毫秒等***

  • 我试着让它保持不变,但不起作用

    我们尝试了什么:-
    1.在Tomcat7中将连接器从BIO更换为NIO。
    2.增加maxThreads=1000。
    3.将核数从2核增加到10核。
    4.异步API实现

    上述措施都不起作用

    我们希望达到的目标:

  • 我们希望API有恒定的响应时间
  • 在一个实例中为100请求/秒 ----------------------------------------------------------------------------

    编辑:-

    在阅读了一天的代码并尝试了不同的事情之后,一切正常。找到了性能低下的主要原因。这是由于InputStream read()函数的阻塞性质造成的。当java从套接字读取o/p时。套接字返回inputstream中的o/p。read()是java中的一个阻塞方法(链接附在下面)。我仍然不知道如何修复它

    链接:-

    我已经尝试了许多JavaNIO方法,但到目前为止没有任何效果


    提前谢谢

    查看内存消耗、联网情况,或许可以创建一个配置文件。 您运行的是哪种硬件? 确保java内存参数正确地传递给tomcat。 启用垃圾收集日志

    另外,请描述一下流程,您的tomcat可能没有什么不好的地方,例如,如果您使用的数据库限制为X个连接,那么您将被数据库拖累


    最常见的请求是什么?这些请求在做什么?

    你好,gba,谢谢你的回复。在此过程中,我们没有使用任何数据库(DB)。程序流程是:-nginx接受请求(端口80)--->tomcat7(端口8080)(NIO连接器)--->Unix套接字(在本地主机上运行)大约需要20到30毫秒来响应1个请求)--->返回结果。我们已经注意到,从unix套接字读取请求,即Inputstream(是增加响应时间的主要原因。但是如何避免使用Inputstream(我不知道)。如果我们必须使用input stream,那么如何使它避免花费这么多时间。)。谢谢,DiptenduHi gba,其他统计数据:-一台机器上20个连接的内存消耗几乎为30%(最大值)。硬件:-单实例2核,8 GB Ram。我们正在通过Tomcat7下的setenv.sh文件传递Java参数。向服务器发出的请求获取一行数据,并使用unix套接字(在套接字中,我们一直运行Python程序)处理它,然后返回给客户端一行json数据。我仍然不确定流程是什么,请详细说明从tomcat收到调用到它返回响应的整个过程。此外,请检查您的配置以了解nginx和tomcat中的连接限制。Hi-gba,nginx设置为连接到2000个连接,tomcat maxthreads=1000。请查看其中的maxConnections参数,它与max threads不同。此外,我还需要对流程进行更详细的解释,以帮助您解决问题。我不明白API在做什么。有同步的东西吗?