Thanks so much Jeff, agree reaping them after they being idle would be 
great.

On Friday, May 12, 2023 at 6:59:28 PM UTC-4 Jeff Steger wrote:

> This is as close to an explanation as I have found:
>
> look at sreecha’s response in
> https://github.com/grpc/grpc/issues/14578
>
> tldr: 
> “ The max number of threads can be 2x 
> <https://github.com/grpc/grpc/blob/v1.10.0/src/core/lib/iomgr/executor.cc#L94>
>  the 
> number cores and unfortunately its not configurable at the moment….. any 
> executor threads and timer-manager you see are by-design; unless the 
> threads are more than 2x the number of cores on your machine in which case 
> it is clearly a bug”
>
>
> From my observation of the thread count and from my examination of the 
> grpc code (which I admit I performed some years ago), it is evident to me 
> that the grpc framework spawns threads up to 2x the number of hardware 
> cores. It will spawn a new thread if an existing thread in its threadpool 
> is busy iirc. The issue is that the grpc framework never reaps idle 
> threads. Once a thread is created, it is there for the lifetime if the grpc 
> server. There is no way to configure the max number of threads either. It 
> is really imo a sloppy design. threads aren’t free and this framework keeps 
> (in my case) dozens and dozens of idle threads around even during long 
> periods of low or no traffic. Maybe they fixed it in newer versions, idk. 
>
> On Fri, May 12, 2023 at 5:58 PM Jiqing Tang <jiqin...@gmail.com> wrote:
>
>> Hi Jeff and Mark,
>>
>> I just ran into the same issue with an async c++ GRPC server (version 
>> 1.37.1), was curious about these default-executo threads and then got this 
>> thread, did you guys figure out what these threads are for? The number 
>> seems to be about 2x of the polling worker threads.
>>
>> Thanks!
>>
>> On Friday, January 7, 2022 at 3:47:51 PM UTC-5 Jeff Steger wrote:
>>
>>> 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 <ro...@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 <be2...@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 <ro...@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 <be2...@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 <be2...@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 <ro...@google.com> 
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I answered this in the other thread you posted on.
>>>>>>>>>
>>>>>>>>> On Sun, Jan 2, 2022 at 9:39 AM Jeff Steger <be2...@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+u...@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 <ro...@google.com>
>>>>>>>>> Software Engineer
>>>>>>>>> Google, Inc.
>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> Mark D. Roth <ro...@google.com>
>>>>>> Software Engineer
>>>>>> Google, Inc.
>>>>>>
>>>>>
>>>>
>>>> -- 
>>>> Mark D. Roth <ro...@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+u...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/grpc-io/3ef87e52-f06e-492f-aecd-b6a58b3bd654n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/grpc-io/3ef87e52-f06e-492f-aecd-b6a58b3bd654n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/8677489e-85c2-4c3e-90f5-c3873922e0dcn%40googlegroups.com.

Reply via email to