On 10/06/2014, at 5:15 PM, Minh Tuan <[email protected]> wrote:
> Opps, I apology for my terrible mistake, because my error log actually is: > Embedded mode of mod_wsgi disabled by runtime configuration: > /home/app/public_html/wsgi/ussd_pull.wsgi > I set already: > WSGIDaemonProcess ussd_pull processes=3 threads=5 > > Now, if i have "WSGIRestrictEmbedded On" of top of apache config file, i > always get above error message and web responds code 500. > If i remove "WSGIRestrictEmbedded On", the web app will back to normal but > apply mode check i got the result: > mod_wsgi.application_group = '' You ran the test for which sub interpreter, it that for embedded mode vs daemon mode if you are printing out mod_wsgi.application_group. You want the one for mod_wsgi.process_group. Can you check again. Also indicate whether you have any other VirtualHost definitions which have WSGIScriptAlias directive in it. You might be falling back to a different VirtualHost due to an incomplete VirtualHost setup and/or use of an IP address to access server. Graham > This is strange as we intent to configure mod_wsgi run in daemon mode. > I think my Alias here still fine: > WSGIScriptAlias /ussd /home/app/public_html/wsgi/ussd_pull.wsgi > So how come the error happen? > > Regards, > Tuan. > > > On Tue, Jun 10, 2014 at 1:10 PM, Graham Dumpleton > <[email protected]> wrote: > The error: > > Embedded mode of mod_wsgi disabled by runtime configuration > > is likely indicative of what your problem is. > > It says that whatever URL you are asking for is resolving to a directory > containing a WSGI script where the name of the directory is: > > /home/app/public_html/wsgi/ota/wsgi > > This doesn't match the configuration your showed before for where the > application was being delegated to daemon process mode. > > You before had: > > WSGIDaemonProcess ussd_pull user=www-data group=www-data threads=200 > > WSGIScriptAlias /ussd /home/app/public_html/wsgi/ussd_pull.wsgi > > <Directory /home/app/public_html/wsgi> > > WSGIProcessGroup ussd_pull > > WSGIApplicationGroup %{GLOBAL} > > Require all granted > > </Directory> > > The URL you are requesting can't be for that and whatever URL you are using > is mapping to a WSGI application which isn't being delegated to a daemon > process properly and instead is running in embedded mode. > > This is evident because with WSGIRestrictEmbedded that error will only come > up if the WSGI application was going to run in embedded mode. > > Your performance issue thus is that running Python web applications in > embedded mode can be sub optimal, especially when you are completely > unrealistic in a benchmark as you are and are overloading the server beyond > what would likely be reasonable traffic for your web site. You made it worse > by issuing such a short test with only 1000 requests, because all you have > gone and measured is the startup delays in loading your web application > lazily into each Apache child worker process when it was started on demand to > suddenly meet the influx of traffic. > > Even if it had been properly delegated to the daemon process group, the > configuration of: > > WSGIDaemonProcess ussd_pull user=www-data group=www-data threads=200 > > is still way over the top on threads. > > I would start with using: > > WSGIDaemonProcess ussd_pull processes=3 threads=5 > > You don't need the user and group options when you want it to run as the > Apache user. > > Anyway, these are what you should do. > > 1. Find what part of the Apache configurations being used for the URL you are > requesting as it wasn't what you quoted before. You want the WSGIScriptAlias > that likely has: > > WSGIScriptAlias /ussd /home/app/public_html/wsgi/ota/wsgi/ussd_pull.wsgi > > 2. Show what the other WSGI directives are around that point and in > particular the context of where the WSGIProcessGroup directive is. RIght now > it doesn't appear to be at either VirtualHost scope or in a correctly defined > Directory block matching the directory '/home/app/public_html/wsgi/ota/wsgi'. > > 3. Fix anything and validate that the WSGI application is actually running in > daemon mode by following the test: > > > http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode > > 4. Drop the number of threads in the WSGIDaemonProcess that is being used, > perhaps starting with processes=3 and threads=5. > > 5. Keep in mind that running ab on a web server at full speed is a complete > unrealistic way of testing a server. Try instead with siege and use a > measured rate of traffic such as: > > siege -i -d 10 -c 100 http://10.8.39.26/ussd/main > > For 100 concurrent users even that is over the top as you wouldn't expect > users to be issuing requests very 10 seconds. > > 6. Go watch my PyCon talk: > > http://lanyrd.com/2013/pycon/scdyzk/ > > It explains the sort of scenario you triggered by the way things are setup > and they way you are testing it. > > Graham > > > > On 10/06/2014, at 3:45 PM, Minh Tuan <[email protected]> wrote: > >> Hi Graham, >> Sorry for late reply cause you make me realize that i have to do more study >> as i'm quite newbie in here. >> I read every words in your group, blog, also on stackoverflow that related >> to my configuration but seem i lack of many concepts thus cannot understand >> them thoroughly. >> >> Back to your questions, i tried some tests and don't know why getting >> unstable result (10.8.39.26 is my app server as you well know): >> >> >> app@application:~$ time curl "http://10.8.39.26:8080/ussd/main" > /dev/null >> 2&>1 >> >> >> real 0m0.025s >> >> user 0m0.000s >> >> sys 0m0.016s >> >> >> >> app@application:~$ time curl "http://10.8.39.26:8080/ussd/main" > /dev/null >> 2&>1 >> >> >> real 0m0.251s >> >> user 0m0.008s >> >> sys 0m0.012s >> >> >> Testing by: >> ab -n 1000 -c 200 http://10.8.39.26/ussd/main >> I got pretty good result as Time per request: 0.3 ms, Request per second: >> 3000 (#/sec). >> >> Testing by call Asynchronous requests with speed 100 request/sec, the app >> become laggy, Apache2 child processes reached to maximum (150), responded >> time at that moment is 3 seconds. After this test, i divide by time and get >> the number: ~50 requests/second that my web application can serve. >> >> About parameter as your advice: >> mod_wsgi.process_group = 'ussd_pull' >> mod_wsgi.application_group = '' >> Especially, i don't know where to put WSGIRestrictEmbedded directive. It >> should be "outside of any >> VirtualHost's". If i put it like this: >> >> WSGIRestrictEmbedded On >> <VirtualHost *:8080> >> ... >> </VirtualHost> >> >> The whole app is die with error log: Embedded mode of mod_wsgi disabled by >> runtime configuration: /home/app/public_html/wsgi/ota/wsgi >> >> As my python app is very tiny, it just dig in DB 1 fist time only, to >> retrieve a short text and dedicates that text in to global variable, then >> use this variables to respond every sequence requests, i expect my app can >> server at least 500 request/seconds as i'm in plenty of hardware resource. >> >> I'll upgrade to version 3.5 soon, it should be easy cause someone complied >> this version for my Debian distribution. >> >> Many thanks and wish you healthy. >> Tuan. >> >> >> >> On Mon, Jun 2, 2014 at 6:13 PM, Graham Dumpleton >> <[email protected]> wrote: >> What sort of throughput does your site get and how long is the average >> response time? >> >> A setting of threads=200 for daemon mode is ill advised and although the way >> mod_wsgi daemon works it should largely mitigate the problems that are >> caused by such an over the top value, Python's less than stellar threading >> model may cause issues. >> >> Also, have you validated that Apache is matching incoming requests properly >> and routing them into the daemon process? You can check where the request is >> being handled by doing the tests: >> >> >> http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode >> >> http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Sub_Interpreter_Being_Used >> >> To be safe and ensure things aren't executing in embedded mode, I would >> suggest adding WSGIRestrictEmbedded directive to disable embedded mode >> altogether. >> >> http://blog.dscpl.com.au/2009/11/save-on-memory-with-modwsgi-30.html >> http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html >> >> BTW, mod_wsgi version 3.4 has a security issue and you should try and >> upgrade, unless of course this is the patched version of the Debian package >> for mod_wsgi. >> >> >> http://blog.dscpl.com.au/2014/05/security-release-for-modwsgi-version-35.html >> >> Graham >> >> On 02/06/2014, at 9:04 PM, Minh Tuan <[email protected]> wrote: >> >>> Dear Graham, >>> - Apache prefork MPM settings: I have not touched it yet, thus it is >>> default: >>> - mod_wsgi version is 3.4, refer to your guide line here >>> - Apache version: >>> app@application:~/public_html/logs$ sudo apachectl -V >>> >>> Server version: Apache/2.4.9 (Debian) >>> >>> Server built: Mar 29 2014 22:29:22 >>> >>> Server's Module Magic Number: 20120211:31 >>> >>> Server loaded: APR 1.5.1, APR-UTIL 1.5.3 >>> >>> Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 >>> >>> Architecture: 64-bit >>> >>> Server MPM: prefork >>> >>> threaded: no >>> >>> forked: yes (variable process count) >>> >>> Server compiled with.... >>> >>> -D APR_HAS_SENDFILE >>> >>> -D APR_HAS_MMAP >>> >>> -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) >>> >>> -D APR_USE_SYSVSEM_SERIALIZE >>> >>> -D APR_USE_PTHREAD_SERIALIZE >>> >>> -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT >>> >>> -D APR_HAS_OTHER_CHILD >>> >>> -D AP_HAVE_RELIABLE_PIPED_LOGS >>> >>> -D DYNAMIC_MODULE_LIMIT=256 >>> >>> -D HTTPD_ROOT="/etc/apache2" >>> >>> -D SUEXEC_BIN="/usr/lib/apache2/suexec" >>> >>> -D DEFAULT_PIDLOG="/var/run/apache2.pid" >>> >>> -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" >>> >>> -D DEFAULT_ERRORLOG="logs/error_log" >>> >>> -D AP_TYPES_CONFIG_FILE="mime.types" >>> >>> -D SERVER_CONFIG_FILE="apache2. >>> conf" >>> >>> - Apache configure related mod_wsgi: >>> app@application:~$ sudo cat /etc/apache2/sites-available/ussd-pull.conf >>> >>> >>> >>> <VirtualHost *:8080> >>> >>> >>> # ---- Configure VirtualHost Defaults ---- >>> >>> >>> ServerAdmin [email protected] >>> >>> >>> DocumentRoot /home/app/public_html/http >>> >>> >>> <Directory /> >>> >>> Options FollowSymLinks >>> >>> AllowOverride None >>> >>> Require all granted >>> >>> </Directory> >>> >>> >>> <Directory /home/app/public_html/http/> >>> >>> Options Indexes FollowSymLinks MultiViews >>> >>> AllowOverride None >>> >>> Require all granted >>> >>> </Directory> >>> >>> >>> # ---- Configure WSGI Listener(s) ---- >>> >>> >>> WSGIDaemonProcess ussd_pull user=www-data group=www-data threads=200 >>> >>> WSGIScriptAlias /ussd /home/app/public_html/wsgi/ussd_pull.wsgi >>> >>> >>> <Directory /home/app/public_html/wsgi> >>> >>> WSGIProcessGroup ussd_pull >>> >>> WSGIApplicationGroup %{GLOBAL} >>> >>> Require all granted >>> >>> </Directory> >>> >>> >>> # ---- Configure Logging ---- >>> >>> >>> ErrorLog /home/app/public_html/logs/error.log >>> >>> LogLevel warn >>> >>> CustomLog /home/app/public_html/logs/access.log combined >>> >>> </VirtualHost> >>> >>> - wsgi file: >>> app@application:~$ sudo cat ~/public_html/wsgi/ussd_pull.wsgi >>> >>> >>> >>> import sys >>> >>> sys.path.insert(0,'/home/app/public_html/apps/ussd_pull') >>> >>> from ussd_pull import app as application >>> >>> - Python version: >>> app@application:~$ python >>> >>> >>> >>> Python 2.7.6 (default, Mar 22 2014, 15:40:47) >>> >>> [GCC 4.8.2] on linux2 >>> >>> Type "help", "copyright", "credits" or "license" for more information. >>> >>> >>> >>> >>> So shame that i dont know where MPM parameters are of Apache 2.4 so it >>> should default like 2.2 version: >>> <IfModule mpm_prefork_module> >>> StartServers 5 >>> MinSpareServers 5 >>> MaxSpareServers 10 >>> MaxClients 150 >>> MaxRequestsPerChild 0 >>> </IfModule> >>> and i've not installed the packet apache2-dev yet as your suggestions. >>> >>> Many thanks. >>> Tuan. >>> >>> >>> >>> On Mon, Jun 2, 2014 at 5:27 PM, Graham Dumpleton >>> <[email protected]> wrote: >>> >>> On 02/06/2014, at 8:18 PM, Ice Prince <[email protected]> wrote: >>> >>> > Hi list, >>> > Believe you are doing well. >>> > I'm configuring a web application which using Apache + mod_wsgi + Flask >>> > and i have performance issue now. >>> > My application is very tiny, it just responds some short text only. >>> > My apache MPM is prefork as default, wsgi is configured to run in daemon >>> > mode. >>> > Tested by ab -n 10000 -c 200 http:/test/test i got a very good result as >>> > Request per second: 1500#/sec, time per request just 0.6ms. >>> > But i make an actual testing which from test server, i fetch the url >>> > http:/test/test with speed is 100 request/second only, my web service >>> > become laggy, the response time reach to 3 seconds as my manual >>> > monitoring. >>> > After calculation i found the actual requests i can handle only 40 >>> > requests/second. >>> > I don't know how to do next, please give some some light. Many thanks. >>> >>> I would really need to see the Apache configuration related to mod_wsgi as >>> well as the Apache prefork MPM settings you have configured. >>> >>> So start by giving what you think covers that and I will ask for more if >>> you haven't supplied everything. >>> >>> Also confirm what version of mod_wsgi, Apache and Python you are using. >>> >>> Graham >>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "modwsgi" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/modwsgi/rufSwTh6PLI/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/modwsgi. >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> >>> -- >>> <====((=o-( ',_,' )-o=))=====> >>> >>> Bản chất tốt nhưng cuộc đời xô đẩy! >>> >>> -- >>> 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 http://groups.google.com/group/modwsgi. >>> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "modwsgi" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/modwsgi/rufSwTh6PLI/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/modwsgi. >> For more options, visit https://groups.google.com/d/optout. >> >> >> >> -- >> <====((=o-( ',_,' )-o=))=====> >> >> Bản chất tốt nhưng cuộc đời xô đẩy! >> >> -- >> 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 http://groups.google.com/group/modwsgi. >> For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "modwsgi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/modwsgi/rufSwTh6PLI/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/modwsgi. > For more options, visit https://groups.google.com/d/optout. > > > > -- > <====((=o-( ',_,' )-o=))=====> > > Bản chất tốt nhưng cuộc đời xô đẩy! > > -- > 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 http://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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/modwsgi. For more options, visit https://groups.google.com/d/optout.
