Thanks Mark, I will turn on trace and see if I see anything odd. I was reading about a function called Executor::SetThreadingDefault(bool enable) that I think I can safely call after i create my grpc server. It is a public function and seems to allow me to toggle between a threaded implementation and an async one. Is that accurate? Is calling this function safe to do and/or recommended (or at least not contra-recommended). Thanks again for your help!
Jeff On Fri, Jan 7, 2022 at 11:14 AM Mark D. Roth <r...@google.com> wrote: > Oh, sorry, I thought you were asking about the sync server threads. The > default-executor threads sound like threads that are spawned internally > inside of C-core for things like synchronous DNS resolution; those should > be completely unrelated to the sync server threads. I'm not sure what > would cause those threads to pile up. > > Try running with the env vars GRPC_VERBOSITY=DEBUG GRPC_TRACE=executor and > see if that yields any useful log information. In particular, try running > that with a debug build, since that will add additional information about > where in the code the closures on the executor threads are coming from. > > On Thu, Jan 6, 2022 at 7:05 PM Jeff Steger <be26...@gmail.com> wrote: > >> >> Thanks for the info! It sort of sounds like the default-executor threads >> and the sync-server threads come from the same thread pool. I know that >> ServerBuilder::SetResourceQuota sets the max number sync-server threads. >> Does it have any impact on the number of default-executor threads? It >> doesn't seem to. >> >> Also, can you tell me under what conditions a process can expect to wind >> up with dozens of sleeping default-executor threads? My process doesn't >> start off like that but after a few hours thats how it winds up. It is not >> under high load, just serving a few short-lived streaming-response queries >> every few seconds. If I limit the max number of these threads to lets say >> 10, do you anticipate that connections would be refused under >> these conditions (ie serving a few short-lived streaming-response queries >> every few seconds)? >> >> Last, is it safe to manually kill these sleeping threads? They seem to be >> blocked on a condition variable. >> >> Thanks! >> >> -Jeff >> >> On Thu, Jan 6, 2022 at 3:39 PM Mark D. Roth <r...@google.com> wrote: >> >>> The C++ sync server has one thread pool for both polling and request >>> handlers. When a request comes in, an existing polling thread basically >>> becomes a request handler thread, and when the request handler completes, >>> that thread is available to become a polling thread again. The MIN_POLLERS >>> and MAX_POLLERS options >>> <https://grpc.github.io/grpc/cpp/classgrpc_1_1_server_builder.html#aff66bd93cba7d4240a64550fe1fca88d> >>> (which can be set via ServerBuilder::SetSyncServerOption() >>> <https://grpc.github.io/grpc/cpp/classgrpc_1_1_server_builder.html#acbc2a859672203e7be097de55e296d4b>) >>> allow tuning the number of threads that are used for polling: when a >>> polling thread becomes a request handler thread, if there are not enough >>> polling threads remaining, a new one will be spawned, and when a request >>> handler finishes, if there are too many polling threads, the thread will >>> terminate. >>> >>> On Wed, Jan 5, 2022 at 12:54 PM Jeff Steger <be26...@gmail.com> wrote: >>> >>>> Ah never mind I see you answered, apologies. Let me ask you this: am I >>>> stuck with all of these default-executor threads that my process is >>>> spawning? Is there no way to limit them? Do they come from same pool as >>>> grpc sync server threads? >>>> >>>> On Wed, Jan 5, 2022 at 3:51 PM Jeff Steger <be26...@gmail.com> wrote: >>>> >>>>> Can you specifically answer this: >>>>> >>>>> grpc-java has a method in its ServerBuilder class to set the Executor. >>>>> Is there similar functionality for grpc-c++ ? >>>>> >>>>> Thanks! >>>>> >>>>> On Tue, Jan 4, 2022 at 11:55 AM Mark D. Roth <r...@google.com> wrote: >>>>> >>>>>> I answered this in the other thread you posted on. >>>>>> >>>>>> On Sun, Jan 2, 2022 at 9:39 AM Jeff Steger <be26...@gmail.com> wrote: >>>>>> >>>>>>> grpc-java has a method in its ServerBuilder class to set the >>>>>>> Executor. Is there similar functionality for grpc-c++ ? I am running a >>>>>>> C++ >>>>>>> grpc server and the number of executor threads it spawns is high and >>>>>>> seems >>>>>>> to never decrease, even when connections stop. >>>>>>> >>>>>>> -- >>>>>>> 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 grpc-io+unsubscr...@googlegroups.com. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/grpc-io/CAA-WHunWvX5Tr6Vp3e-E6vcKgzD%3DGzsCNoZzqNNQ8Ox8BZvggA%40mail.gmail.com >>>>>>> <https://groups.google.com/d/msgid/grpc-io/CAA-WHunWvX5Tr6Vp3e-E6vcKgzD%3DGzsCNoZzqNNQ8Ox8BZvggA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Mark D. Roth <r...@google.com> >>>>>> Software Engineer >>>>>> Google, Inc. >>>>>> >>>>> >>> >>> -- >>> Mark D. Roth <r...@google.com> >>> Software Engineer >>> Google, Inc. >>> >> > > -- > Mark D. Roth <r...@google.com> > Software Engineer > Google, Inc. > -- 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 grpc-io+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/CAA-WHukWzP5x4rRyDyZ74EacGD9YLT%2BEryi0-X3P82rUw7Cp4g%40mail.gmail.com.