5400 conexiones [SOLUCIONADO]

Hola gente, se que no utilizamos Informix 9.21 pero igual dejo nuestra consulta:

Hoy notamos que uno de nuestros servidores Web se quedaba sin recursos, y notamos que habia màs de 4000 conexiones desde el servidor web hacia el servidor de BD Informix (puerto 1526). Conexiones al puerto 80 serìan unas 30.

En el Informix vimos que había unos 5400 sesiones activas todas provenientes del usuario de Internet, osea 3W
Las sesiones dentro del Informix estaban toda vivas, por ej alguna de ellas:
informix@ifxserver:~] onstat -g sql 3124552

IBM Informix Dynamic Server Version 11.50.FC6WE – On-Line – Up 73 days 10:12:18 – 5207832 Kbytes

Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers Explain
3124552 - fpoligrado CR Not Wait 0 0 9.22 Off

Last parsed SQL statement :
execute procedure sp_operaciones_net(‘15348’,‘10988566’,3)

Adjunto algunas capturas adicionales.

Por lo que pudimos ver, es como que no se estàn cerrando correctamente las sesiones que abren los alumnos desde el 3W…

Escucho ideas…


sesiones.JPG

sesiones.JPG_thumb.png

conections.JPG

conections.JPG_thumb.png

Hola Claudio

Están trabajando con conexiones persistentes desde el servidor web?
Pasate a v2.6.5

Emilio

Como podemos validar si estamos utilizando pconnect o no?
Estamos en v2.6.4

Conectamos vía ODBC

[Informix]
Description = ODBC para Informix
Driver = /opt/informix/lib/cli/iclis09b.so
Setup = /opt/informix/lib/cli/iclis09b.so
APILevel = 1
FileUsage = 0
CPReuse =
ConnectFunctions = YYY
SQLLevel = 1
smProcessPerConnect = Y

El que puede estar manteniendo las conexiones activas tambien es el apache.
que valor tenes en KeepAliveTimeout?

Emilio

El Apache estuvo siempre con
KeepAlive On
KeepAliveTimeout 5

Como se si el Guarani3W/PHP esta utilizando conexiones persistentes o no?

Cambiar el KeepAlive a Off no altero nada.
Las conexiones se siguen multiplicando en el motor.

Me ocurre esta situación cuando el motor se queda sin logical logs para usar y mantiene todas las conexiones desde el servidor web.
Cuando hago un respaldo de los mismos, se liberan todas esas conexiones.
Nunca llegué a tener tantas, pero habremos llegado a 350

Hola Claudio

Lo que estás viendo con el nbtstat son sockets abiertos entre dos máquinas.
Lo que sinceramente no tengo idea es quien los abre. Si el php se ejecuta como un modulo del apache, al socket lo abre el php o lo abre el apache? De acuerdo a eso habría que ver que configuración es la que hay que revisar.

Habría que revisar lo que dice Damian, pero te debería fallar si no hay logical logs.

Fijate en la funcion que establece la conexión desde el guarani si tenes $objCC->Connect
o PConnect.

Emilio

Tenemos un Connect, que es como viene original.

Problema de logical logs no tenemos…

Si ahora tenes muchas conexiones, probá de hacer un backup de logical logs y fijate que pasa
No cuesta nada y agregamos algo de información.

Tenemos un backup continuo de logical logs…por eso descarto que venga por ahí el problema. Aparte viene de hace días esto, y todos los días se toman varios backups completos, incluso exports donde se baja la instancia.

Por otro lado, consulto: estabamos biendo la v2.6.5, pero sigue utilizando Connect?

En la 2.6.5 se crea una clase class obj_conexion y se cambia la funcion Conectar
Fijate, por ahi te reduce la cantidad de conexiones.

Emilio

No le veo nada distinto a la función conectar de la 2065

$objCC = ADONewConnection($_SESSION[“sTipoCon”]);
$objCC->raiseErrorFn = ‘verificarError’;
$objCC->Connect($_SESSION[“sCon”], $_SESSION[“ses_sUser”], $_SESSION[“sPasswd”], $_SESSION[“sDB”]);

El asunto es que si una página anterior creo la clase, la siguiente la reusa y no abre una nueva conexion.
Con eso bajas las conexiones que usa cada alumno.

Claudio, la version 2.6.5 tiene optimizaciones en cuanto a las conexiones que se establecen desde G3w al motor, reduciendo considerablemente la comunicación entre ambos.

OK, en los próximos días haremos el versionado.
Por ahora lo que hicimos fue configurar las conexiones como persistentes con PConnect y de esa forma ya no vemos las miles de conexiones activas. Tampoco exesivos consumos de memoria en el servidor Web…cosas contrarías a las encontradas por la gente de UNC o La Plata…
Estaría bueno retomar este tema junto a esas Universidades para ver la situación actual y la solución que han encontrado ya que en este foro solo vi respuestas parciales y no se publicaron las configuraciones exitosas o actuales…

Saludos!

Hola Claudio,

En el último comité del año pasado presentamos las optimizaciones que nosotros desarrollamos en detalle, y para el que viene (el 27 de este mes) invitamos a éstas universidades para que compartan su experiencia en este sentido y cuenten en el comité cómo fueron sus experiencias, la configuración, medidas que tomaron, etc… Así que entendemos que será interesante.

Saludos,
Guillermo

Perfecto, voy a asistir asi que nos veremos por allà.

Saludos!

Hola Claudio

A esa clase y al cambio en la funcion conectar la podés usar en cualquier version.
Es independiente del resto.

Emilio

Te referis al Connect y PConnect o al std_functions.lib.php completo?

Por otro lado, les comento que seguimos con problemas. Luego de probar distintas conbinaciones de PConnect, Connect, KeepAlive On y Off, etc etc el servidor Web Apache sigue manteniendo conexiones activas con la base de datos a pesar de no haber nadie conectado. El problema es que al superar las 2000 el servidor se cae. La unica solucion hasta el momento es reinicios del servicio programados para eliminar estas conexiones.
Aparentemente esto comenzo a suceder luego de una actualización del sistema Linux completo, en donde se actualizo PHP (manteniendo la release 5.1) Apache, etc.