My load test is pretty mellow, I thought...

Originally was doing:
ab -c 15 -n 500 -s 10 https://mysite.com/

And this caused response times of ~8 sec

Trying again with:
ab -c 5 -n 500 -s 10 https://mysite.com/

still leads to ~3 sec response time. My hope was for this to be able to 
handle ~100 concurrent users, but I hadn't really thought about it in terms 
of requests/second...

I'm primarily worried about the base url handler, as the base url triggers 
a large get payload from an external API. Other url's have much faster 
response time.

I am just starting to get familiar with MPM's, and I'm still not entirely 
sure which MPM this server uses.

Because of this output: 

$ sudo ls /etc/apache2/mods-enabled/ 

access_compat.load authn_file.load authz_user.load dir.conf mime.conf 
*mpm_event.load* proxy.conf rewrite.load socache_shmcb.load wsgi.conf 

auth_basic.load authz_core.load deflate.conf dir.load mime.load 
negotiation.conf proxy.load setenvif.conf ssl.conf wsgi.load 

authn_core.load authz_host.load deflate.load filter.load mpm_event.conf 
negotiation.load proxy_http.load setenvif.load ssl.load


I believe I am using worker MPM. I was also confused by the blank "Server 
MPM:" line in this output:

$ apache2 -V 
[Thu Sep 17 17:16:46.880034 2020] [core:warn] [pid 26387] AH00111: Config 
variable ${APACHE_RUN_DIR} is not defined 
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: 
DefaultRuntimeDir must be a valid directory, absolute or relative to 
ServerRoot 
Server version: Apache/2.4.29 (Ubuntu) 
Server built: 2020-08-12T21:33:25 
Server's Module Magic Number: 20120211:68 
Server loaded: APR 1.6.3, APR-UTIL 1.6.1 
Compiled using: APR 1.6.3, APR-UTIL 1.6.1 
Architecture: 64-bit 
Server MPM: 
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"

I did not have WSGIRestrictEmbedded On, but tried adding it-- no effect.

I do not have any performance monitoring or backend metrics. I've been 
going purely off of htop (and other similar tools) and CloudWatch. I also 
tried https://django-debug-toolbar.readthedocs.io/en/latest/ locally but it 
wasn't very insightful to my issue.
On Thursday, September 17, 2020 at 2:06:08 AM UTC-4 Graham Dumpleton wrote:

> When you say "load test", do you mean totally overload the server way 
> beyond the realistic amount of traffic you would ever expect to get? :-)
>
> In other words, are you running tests like:
>
>     ab -c 15 -n 1000000000 http://mysite
>
> or:
>
>     siege -c 15 -t 120s http://mysite
>
> which is just throwing as many requests as absolutely possible at Apache?
>
> This is only going to likely cause Apache to choke up as you are putting 
> it into an overload state, made worse by number of server processes. It is 
> the wrong way of evaluating how much load your server can realistically 
> take.
>
> What is the real number of requests/sec you would expect to ever receive?
>
> Does every URL handler take 1 second to response, or are response times 
> across the site varied?
>
> What are the Apache MPM settings you have set? Since using prefork MPM, 
> what do you have set for:
>
> <IfModule mpm_prefork_module>
>     StartServers             1
>     MinSpareServers          1
>     MaxSpareServers         10
>     MaxRequestWorkers      250
>     MaxConnectionsPerChild   0
> </IfModule>
>
> Do you have:
>
>     WSGIRestrictEmbedded On
>
> set in Apache configuration (outside of VirtualHost)?
>
> And finally, do you have any performance monitoring in use, or at least 
> have a backend metrics database/service where could report metrics?
>
> Graham
>
> On 17 Sep 2020, at 3:21 pm, Scott McConnell <scott.mc...@gmail.com> wrote:
>
> Hello, I am using apache/mod_wsgi to serve a processor/ajax heavy Django 
> application on an Ubuntu 16.04 machine. The app is working with low traffic 
> on https (~1 sec response time), but I'm running into a bottleneck during 
> load testing. 
>
> During a load test (15 concurrent requestors) response time becomes ~6 
> sec, but CPU utilization peaks at 30% according to CloudWatch. I am using 
> an EC2 instance and I've been continually increasing the size with no 
> effect (now using c5.xlarge).
>
> The strange part is my htop output... one process is taking the majority 
> of the CPU time, whereas the wsgi daemon processes don't seem to take on 
> any tasks. This culprit process starts after I restart the server and never 
> dies until the server is stopped. 
>
> This was the output when I tried tracing the process:
>
> $ sudo strace -p 14645
>
> strace: Process 14645 attached
>
> restart_syscall(<... resuming interrupted restart_syscall ...>
>
> Below are some htop screenshots, and I pasted my config at the bottom. 
>
> When sorted by CPU utilization:
>
> <Screen Shot 2020-09-17 at 12.37.42 AM.png>
>
> then all the way at the bottom are my daemon processes named wsws:
>
> <Screen Shot 2020-09-17 at 12.35.47 AM.png>
>
> Here is my mysite.com.conf:
>
> <VirtualHost *:80>
>
>         ServerAdmin webmaster@localhost
>         ServerName mysite.com
>         ServerAlias www.mysite.com
>         DocumentRoot /var/www/html
>         ErrorLog ${APACHE_LOG_DIR}/error.log
>         CustomLog ${APACHE_LOG_DIR}/access.log combined
>         LogLevel info
>
>         <Directory /home/ubuntu/myrepo/mysite/static>
>                 Require all granted
>         </Directory>
>
>         <Directory /home/ubuntu/myrepo/mysite/mysite>
>                 <Files wsgi.py>
>                         Require all granted
>                 </Files>
>         </Directory>
>
>
>         WSGIDaemonProcess mysite python-path=/home/ubuntu/myrepo/mysite 
> python-home=/home/ubuntu/myrepo/venv processes=25 threads=1 
> display-name=wsws request-timeout=60 inactivity-timeout=600
>         WSGIProcessGroup mysite
>         WSGIScriptAlias / /home/ubuntu/myrepo/mysite/mysite/wsgi.py
>         WSGIApplicationGroup %{GLOBAL}
>         
>         RewriteEngine on
>         RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
>         RewriteCond %{SERVER_NAME} =mysite.com
>         RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} 
> [END,NE,R=permanent]
>
> </VirtualHost>
>
>
> -- 
> 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/modwsgi/3622efe1-62d3-4d07-99c9-74fac83541aen%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/modwsgi/3622efe1-62d3-4d07-99c9-74fac83541aen%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> <Screen Shot 2020-09-17 at 12.35.47 AM.png><Screen Shot 2020-09-17 at 
> 12.37.42 AM.png>
>
>
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/modwsgi/fdd3403c-ff19-42ee-b619-864b0341db7bn%40googlegroups.com.

Reply via email to