I created PR https://github.com/apache/pulsar/pull/14320 to set numHttpServerThreads=200 . Please review
On 2022/02/16 12:39:34 Lari Hotari wrote: > On 2022/02/16 00:58:20 PengHui Li wrote: > > Which is a sync method. Ultimately this could lead to all the pulsar-web > > thread > > blocked. we'd better not introduce blocking calls if we use AsyncResponse. > > > > > What issue did you see? Please share more context. Thanks for the > > patience. > > > > It happened very earlier > > > > Here is the issue https://github.com/apache/pulsar/issues/4756 > > And here is also a related fix https://github.com/apache/pulsar/pull/10619 > > Penghui, Thank you for the patience, and thanks for sharing more context. I > happened to send a reply before reading your message, so please bear with me. > > So finally, I understand that "the problem" is that all HTTP server threads > are blocked and this makes the Pulsar Admin API unavailable. > > To support the blocking servlet API, Jetty uses a default thread pool that > can grow to up to 200 threads > (https://github.com/eclipse/jetty.project/blob/4a0c91c0be53805e3fcffdcdcc9587d5301863db/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ExecutorThreadPool.java#L57) > . > However this default of 200 maximum threads is not used in Pulsar. > > The problem is that Pulsar uses a low value that assumes asynchronous API > usage: > https://github.com/apache/pulsar/blob/5c3ddc26d6e07eb0473b11b5ecc8318c1efe414b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java#L201-L204 > Pulsar should be using a high value (for example 200) as long as there are > blocking calls in Admin APIs. > > The mitigation to the issue of all HTTP server threads getting blocked is > setting "numHttpServerThreads=200" in broker.conf. > > Regarding the "make async" changes, It is an optimization to migrate from the > blocking servlet api to the asynchronous servlet api. This work isn't urgent > since we can simply mitigate the HTTP server threads getting blocked by > setting "numHttpServerThreads=200" in broker.conf. "the problem" will be > resolved immediately without risks of regressions that are involved in making > the sync -> async changes. > > Penghui, would you mind adding a GitHub issue for the problem where all HTTP > threads get blocked and the Pulsar Admin API stops responding? > > I can follow up with a PR which updates the default for numHttpServerThreads > to 200. This is a maximum value and Jetty starts with 8 threads. We can agree > on the default value to use in the PR. > > Thank you for the great collaboration on sharing the context and describing > the problem patiently. > > BR, > > -Lari >