perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Blackman <>
Subject Re: HTTP and MPM support
Date Mon, 28 Jan 2019 20:38:06 GMT

> On 27 Jan 2019, at 20:13, William A Rowe Jr <> wrote:
> On Fri, Jan 25, 2019 at 11:35 AM John Dunlap < <>>
> 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
> 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
View raw message