Can you try setting  the executor on both the channel and the server 
builder?   I would recommend ForkJoinPool.commonPool().

On Monday, August 27, 2018 at 11:54:19 PM UTC-7, Kos wrote:
>
> Hi,
>
> I'm using gRPC in a new Scala service and I'm seeing unexpectedly high CPU 
> utilization. I see this high utilization in our production workload but 
> also am able to reproduce via performance tests which I'll describe below. 
>
> My setup is using grpc-netty-shaded 1.10 (but i've also repro'd with 
> 1.14). My performance test uses mTLS to talk to the service. The service is 
> deployed on a container with 6 cores and 2 gb ram. I've reduced the 
> footprint of my service to immediately return with a response without doing 
> any other work to try and identify if it's the application or something to 
> do with my gRPC configuration.
>
> My performance test is issuing about 250 requests a second using one 
> Managed Channel to one instance of my service. The data in each request is 
> about 10 bytes. With this workload, my service is running at about 35% CPU, 
> which I feel is far too high for this small amount of rps.
>
> Here is how I've constructed my server:
>
> val serverInterceptor = 
> MonitoringServerInterceptor.create(Configuration.allMetrics())
>
>
> val realtimeServiceWithMonitoring = ServerInterceptors.intercept(
>   RealtimePublishGrpc.bindService(realtimeService, ExecutionContext.global),
>   serverInterceptor)
> val rppServiceWithMonitoring = ServerInterceptors.intercept(
>   RealtimeProxyGrpc.bindService(realtimePublishProxyService, 
> ExecutionContext.global),
>   serverInterceptor
> )
>
>
>   val keyManagerFactory = GrpcSSLHelper.getKeyManagerFactory(sslConfig)
>   val trustManagerFactory = GrpcSSLHelper.getTrustManagerFactory
> (sslConfig)
>   val serverGrpcSslContexts = GrpcSSLHelper.getServerSslContext
> (keyManagerFactory, trustManagerFactory)
>
>   NettyServerBuilder
>     .forPort(8086)
>     .sslContext(serverGrpcSslContexts)
>     .addService(realtimeServiceWithMonitoring)
>     .addService(rppServiceWithMonitoring)
>     .build()
> }
>
>
> The server interceptor is modeled after: 
> https://github.com/grpc-ecosystem/java-grpc-prometheus
>
> The managed channel is constructed as such:
>
> private val interceptor = 
> MonitoringClientInterceptor.create(Configuration.allMetrics())
>
>
> val trustManagerFactory = GrpcSSLHelper.getTrustManagerFactory(sslConfig)
>
> NettyChannelBuilder
>   .forAddress(address, *8086*)
>   .intercept(interceptor)
>   .negotiationType(NegotiationType.TLS)
>   .sslContext(GrpcSSLHelper.getClientSslContext(keyManagerFactory, 
> trustManagerFactory))
>   .build()
>
>
> Finally, I use non-blocking stubs to issue the gRPC request.
>
> Any help would be greatly appreciated. Thanks!
> -K
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/8cc27fe1-e825-4b57-9f84-752e79e4c56c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to