> On 27 Jan 2019, at 20:13, William A Rowe Jr <[email protected]> wrote: > > On Fri, Jan 25, 2019 at 11:35 AM John Dunlap <[email protected] > <mailto:[email protected]>> wrote: > I'm in the process of optimizing our web application for performance and one > thing that I was really excited to try was mod_http2 because it allows the > browser to send multiple requests through the same TCP connection with > compressed headers. However, when I enabled it and restarted apache I was > greeted with this: > > [Fri Jan 25 12:30:57.813355 2019] [http2:warn] [pid 10186] AH10034: The mpm > module (prefork.c) is not supported by mod_http2. The mpm determines how > things are processed in your server. HTTP/2 has more demands in this regard > and the currently selected mpm will just not do. This is an advisory warning. > Your server will continue to work, but the HTTP/2 protocol will be inactive. > > To this question, the answer should be blatantly obvious; http2 doesn't > simply support multiple requests (connection: keepalive solved that) > but supports parallel requests. This clearly isn't compatible with any > single-threaded/single-worker per connection strategy. > > A hybrid mod_prefork could be coded to dispatch all worker requests > across to distinct worker processes for a single connection, but I > don't anticipate anyone interested in doing such development. > > The last time I tried to use either mpm_worker or mpm_event my application > was plagued by seemingly random segfaults. Are there any plans to support > other MPM's? If not, the benefits of HTTP2 appear to be permanently out of > reach for our mod_perl applications and that, honestly, might force us into > seriously reevaluating our technology stack. :( > > Your compatibility with the worker MPM is likely much stronger than > with the event MPM; however... all request workers can behave in a > "free threaded" manner under mod_http2, eliminating the relative > simplicity of the worker MPM. Working out each and any of these > specific segfaults occurs is the only way to improve the situation. > > For the general mod_perl activity to increase, the Apache Perl Project > needs active volunteers and contributions. Consider this entire thread > an open invitation to participate.
Given that Perl is single-threaded by design and history and has no reliable support for threading, I think that mod_perl and direct http/2 support in the same instance are probably fundamentally incompatible. I.e. if you have 10 perl threads running (each in a single process), then it doesn’t matter if you can multiplex 20 http/2 connections, they will all just block. If you’re very attached to mod_perl, you should already be using a 2-tier strategy anyway, with N fat mod_perl Apache instances handling only HTTP/1.1 requests and a second front-end proxy layer of whatever front-end proxy makes sense handling HTTP/2 requests for both static and dynamic content requests. This was standard advice 20 years ago as far as I recall and is even more prudent now. - Mark
