
Estoy buscando formas de optimizar nuestro servidor web actual alojado internamente. Estoy tratando de suministrar tantoimportanteinformación abajo. Por favor, avíseme si necesita información adicional para poder ayudar.
El servidor ejecuta 1 único sitio web, que es una plataforma de pedidos de pizza en línea construida en Zend Framework (ver1). Según las estadísticas de tráfico del último mes, aproximadamente 6.000 páginas cargadas por día, concentradas principalmente a la hora de la cena. En ese período se alcanzaron picos de alrededor de 1500 cargas/hora.
Recientemente actualizamos de una línea ADSL de 2/2 mbit a fibra de 100/100 mbit y todavía tenemos problemas de rendimiento a la hora de la cena. Supusimos que el problema eran los 2 mbit. El sitio web es bastante ágil en períodos de baja carga.
Hardware
CPU: Intel(R) Xeon(R) CPU 5160 @ 3.00GHz (3000.13-MHz K8-class CPU)
Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)
Filesystem Type Size Used Avail Capacity Mounted on
/dev/ad7s1a ufs 4.8G 768M 3.7G 17% /
devfs devfs 1.0K 1.0K 0B 100% /dev
/dev/ad7s1g ufs 176G 5.2G 157G 3% /home
/dev/ad7s1e ufs 4.8G 2.8M 4.5G 0% /tmp
/dev/ad7s1f ufs 19G 3.5G 14G 19% /usr
/dev/ad7s1d ufs 4.8G 550M 3.9G 12% /var
SO del servidor
FreeBSD 8.2-RELEASE
Software
apache-2.2.17
php5-5.3.8
mysql-server-5.5
Huella apache(ejemplo, tomado de # arriba)
31140 www 1 45 0 377M 41588K lockf 2 0:00 0.00% httpd
31122 www 1 44 0 375M 35416K lockf 2 0:00 0.00% httpd
31109 www 1 44 0 375M 38188K lockf 2 0:00 0.00% httpd
31113 www 1 44 0 375M 35188K lockf 2 0:00 0.00% httpd
Apache está utilizando el MPM previo al fork, APC (caché PHP alternativo). El módulo SSL está cargado, pero no se utiliza (ya que realmente no funciona, por lo que no se utiliza). Hay un archivo que contiene configuraciones para los módulos MPM, pero como veo, no está incluido en el archivo httpd.conf, la línea de inclusión está comentada. Por lo tanto, supongo que el MPM previo a la bifurcación también funciona con los valores predeterminados.
Aquí hay algunos otros valores de configuración de Apache que encontré, que están incluidos en https.conf
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
HostnameLookups Off
Cargar cuando se experimentan problemas de rendimiento
Nota: solicitudes de API al backend
En cuanto a nuestra plataforma online, se comunica con nuestro sistema backend a través de una API (GET/POST). Para cotizaciones de precios de cestas (almacenadas en caché hasta que se agregue un nuevo artículo), productos (almacenados en caché), precios de productos (almacenados en caché). Y el servidor backend en realidad muestra una carga real cuando aparecen problemas de rendimiento en la web. Así que me acerco más a que son las solicitudes de API las que tardan una eternidad en completarse, lo que retiene a los clientes en el servidor web. Entonces mi pregunta es, ¿son las estadísticas proporcionadas anteriormente (tráfico/carga) y la configuración actual del software? En comparación con las especificaciones de la conexión a Internet y el hardware, ¿son signos de un servidor estresado? ¿Y podría aumentar el número máximo de clientes en el servidor web, según los recursos disponibles y la huella real de Apache?
Respuesta1
El rendimiento del sitio web es un tema importante. Por lo que veo, lo más probable es que el problema no sea Apache.
Sin embargo, hay algunas cosas que pueden ayudarte a mejorar tu rendimiento.
¡Almacenamiento en caché! No sé cuánto almacena en caché su código PHP. Pero como no estás usando SSL y supongo que tienes muchos datos de sólo lectura, intentaBarniz
Permitirmod_expires
Perfile su sitio web/API backend conJMetro
Respuesta2
No, lo anterior no son signos de un servidor estresado.
Si bien es posible que esté experimentando una saturación de E/S de red (ya que no proporciona datos reales sobre ella), esto es extremadamente improbable con tan pocas solicitudes reales que ocurren durante las horas pico.
Debe ejecutar algunas pruebas en el backend HTTP para ver si se está ejecutando a su máxima capacidad. Si es así, entonces necesitas arreglar ESO.
Para referencia futura, debe configurar y utilizar elel estado del servidorcontrolador para monitorear Apache, como se documenta aquí:http://httpd.apache.org/docs/2.2/mod/mod_status.html
Respuesta3
El rendimiento de Apache se puede modificar con la configuración de Worker MPM y Prefork, alterar los subprocesos keepalive y max Spare podría ayudar a aumentar el rendimiento y consumir menos espacio de memoria. Puede encontrar la configuración óptima para Prefork y Worker enaquí
Respuesta4
Es posible que se esté quedando sin procesos (definidos por MaxSpareServers
y StartServers
). El valor predeterminado es solo 10, por lo que si sus tiempos de respuesta son altos, es posible que no sea suficiente para una solicitud cada 2 segundos (1500/hora).
Encienda el server-status
módulo para monitorear los procesos en uso.Asegúrese de establecer reglas de acceso para que solo sea accesible internamente.