我们使用 Tomcat7 和 Java 7。我们获得的吞吐量约为 500 请求/秒。但在多个实例到位的情况下,单个实例只能处理 20 个请求。
问题在于单实例响应时间累计超过 20 个请求。
举个例子:-
***1。如果第一个请求需要: - 5ms(毫秒)
然后第二个请求需要: - 10ms
第三:- 15ms 等等.......***
我尝试让它保持不变,但它不起作用。
我们尝试过什么:-
1. Tomcat7中连接器由BIO改为NIO。
2. 增加 maxThreads = 1000。
3. 核心数从2核增加到10核。
4. 异步API实现。
以上方法均无效。
我们想要实现的目标:-
- 我们希望 API 具有恒定的响应时间。
- 单个实例中每秒 100 个请求。
-----------------<>--------------<>--------- ---------------<>----<>--------------
编辑:-
好的,经过一天的阅读代码并尝试不同的事情之后。找到了性能低下的主要原因。这是由于 InputStream read() 函数的阻塞性质造成的。当java从socket读取o/p时。 Socket 返回输入流中的 o/p。 Inputstream.read() 是java中的阻塞方法(下面附有链接)。仍然不知道如何解决它。
链接:- http://javarevisited.blogspot.in/2012/02/what-is-blocking-methods-in-java-and.html#axzz4kWX7K7Yc
尝试了很多Java NIO的方法,但到目前为止都没有效果。
提前致谢。
最佳答案
查看内存消耗、网络,也许还可以启动一个配置文件。 您在什么样的硬件上运行? 确保您的 java 内存参数正确传递到 tomcat。 启用垃圾收集日志。
https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/memman.html
CATALINA_OPTS vs JAVA_OPTS - What is the difference?
另外,请描述一下流程,你的tomcat可能没有什么问题,例如,如果你使用的数据库限制了X连接,那么你就被数据库拖慢了。
最常见的请求是什么?这些请求在做什么?
关于java - 高流量时 Rest-API 响应时间增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44624581/