Demasiada conexión ESTABLISHED desde una única dirección IP en Apache

netstat -ntp |grep 80 muestra demasiada conexión ESTABLISHED desde una sola dirección IP. Alrededor de 300 de ellos y no es un ataque y el usuario está usando una conexión 2G para acceder a Apache. Este es el caso de otras conexiones 2G también. Como resultado de esto Apache se está quedando sin hijos.

Anteriormente estaba mostrando demasiados close_wait y después de habilitar tcp_tw_reuse y tcp_tw-recycle no hay mucho close_wait pero el número de conexiones ESTABLISHED aumentó.

Estamos usando Ubuntu 11.04 con 48 GB de RAM

 keepalive On keepalive timeout 10 max clients 800 max-request-perchild 4000 timeout 300 

He establecido syn_ack a 1 y syn_retries a 2.

En wifi no hay tal problema. Las conexiones se están cerrando correctamente, pero con conexiones 2G Apache se está quedando sin niños y demasiada conexión ESTABLISHED .

También he intentado establecer el tiempo de espera desde el valor predeterminado de 300 a 30, pero ya que nuestro proyecto es la imagen de alojamiento para teléfonos móviles, los clientes no podían cargar imágenes correctamente, ya que están recibiendo frecuentes time.Also había un montón de 408 mensajes, El valor predeterminado 300

Tcp_tw_reuse y tcp_tw-recycle y tcp-fin_timeout a 30

El fin timeout ayuda aquí, pero reutilizar y reccyle? ¿Por qué?

Keepalive tiempo de espera 10

Esto es una tontería. Incluso con dialup, esto debe ser 3 o menos.

Timeout 300

¿Sabes lo que esto hace? Este puede ser el predeterminado, pero es demasiado alto de nuevo.

Puede intentar capturar parte del tráfico usando wireshark para ver exactamente por qué las conexiones no se cierran.

¿Está usando mod_reqtimeout una opción

Sólo si el cliente está muy roto y no te molesta en proporcionar un servicio a ellos.

Debemos pasar al servidor ngnix

Sin duda, se encargará de las conexiones lentas mucho más fácilmente, sin embargo, es posible que desee utilizar como un proxy (y puede selectiva / transparentemente ruta particular subnets a través de este uso de iptables)

El problema está relacionado con clientes de baja velocidad. La mejor manera de resolver esto es utilizar la solución de proxy inversa, por ejemplo, nginx, barniz o software similar si desde su apache. Un buen servidor proxy inverso puede manejar miles de conexiones sin problemas.

¿Por qué es una buena idea configurar Nginx como proxy inverso?

¿Ha intentado dejar caer la directiva Timeout a algo mucho más bajo, como 10 o 5 ?

Alternativamente, puede intentar cambiar de MPM prefork (si es posible) y utilizar un modelo basado en eventos como el evento MPM en Apache 2.4 o un servidor web diferente como nginx.

También puede usar nginx (o similar) como un proxy inverso en frente de Apache. El proxy esperará hasta que haya recibido la solicitud completa antes de hacer la solicitud de upstream a Apache. Esta solicitud no tendrá retrasos en el medio de la misma.

El problema con el funcionamiento de los niños de Apache también puede ser causado o exacerbado por la configuración Keepalive que tiene. Considere la posibilidad de desactivar o disminuir el valor de keepalive timeout . Hacerlo demasiado bajo puede hacer inútil, por supuesto.