我在Java应用程序中使用gRPC(非阻塞存根),两个函数调用之间的响应时间约为5-8ms。我想减少它。你有什么建议?可能吗?
答案 0 :(得分:2)
gRPC Java开销通常以µs(sub-ms)为单位。如果您看到毫秒级的延迟,则通常会期望以下原因:
服务等待时间为毫秒。在服务器上,测量服务响应需要多长时间。许多服务需要毫秒来处理请求。
网络延迟为毫秒。从一台主机运行ping
,以降低通信性能。 (如果您对此有兴趣,netperf tcp_rr是一个更好的选择。)
基准测试没有预热JVM。当类加载发生时,第一个RPC将会非常非常慢。之后,JVM将在JIT开始编译代码之前使用解释模式一段时间。然后,JIT将逐步优化代码。因此,请确保有30秒钟以上的持续RPC预热期。
Channel
s未被重用。 DNS查找,创建网络连接以及执行TLS握手会增加延迟。但是,如果您将Channel
与多个RPC一起使用,则以后的RPC将不需要支付这些延迟成本。