Server Threadpool Exhausted

Skip to first unread message

Roshan Chaudhari

Apr 29, 2022, 2:47:27 AMApr 29

i have gRPC sync server with one service and 1 RPC.

I am not setting ResourceQuota on serverbuilder. If n clients wants to connect, there will be n request handler threads created by gRPC. I want to keep some limit on these threads. lets say 10. And if it costs some latency in serving client, it is okay.

So I tried these settings:

grpc::ServerBuilder builder; grpc::ResourceQuota rq; rq.SetMaxThreads(10); builder.SetResourceQuota(rq); builder.SetSyncServerOption( grpc::ServerBuilder::SyncServerOption::MIN_POLLERS, 1); builder.SetSyncServerOption( grpc::ServerBuilder::SyncServerOption::MAX_POLLERS, 1); builder.SetSyncServerOption(grpc::ServerBuilder::SyncServerOption::NUM_CQS, 1);

From another process, I am firing up 800 clients in parallel. So I expect there will be 1 completion queue for each of them and 10 threads sharing it. However, on client side there is an error:

"Server Threadpool Exhausted"

and none of the client succeeds.

Roshan Chaudhari

May 2, 2022, 12:33:49 AMMay 2
More context:
I am using C++ sync server. Currently when I have multiple concurrent  clients, number of threads used by the server increases linearly and it seems each client is served with separate thread.

streaming RPC I am using, will be idle 90 percent of the time, so rarely data will be sent across it. So server can have minimal number of threads and multiple client requests can be served by say fixed number of threads. And it is okay if there is some delay in serving the client.

Is it possible to achieve this in sync server? Or async is the only option.
Reply all
Reply to author
0 new messages