How are you measuring the rate at which data is being returned? Is there a specific client command you are using? If I know that I can test. Include any example of running it and what output you see and expect to see.
Thanks. Graham > On 7 Feb 2018, at 8:56 am, Charles Cazabon <[email protected]> wrote: > > Hi, > > I've run into an issue with a long-in-use mod_wsgi setup with WSGI daemon > processes. Specifically, the output of the application running under > mod_wsgi does not appear to be passed through the configured Apache output > filters, at least not with a rate limiting filter from the built-in > mod_ratelimit. > > Setup: > -Ubuntu Trusty server, x86/64 > -Python 2.7.6 (plus backported fixes, standard Ubuntu security updates) > -mod_wsgi v. 4.4.21 > > With a minimal Apache vhost config: > > <VirtualHost *:80> > ServerAdmin [email protected] > ServerName bwtest.example.com > DocumentRoot /var/www/bwtest/public_html > > ErrorLog /var/log/apache2/bwtest.example.com-error.log > CustomLog /var/log/apache2/bwtest.example.com-access.log combined > > # Limit bandwidth to 4Mbps/512KBps for transferring data > SetOutputFilter RATE_LIMIT > SetEnv rate-limit 512 > </VirtualHost> > > Downloads are limited to ~512KB/s as expected. If I add a WSGIDaemonProcess > to the config: > <VirtualHost *:80> > ServerAdmin [email protected] > ServerName bwtest.example.com > DocumentRoot /var/www/bwtest/public_html > > ErrorLog /var/log/apache2/bwtest.example.com-error.log > CustomLog /var/log/apache2/bwtest.example.com-access.log combined > > # Limit bandwidth to 4Mbps/512KBps for transferring data > SetOutputFilter RATE_LIMIT > SetEnv rate-limit 512 > > WSGIDaemonProcess bwtest.example.com \ > python-path=/usr/lib/python2.7 \ > processes=3 threads=8 \ > maximum-requests=1000 \ > shutdown-timeout=60 \ > display-name=bwtest.example.com > WSGIProcessGroup bwtest.example.com > WSGIScriptAlias / /var/www/bwtest/minimal.wsgi > </VirtualHost> > > And an absolutely minimal WSGI application (just hardcoded into the .wsgi > file) that transfers the same file: > import os.path > > BASEDIR = os.path.dirname(__file__) > DATAFILE = os.path.join(BASEDIR, 'public_html', '64M') > > data = open(DATAFILE, 'rb').read() > > class TestApp(object): > def __call__(self, environ, start_response): > status = '200 OK' > response_headers = [ > ('Content-type', 'application/octet-stream; charset=binary'), > ('Content-length', str(len(data))), > ('Content-Disposition', 'attachment; filename="64M.bin"'), > ] > start_response(status, response_headers) > return [data] > > application = TestApp() > > ... then the file is transferred at wire speed, seeming to bypass the > mod_ratelimit output filter. > > I realize 4.4.21 is not the current version, but the release notes for all > more recent versions contain nothing about this. I found nothing related in > the mailing list archives. Upgrading to the most recent mod_wsgi just to > confirm that doesn't affect it will take some time because it has to go > through acceptance testing. > > Are Apache output filters supposed to work with mod_wsgi and a daemon process? > > Thanks, > > Charles > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > <mailto:[email protected]>. > To post to this group, send email to [email protected] > <mailto:[email protected]>. > Visit this group at https://groups.google.com/group/modwsgi > <https://groups.google.com/group/modwsgi>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "modwsgi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/modwsgi. For more options, visit https://groups.google.com/d/optout.
