Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.400
Estimados, tengo un problema con una app web echa en asp clasic + sql server. Resulta que virtualizamos la maquina donde corria la app y el rendimiento se fue a las pailas. Al revisar los graficos de IO, memoria,procesador todo se ve bien por lo que no me hacia ningun sentido la perdida de rendimiento. Sin embargo al revisar el codigo de la app me encontre con un for gigante que "podria" ser la causa del problema.
En vista de esto realice en un pequeño scrip con un loop infinito en asp y revise como corría en el servidor..... sorpresa el cpu nunca llego al 100%..... pero si al 25%... al revisar con mas detalle con process explorer cache que el iis esta haciendo contextswitch entre todos los cores.... o sea basicamente nunca veo reflejado el uso de un core al 100% que es lo que en realidad esta pasando con ese loop infinito. La única forma de reflejar el uso del 100% fue dejar el proceso de iis con afinidad de un solo core.
¿Existe alguna forma forma de desactivarle el context switch al iis de forma de ver si en realidad estoy limitado por cpu en esta app?, esto por que la maquina fisica donde corria era un xeon de la epoca de los p4 de 3ghz y el servidor donde corre actualmente es un operon magnycours de 2.4.
 

Harima

Pegao al tarro
Se incorporó
15 Mayo 2008
Mensajes
3.930
Es así a secas o. NET, nosotros tenemos un sistema así y hay que ponerle unos parches del Framework 1.1 o se va a las pailas, en conjunto con un mantenimiento de la bd, sino se queda esperando info hasta que da timeout por la BD

Enviado desde mi SM-J500M mediante Tapatalk
 
Upvote 0

Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.400
Segun yo es classic asp (no cacho mucho del mundo wintendistico para desarrollar webapps) pero el application pool del iis donde corre esta configurado como net 2.0 con canalización integrada.
 
Upvote 0

Cosme

Gold Member
Se incorporó
27 Febrero 2005
Mensajes
8.276
pero si la app corre un solo for, por supuesto que te comera UN solo CORE, osea, esta usando 100% en ese ciclo for.

Se podria saber que hace? quizas es por otro tema.
 
Upvote 0

Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.400
A ver el problema es el siguiente, corrí este código en el asp con su config por defecto...
Código:
<%
Dim i
For i=1 to 10000000000 step 1
next
Response.Write i & "<br>"
%>

Y el uso de cpu es este...
IIS Defecto.png


Cuando lo que debería ser es esto...
AFINIDAD1CORE.png


De la primera forma jamas me enterare que tengo cuello de botella de cpu, por mucho que monitorice el servidor. Todo por que al iis le da por hacer contexswitch. Puede existir el medio HORROR en el código y nada me avisara que es asi. Yo SOSPECHO que es lo que pasa en nuestra app que anda lento pero no tengo como "demostrarlo" gracias al contexswitch y nadie quiere meter mano en ese código que existe de tiempos milenarios y hace miles de tonterias
 
Upvote 0

Cosme

Gold Member
Se incorporó
27 Febrero 2005
Mensajes
8.276
shuuu, quien tan aweonao de hacer eso para esperar :zippypozo

se que se puede hacer que IIS use en un pool de apps un solo core, pero no se hacerlo, y no tengo ni un iis a mano para probar.
 
Upvote 0

Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.400
ajauaju no, ese no es código "real" es simplemente código de pruebas para ver el comportamiento del iis ante un for mal echo.
El código real es un for de aprox 50.000 ciclos llamando a funciones ultracomplicadas. Pero mis gráficos de CPU de cacti me muestran un comportamiento muy similar al del primer gráfico cuando corre ese proceso. Por eso "creo" que la porquería esta limitada por cpu y simplemente anda mas lento por bajar de 3 ghz a 2.4 .
Ante esto la solución real al problema es meterle mano al código, pero necesito demostrar que es ese el problema, dado que hasta ahora son solo teorías.
 
Upvote 0

Kitsune

Fanático
Se incorporó
5 Mayo 2006
Mensajes
1.029
al parecer se puede settear la afinidad al pool de la aplicación, así no tienes que dejar todo el iis con 1 core.
me imagino te serviría para demostrar la teoria y así gestionar el arreglo de esa shet..

básicamente es activar la opción SMPAffinitized
y despues setear la afinidad al pool de la aplicación,

http://serverfault.com/questions/471105/formula-for-processor-affinity-mask-iis
http://www.iis.net/configreference/system.applicationhost/applicationpools/add/cpu
https://www.microsoft.com/technet/p...52d-57ac-4aa6-8273-b8ac1bbaf898.mspx?mfr=true

tambien podrías jugar con estas propiedades relacionadas con el uso del context switching.
  • AspThreadGateLoadHigh Sets the high value for thread gating. IIS deactivates threads to reduce the amount of context switching when processor utilization rises above this value. This is a precautionary measure to improve performance under heavy loads.

  • AspThreadGateLoadLow Sets the low value for thread gating. IIS increases the number of active threads when processor utilization drops below this value. This is a precautionary measure in case there are blocking threads.
 
Upvote 0
Se incorporó
21 Julio 2009
Mensajes
221
Tengo algunos tips para hacer correr aplicaciones en ASP Clásico en los Sistemas Windows posteriores a XP:
  • La carpeta de la aplicación en el servidor web debe tener TODOS los permisos de escritura habilitados.
  • En IIS se deben revisar ciertas configuraciones para la correcta ejecución de la aplicación (ver link).
  • Al instalar IIS se deben instalar los componentes ASP y ASP.NET
  • Se debe convertir la carpeta de la aplicación web estableciendo "Classic .NET AppPool".
  • En Windows 64-bit se debe "Habilitar Aplicaciones 32-bits" en las opciones avanzadas de los Application Pools dejándolo éste en verdadero.
  • Para visualizar errores avanzados que pudiese tener la aplicación, en la página principal de IIS, seleccionar el ícono ASP, en las opciones de depuración, seleccionar "Enviar Errores al Servidor", dejándolo éste en verdadero.
Espero sirva de ayuda.
 
Upvote 0

Soujiro

Fanático
Se incorporó
14 Enero 2008
Mensajes
1.400
ups nunca actualize esto, al final la teoria era correcta. Basicamente codigo mal echo que corre en un solo core y es utra dependiente de la velocidad del core, y no es posible arreglarlo, lo mejor es tirar todo a la basura y hacer la app de nuevo pero no es "prioridad" por ahora.

Respecto a los tips del post anterior los aplique todos :circulos
 
Upvote 0
Se incorporó
21 Julio 2009
Mensajes
221
ups nunca actualize esto, al final la teoria era correcta. Basicamente codigo mal echo que corre en un solo core y es utra dependiente de la velocidad del core, y no es posible arreglarlo, lo mejor es tirar todo a la basura y hacer la app de nuevo pero no es "prioridad" por ahora.

Respecto a los tips del post anterior los aplique todos :circulos

Cuando nada funciona, aplicar reingenieria.
 
Upvote 0
Subir