I am currently processing the data when i receive it and then returning it within the same http request. The extended time out allows it to work for one single request so thank you! I agree that this does not look scalable... I have so many options. Am looking into video streaming and web sockets as well other than celery and rabbit mq.
On Monday, 30 October 2017 09:56:38 UTC+8, Graham Dumpleton wrote: > > Are you trying to process the data in realtime? > > A problem you might have is that if you are processing data in real time > and that cannot keep up with the rate at which data is being sent, then > buffering will occur between the Apache child worker processes doing the > proxying, and the mod_wsgi daemon processes. If things run slow enough, > then eventually you will trip Apache's timeout on blocked on write to a > connection. This timeout is dictated by the Apache Timeout directive. In > mod_wsgi-express that is set to 60 seconds by default. > > You could be exacerbating the issue if your processing of the video stream > is done in the daemon process and you are handling concurrent requests, > because that sounds like a CPU intensive activity. The global interpreter > lock in Python means that multithreading and CPU intensive tasks do not mix > well. > > First up I would suggest using 10 processes, but set threads to 1, to > ensure issue not caused by high CPU and multiple requests hitting the same > process. > > Next you could try overriding the socket timeout using > the --socket-timeout option to be larger than 60 seconds, even if only > initially to see if that helps the problem go away. In older versions of > Apache this was set as 300 seconds, but that is ridiculously high for the > majority of web applications. > > After that, should perhaps look at how you are processing the video > stream. Whether should save to a file and then queue a job in a background > task queuing system such as Celery to process it, with the original web > request returning as soon as the upload finishes. Then rely on slow polling > or other mechanisms to find out when video processing finished if need to > show result. > > Graham > > On 30 Oct 2017, at 12:44 pm, Isabelle <islan...@gmail.com <javascript:>> > wrote: > > I am attempting to upload a 1GB video file to my server and I was using > default. But now I have tried 10 processes with default threads and it > still gives a 504. Could there still be any component that needs a time > limit to be opened up? I expect to wait 10 minutes for this extracting to > be completed. > > [Mon Oct 30 01:20:47.352358 2017] [wsgi:error] [pid 25153:tid > 139819841537792] [remote 192.168.20.104:58706] Extracting frames from > video file. > [Mon Oct 30 01:21:36.750641 2017] [wsgi:error] [pid 25158:tid > 139820955944704] [client 192.168.20.104:58706] Timeout when reading > response headers from daemon process 'localhost:5001': > /tmp/mod_wsgi-localhost:5001:0/htdocs/videohandler > > > On Friday, 27 October 2017 18:40:44 UTC+8, Graham Dumpleton wrote: >> >> A 504 is going to be because you exceeded capacity of what daemon >> processes could handle. >> >> What are you setting processes/threads to, or are you using default, with >> is 1 process with 5 threads? >> >> On 27 Oct 2017, at 8:55 pm, Isabelle <islan...@gmail.com> wrote: >> >> Thanks that works, then i run into a 504 time out. Is there a max >> execution time setting too? I tried --max-execution-time but it doesnt >> have that option... ( is there a complete listing somewhere for options or >> am I missing it? ) >> >> On Friday, 27 October 2017 12:06:29 UTC+8, Graham Dumpleton wrote: >>> >>> >>> On 27 Oct 2017, at 2:58 pm, Isabelle <islan...@gmail.com> wrote: >>> >>> Hi it turns out I had to give my new user access to some folders to do >>> read/writes. >>> >>> I am having a problem with it throwing a 413 error. I checked my apache >>> config and there was no LimitRequestBody >>> <http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody> field >>> in it. I purposely set it to unlimited but i still get the 413. So just >>> wondering does mod_wsgi-express control the size of input files sent >>> over POST and where to set it? >>> >>> >>> Yes, mod_wsgi-express does set a default for it, because having no >>> default is a bad idea as it can actually be used as a denial of service >>> attack vector. >>> >>> The option to change it is: >>> >>> --limit-request-body NUMBER >>> The maximum number of bytes which are allowed >>> in a >>> request body. Defaults to 10485760 (10MB). >>> >>> If you set it to 0, it will be back to unlimited. >>> >>> The better thing to do is to work out what URLs actually require a >>> higher limit and change it for just those. >>> >>> This can be done by creating a limits.conf file which contains: >>> >>> <Location /some/url >>> # 100MB >>> LimitRequestBody 104857600 >>> </Location> >>> >>> Then use the option '--include-file limits.conf' to have the partial >>> configuration file included at the end of the generated Apache >>> configuration file. >>> >>> Another option is to set overall limit higher, but then make it lower >>> for just GET requests, which usually wouldn't have request content. >>> >>> # By default unlimited. >>> >>> LimitRequestBody 0 >>> >>> <Limit GET> >>> # Set limit for GET to 1MB. >>> LimitRequestBody 1048576 >>> </Limit> >>> >>> Graham >>> >>> On Thursday, 19 October 2017 18:41:52 UTC+8, Graham Dumpleton wrote: >>>> >>>> >>>> On 19 Oct 2017, at 8:16 pm, Isabelle <islan...@gmail.com> wrote: >>>> >>>> Thank you. I was able to run this hello world >>>> >>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>> >>>> (saved as wsgi.py) >>>> >>>> def application(environ, start_response): >>>> >>>> status = '200 OK' >>>> output = 'Hello World!' >>>> >>>> response_headers = [('Content-type', 'text/plain'), >>>> ('Content-Length', str(len(output)))] >>>> >>>> start_response(status, response_headers) >>>> >>>> return [output] >>>> >>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>> >>>> with these added to my docker file: >>>> >>>> RUN apt-get update && \ >>>> apt-get install -y --no-install-recommends apache2 apache2-dev locales >>>> && \ >>>> apt-get clean && \ >>>> rm -r /var/lib/apt/lists/* >>>> >>>> RUN pip install --no-cache-dir mod_wsgi >>>> >>>> >>>> Copy your requirements.txt to the image and use: >>>> >>>> RUN pip install --no-cache-dir -r requirements.txt >>>> >>>> RUN adduser --disabled-password --gecos "apache" --uid 1001 --gid 0 >>>> --home /app apache && \ >>>> chmod g+w /etc/passwd >>>> >>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>> >>>> mod_wsgi-express start-server --port "8080" --user apache >>>> --log-to-terminal wsgi.py >>>> >>>> and then i tried my own >>>> >>>> >>>>>>>>>>>>>>>> >>>> >>>> (saved as wsgi2.py) >>>> >>>> import sys >>>> >>>> #Expand Python classes path with your app's path >>>> sys.path.insert(0, "/app") >>>> >>>> from manage import app as application >>>> >>>> >>>>>>>>>>>>>>>> >>>> >>>> mod_wsgi-express start-server --port "8080" --user apache >>>> --log-to-terminal wsgi2.py >>>> >>>> >>>> And got something running but with some dependencies not found, which >>>> is strange. But I was indeed running things from root without a python >>>> virtual environment previously. So will probably have to dig around there >>>> to figure how it works now that the dockerfile set up a new user account. >>>> >>>> >>>> >>>> On Thursday, 19 October 2017 09:36:57 UTC+8, Isabelle wrote: >>>>> >>>>> Hi, I have been attempting to do the hello world on a docker-ce but >>>>> failling and would like to make a hello world for mod wsgi work. I am >>>>> currently stuck and not sure how to proceed because I don't see error >>>>> messages from the mod wsgi >>>>> >>>>> >>>>> Client: >>>>> Version: 17.09.0-ce >>>>> API version: 1.32 >>>>> Go version: go1.8.3 >>>>> Git commit: afdb6d4 >>>>> Built: Tue Sep 26 22:42:18 2017 >>>>> OS/Arch: linux/amd64 >>>>> >>>>> Server: >>>>> Version: 17.09.0-ce >>>>> API version: 1.32 (minimum version 1.12) >>>>> Go version: go1.8.3 >>>>> Git commit: afdb6d4 >>>>> Built: Tue Sep 26 22:40:56 2017 >>>>> OS/Arch: linux/amd64 >>>>> Experimental: false >>>>> >>>>> with ubuntu >>>>> >>>>> more /etc/lsb-release >>>>> DISTRIB_ID=Ubuntu >>>>> DISTRIB_RELEASE=16.04 >>>>> DISTRIB_CODENAME=xenial >>>>> DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS" >>>>> >>>>> and apache and python2 >>>>> >>>>> apache2ctl -M >>>>> AH00558: apache2: Could not reliably determine the server's fully >>>>> qualified domain name, using 172.17.0.2. Set the 'ServerName' directive >>>>> globally to suppress this message >>>>> Loaded Modules: >>>>> core_module (static) >>>>> so_module (static) >>>>> watchdog_module (static) >>>>> http_module (static) >>>>> log_config_module (static) >>>>> logio_module (static) >>>>> version_module (static) >>>>> unixd_module (static) >>>>> access_compat_module (shared) >>>>> alias_module (shared) >>>>> auth_basic_module (shared) >>>>> authn_core_module (shared) >>>>> authn_file_module (shared) >>>>> authz_core_module (shared) >>>>> authz_host_module (shared) >>>>> authz_user_module (shared) >>>>> autoindex_module (shared) >>>>> deflate_module (shared) >>>>> dir_module (shared) >>>>> env_module (shared) >>>>> filter_module (shared) >>>>> mime_module (shared) >>>>> mpm_event_module (shared) >>>>> negotiation_module (shared) >>>>> setenvif_module (shared) >>>>> status_module (shared) >>>>> wsgi_module (shared) >>>>> >>>>> dpkg -s libapache2-mod-wsgi >>>>> Package: libapache2-mod-wsgi >>>>> Status: install ok installed >>>>> Priority: optional >>>>> Section: httpd >>>>> Installed-Size: 242 >>>>> Maintainer: Ubuntu Developers >>>>> Architecture: amd64 >>>>> Source: mod-wsgi >>>>> Version: 4.3.0-1.1build1 >>>>> Provides: httpd-wsgi >>>>> Depends: libc6 (>= 2.14), libpython2.7 (>= 2.7), apache2-api-20120211, >>>>> apache2-bin (>= 2.4.16), python (>= 2.7), python (<< 2.8) >>>>> Conffiles: >>>>> /etc/apache2/mods-available/wsgi.conf c4ca5be35d0820b5d5cc2892097b476b >>>>> /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6 >>>>> Description: Python WSGI adapter module for Apache >>>>> The mod_wsgi adapter is an Apache module that provides a WSGI (Web >>>>> Server >>>>> Gateway Interface, a standard interface between web server software and >>>>> web applications written in Python) compliant interface for hosting >>>>> Python >>>>> based web applications within Apache. The adapter provides >>>>> significantly >>>>> better performance than using existing WSGI adapters for mod_python or >>>>> CGI. >>>>> . >>>>> This package provides module for Python 2.X. >>>>> Original-Maintainer: Debian Python Modules Team >>>>> Homepage: http://www.modwsgi.org/ >>>>> >>>>> root@e3807b2573b3:/usr/lib/apache2/modules# ldd mod_wsgi.so >>>>> linux-vdso.so.1 => (0x00007fff4fbd3000) >>>>> libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 >>>>> (0x00007f0041a33000) >>>>> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 >>>>> (0x00007f0041816000) >>>>> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f004144b000) >>>>> libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0041231000) >>>>> libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f004102d000) >>>>> libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f0040e29000) >>>>> libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0040b20000) >>>>> /lib64/ld-linux-x86-64.so.2 (0x000056530c32f000) >>>>> >>>>> I have created the following files >>>>> >>>>> /usr/local/www/wsgi-scripts/myapp.wsgi >>>>> >>>>> def application(environ, start_response): >>>>> status = '200 OK' >>>>> output = 'Hello World!\n' >>>>> response_headers = [('Content-type', 'text/plain'), >>>>> ('Content-Length', str(len(output)))] >>>>> start_response(status, response_headers) >>>>> return [output] >>>>> >>>>> /etc/apache2/sites-available/myapp.conf >>>>> >>>>> >>>>> ServerName example.com >>>>> >>>>> DocumentRoot /usr/local/www/documents >>>>> >>>>> Order allow,deny >>>>> Allow from all >>>>> >>>>> WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi >>>>> >>>>> Order allow,deny >>>>> Allow from all >>>>> >>>>> I have run the command, "a2ensite myapp" >>>>> >>>>> And then I restart apache2 "/etc/init.d/apache2 restart" >>>>> >>>>> And I attempt to view 172.17.0.2/myapp from my browser and it gives >>>>> me a 404 >>>>> >>>>> 172.17.0.2 shows me the apache homepage >>>>> >>>>> My apache log file is giving print outs from my previous failed >>>>> attempt to try out flask modwsgi and apache ... I am not sure what I am >>>>> looking at. >>>>> >>>>> [Thu Oct 19 01:19:46.036918 2017] [wsgi:warn] [pid 4016:tid >>>>> 140327866734464] mod_wsgi: Compiled for Python/2.7.11. >>>>> <http://2.7.0.11/> >>>>> [Thu Oct 19 01:19:46.036971 2017] [wsgi:warn] [pid 4016:tid >>>>> 140327866734464] mod_wsgi: Runtime using Python/2.7.12. >>>>> <http://2.7.0.12/> >>>>> [Thu Oct 19 01:19:46.037195 2017] [wsgi:debug] [pid 4016:tid >>>>> 140327866734464] src/server/mod_wsgi.c(7362): mod_wsgi (pid=4016): Socket >>>>> for 'webtool' is '/var/run/apache2 >>>>> /wsgi.4016.0.1.sock'. >>>>> [Thu Oct 19 01:19:46.037229 2017] [wsgi:debug] [pid 4016:tid >>>>> 140327866734464] src/server/mod_wsgi.c(7420): mod_wsgi (pid=4016): Listen >>>>> backlog for socket '/var/run/apach >>>>> e2/wsgi.4016.0.1.sock' is '100'. >>>>> [Thu Oct 19 01:19:46.037465 2017] [wsgi:info] [pid 4019:tid >>>>> 140327866734464] mod_wsgi (pid=4019): Starting process 'webtool' with >>>>> uid=33, gid=33 and threads=5. >>>>> [Thu Oct 19 01:19:46.037594 2017] [wsgi:info] [pid 4019:tid >>>>> 140327866734464] mod_wsgi (pid=4019): Initializing Python. >>>>> [Thu Oct 19 01:19:46.037890 2017] [mpm_event:notice] [pid 4016:tid >>>>> 140327866734464] AH00489: Apache/2.4.18 (Ubuntu) mod_wsgi/4.3.0 >>>>> Python/2.7.12 configured -- resuming n >>>>> ormal operations >>>>> [Thu Oct 19 01:19:46.037904 2017] [mpm_event:info] [pid 4016:tid >>>>> 140327866734464] AH00490: Server built: 2017-09-18T15:09:02 >>>>> [Thu Oct 19 01:19:46.037915 2017] [core:notice] [pid 4016:tid >>>>> 140327866734464] AH00094: Command line: '/usr/sbin/apache2' >>>>> [Thu Oct 19 01:19:46.037919 2017] [core:debug] [pid 4016:tid >>>>> 140327866734464] log.c(1546): AH02639: Using SO_REUSEPORT: yes (1) >>>>> [Thu Oct 19 01:19:46.037954 2017] [wsgi:info] [pid 4020:tid >>>>> 140327866734464] mod_wsgi (pid=4020): Initializing Python. >>>>> [Thu Oct 19 01:19:46.038284 2017] [wsgi:info] [pid 4021:tid >>>>> 140327866734464] mod_wsgi (pid=4021): Initializing Python. >>>>> [Thu Oct 19 01:19:46.044567 2017] [wsgi:info] [pid 4019:tid >>>>> 140327866734464] mod_wsgi (pid=4019): Attach interpreter ''. >>>>> [Thu Oct 19 01:19:46.044844 2017] [wsgi:debug] [pid 4019:tid >>>>> 140327762720512] src/server/mod_wsgi.c(7971): mod_wsgi (pid=4019): >>>>> Started >>>>> thread 0 in daemon process 'webto >>>>> ol'. >>>>> [Thu Oct 19 01:19:46.044904 2017] [wsgi:debug] [pid 4019:tid >>>>> 140327745910528] src/server/mod_wsgi.c(7971): mod_wsgi (pid=4019): >>>>> Started >>>>> thread 2 in daemon process 'webto >>>>> ol'. >>>>> [Thu Oct 19 01:19:46.044896 2017] [wsgi:debug] [pid 4019:tid >>>>> 140327754319616] src/server/mod_wsgi.c(7971): mod_wsgi (pid=4019): >>>>> Started >>>>> thread 1 in daemon process 'webto >>>>> ol'. >>>>> [Thu Oct 19 01:19:46.044935 2017] [wsgi:debug] [pid 4019:tid >>>>> 140327737509632] src/server/mod_wsgi.c(7971): mod_wsgi (pid=4019): >>>>> Started >>>>> thread 3 in daemon process 'webto >>>>> ol'. >>>>> [Thu Oct 19 01:19:46.044961 2017] [wsgi:debug] [pid 4019:tid >>>>> 140327729108736] src/server/mod_wsgi.c(7971): mod_wsgi (pid=4019): >>>>> Started >>>>> thread 4 in daemon process 'webto >>>>> ol'. >>>>> [Thu Oct 19 01:19:46.054970 2017] [wsgi:info] [pid 4020:tid >>>>> 140327866734464] mod_wsgi (pid=4020): Attach interpreter ''. >>>>> [Thu Oct 19 01:19:46.054970 2017] [wsgi:info] [pid 4021:tid >>>>> 140327866734464] mod_wsgi (pid=4021): Attach interpreter ''. >>>>> [Thu Oct 19 01:19:46.055565 2017] [mpm_event:debug] [pid 4021:tid >>>>> 140327779505920] event.c(2094): AH02471: start_threads: Using epoll >>>>> [Thu Oct 19 01:19:46.055571 2017] [mpm_event:debug] [pid 4020:tid >>>>> 140327779505920] event.c(2094): AH02471: start_threads: Using epoll >>>>> >>>> >>>> -- >>>> 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 modwsgi+u...@googlegroups.com. >>>> To post to this group, send email to mod...@googlegroups.com. >>>> Visit this group at https://groups.google.com/group/modwsgi. >>>> For more options, visit 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 modwsgi+u...@googlegroups.com. >>> To post to this group, send email to mod...@googlegroups.com. >>> Visit this group at https://groups.google.com/group/modwsgi. >>> For more options, visit 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 modwsgi+u...@googlegroups.com. >> To post to this group, send email to mod...@googlegroups.com. >> Visit this group at https://groups.google.com/group/modwsgi. >> For more options, visit 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 modwsgi+u...@googlegroups.com <javascript:>. > To post to this group, send email to mod...@googlegroups.com <javascript:> > . > Visit this group at https://groups.google.com/group/modwsgi. > For more options, visit 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 modwsgi+unsubscr...@googlegroups.com. To post to this group, send email to modwsgi@googlegroups.com. Visit this group at https://groups.google.com/group/modwsgi. For more options, visit https://groups.google.com/d/optout.