No me dedico a la administración del sistema, pero sé cuándo el servidor está al máximo. Todas las solicitudes http tardan demasiado en completarse. Adjunto los procesos "principales" que se ejecutan en mi servidor.
¿Esto es normal? ¿Qué estoy haciendo mal?
(Puedo pegar más archivos si así lo solicita).
Por favor, tenga en cuenta que el servidor es para fines de prueba y el único usuario que accede a él soy yo en este momento.
Además, este es mi archivo apache2.conf:
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
DefaultType None
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Include mods-enabled/*.load
Include mods-enabled/*.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/
Este es el resultado del estado del servidor:
Apache Server Status for localhost
Server Version: Apache/2.2.22 (Debian) PHP/5.4.39-0+deb7u2 mod_wsgi/3.3 Python/
2.7.3
Server Built: Jul 24 2014 15:34:00
-------------------------------------------------------------------------------
Current Time: Tuesday, 23-Jun-2015 11:38:02 BST
Restart Time: Tuesday, 23-Jun-2015 11:33:36 BST
Parent Server Generation: 0
Server uptime: 4 minutes 25 seconds
Total accesses: 54 - Total Traffic: 58 kB
CPU Usage: u25.08 s1.64 cu0 cs0 - 10.1% CPU load
.204 requests/sec - 224 B/second - 1099 B/request
4 requests currently being processed, 3 idle workers
W_WW__..W.......................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
0-0 13852 0/4 _ 5.07 2218 90 0.0 0.00 0.00 11.11.11.111 server1.project NULL
/4
22/
1-0 13854 22/ W 5.87 2235 0 42.2 0.04 0.04 11.11.11.111 server2.project2 GET /ajax/period_stats/?object_id=16106&period_unit=month&perio
22
2-0 13855 0/9 _ 4.87 2211 460 0.0 0.00 0.00 11.11.11.111 server1.project NULL
/9
3-0 13857 0/8 _ 4.54 2218 341 0.0 0.01 0.01 11.11.11.111 server1.project NULL
/8
4-0 13858 6/6 W 4.61 2224 0 1.6 0.00 0.00 11.11.11.111 server2.project2 GET /ajax/period_stats/?object_id=16110&period_unit=month&perio
/6
5-0 13878 3/3 W 4.28 2224 0 0.5 0.00 0.00 11.11.11.111 server2.project2 GET /ajax/period_stats/?object_id=16104&period_unit=hour&period
/3
6-0 13881 0/0 W 0.00 2203 0 0.0 0.00 0.00 11.11.11.111 server2.project2 GET /ajax/period_stats/?object_id=16104&period_unit=hour&period
/0
7-0 13882 0/2 _ 5.27 2193 12446 0.0 0.00 0.00 11.11.11.111 server1.project NULL
/2
8-0 13885 0/1 _ 0.01 1086 1 0.0 0.00 0.00 localhost server1.project GET /server-status HTTP/1.0
/1
9-0 13886 0/0 W 0.00 0 0 0.0 0.00 0.00 ::1 server1.project GET /server-status HTTP/1.0
/0
10-0 13887 0/1 _ 5.92 1317 14928 0.0 0.00 0.00 11.11.11.111 server2.project2 POST /core/user/exits/ HTTP/1.1
/1
11-0 13888 0/1 _ 0.00 62 1 0.0 0.00 0.00 localhost server1.project GET /server-status HTTP/1.0
/1
Respuesta1
Como estás usando el módulo prefork y el servidor es solo para probar, puedes cambiar los valores: viendo que tienes 2 GB de RAM, yo pondría valores un poco más pequeños:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 4
MaxClients 16
MaxRequestsPerChild 50
</IfModule>
Esos son números "aleatorios", ya que no conozco su aplicación ni los datos que está administrando, pero deberían ser suficientes para realizar pruebas con menor impacto. Si va a publicar y esperar más usuarios, deberá ajustar esa configuración.
Puede ver en la documentación de Apache la explicación de esos valores, pero la versión corta es que con prefork MPM Apache creará un grupo de procesos para atender las solicitudes, con la configuración sugerida ese grupo será más pequeño.