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.

Reply via email to