2009-12-18 14 views
9

(EDIT: pregunta para hacerla más clara reescrito, el significado no ha cambiado)¿Cuál es el promedio típico de sesiones de ASP.NET por CPU o por memoria?

Puede crear una aplicación y medir su uso. Pero lo que me gustaría saber, si decide por adelantado sobre una aplicación ASP.NET, cuántos usuarios simultáneos (sesiones) caben en una máquina típicamente.

Supongamos la siguiente configuración simplificada predeterminada: sesiones Inproc, ASP.NET 3.5, NHibernate + L2 caché, sitio de compras (propiedades de la cesta en la sesión).

Aunque pude asegurar que la sesión no subiría por encima de, digamos, 20kB, mi experiencia me muestra que hay una gran sobrecarga en general, incluso con aplicaciones bien distribuidas. Estoy buscando ese simple cálculo que puedes hacer en una nota adhesiva.

Para bounty: qué CPU/Mem recomendaría su gestión para cada X usuarios simultáneos, ignorando los requisitos de ancho de banda. Es decir. y la respuesta podría ser: en un Xeon de 2 GHz con 1 GB de mem, Win2k8, que puede servir de manera segura 500 sesiones simultáneas, pero por encima de que requiere una cuidadosa planificación o más hardware re

+3

Esta es mi pregunta menos favorita para que la administración me pregunte. Es extremadamente difícil de responder, incluso incognoscible, ya que depende mucho del uso típico de la aplicación, que a veces no se conoce de antemano. Y lo que es confuso es que la gerencia a menudo ve el volumen en términos de "sesiones simultáneas" en lugar de "solicitudes por unidad de tiempo", que es una medida mucho más cognoscible. Espero que alguien tenga buenas reglas generales. – Jacob

Respuesta

7

Dado que estás buscando un número real, te proporcionaré algunos. Estamos creando una aplicación de recursos humanos segura que utiliza ASP.NET MVC. Al igual que usted, queríamos tener una buena idea de las conexiones concurrentes máximas, que definimos como el máximo de páginas atendidas en 10 segundos (se supone que un usuario no esperaría más de 10 segundos para una página).

Como estábamos buscando un límite superior, utilizamos una página muy simple. SSL + algunas variables de sesión. En un quad core Dual Xeon (8 núcleos en total), con 16 GB de memoria y SQL Express como back-end, pudimos conectar ~ 1,000 conexiones "concurrentes". Sin embargo, ni la memoria ni SQL express fueron los factores limitantes, fue principalmente el procesador & I/O para nuestra prueba. Tenga en cuenta que no usamos el almacenamiento en caché, aunque para un carrito de compras también lo dudo. Esta página golpeó la base de datos ~ 3 veces, y envió ~ 150 KB de datos (principalmente imágenes PNG, sin almacenamiento). Verificamos que se crearon 1,000 sesiones, aunque cada una era pequeña.

Nuestro punto de vista es que 1,000 es poco realista. Las pruebas que incluyen páginas con lógica de negocios y datos reales del usuario mostraron ~ 200 usuarios concurrentes máx. Sin embargo, algunos usuarios también ejecutarán informes, que podrían masticar un núcleo completo por hasta 30 segundos. En este escenario, 9 usuarios simultáneos de informes podrían básicamente hacer que el sistema no sea adecuado para otros. Esto es para los puntos del otro cartel ... puede obtener otros # de rendimiento todo lo que quiera, pero su sistema podría comportarse de manera completamente diferente en función de lo que está haciendo.

+0

Gracias por su respuesta detallada. Esto es muy útil y me acerca a una figura de "regla general", aunque uno podría argumentar que es muy específico solo para su situación (pero eso es lo que siempre será, y simplemente nos adaptamos). Tengo algunos problemas para decidir si debo darte la recompensa o Ameer Deen. Si bien considero que ambos son muy útiles, el suyo es el más cercano a responder la pregunta real, por ejemplo, elijo la suya. – Abel

7

¿sabe usted la "calidad" del código ?

código mal puede costar muy importante en el hardware, mientras que un buen código puede costar nada

de actualización basado en el comentario hace

unos años, tenía que mantener una aplicaciones mal hecho, que estaba utilizando 500 megs ram (alguna vez 1.5gig) y me tomaba minutos mostrar cosas, tuve que reescribir todo y después de eso, solo estaba tomando la cantidad de memoria necesaria (cerca de 10-15x menos) y era rápido para mostrar cosas Estoy hablando en milisegundos aquí.

El número de datos de bucle y mal almacenamiento en memoria caché que se hizo mal fue ... increíblemente triste de ver. Solo para decirte, tenía 3 versiones de una base de datos maldita en la memoria (así que 4 con la base de datos real) y el código tenía que actualizar todas las versiones una después de la otra. Todo lo demás en las aplicaciones se basó en las versiones en memoria.

De todos modos, al final. Eliminé 25 mil líneas de código.

Calidad del código IS importante.

segunda actualización

found this, might be good

tercera actualización

En una aplicación que estoy actualmente en desarrollo, asp.net 3.5 utilizando LINQ to SQL hablar (por supuesto) con SQL servidor 2005. muchos leen al DB y no tantos escriben.

en mi propia máquina de desarrollo, que es antigua prescott p4 con 3 gigas de ram.se necesita un promedio de 20 ms a 100 ms para cargar una página entera, dependerá qué página :-)

sesión (uso de memoria) es muy bajo, bajo forma 20k a ciencia cierta

si voy de aquí, mi mala matemática sería;

Si tengo 100 usuarios simultáneos, tomará aproximadamente 2 segundos cargar una página y usaría al menos 2 megas de RAM durante la sesión.

¿Necesita matemáticas? qué necesitas para 1 usuario y, a partir de eso, solo haz 1 usuario multiplica por WhatYouThinkYouShouldBeAbleToHandle

No creo que haya otra forma de averiguarlo. Porque de nuevo, el código debajo de la página sí importa.

+0

Buenos puntos. Pero solo la calidad del código no es una medida real (si se puede medir en absoluto) hacia el uso de la CPU o la memoria. – Abel

+0

@Abel, actualicé mi respuesta – Fredou

+0

Gracias por la edición, +1 por eso. Nunca quise decir que la calidad sea ** no ** importante. Es terriblemente importante. Sin embargo, el código incorrecto a menudo no es bien medible. Y un buen código puede contener errores graves (un ejemplo tonto reciente de un pequeño problema de subprocesos que causa incrementos de memoria impredecibles: código muy bueno, solo un error, enormes consecuencias, pero estoy a la deriva ...). Realmente, yo estaba detrás de una regla general aquí. ¿Sesiones de 25K en una máquina de 2Ghz/1GB? Nunca lo vi (1.5K está bien en programas buenos, .5K en peores), pero ¿dónde está el umbral general? – Abel

1

Depende mucho de la cantidad de trabajo que haga en el servidor. Algunas aplicaciones pueden hacer 100, otras solo 10.

+0

Estoy de acuerdo, pero 10s o 100s no suena que sea razonable pensar en miles o incluso en decenas de miles, ¿o no? – Abel

2

Obviamente lo entiendo depende de la aplicación y la mejor manera de entender lo que una aplicación puede hacer o apoyar es medirla. En el pasado, utilicé la metodología de análisis de costos de transacción de Microsoft para obtener algunas estimaciones bastante buenas. Lo he usado en el día con Site Server Commerce Edition 3.0 y hoy con las aplicaciones modernas de ASP.net y funciona bastante bien.

Este link es un fragmento de "Mejora del rendimiento de aplicaciones .Net y escalabilidad" libro de Microsoft y él se detallan las fórmulas se pueden utilizar con los datos de rendimiento (uso de la CPU, IIS contador, etc.) para calcular el número de usuarios que pueda soporte en su sitio. No pude publicar un segundo enlace al libro, pero si busca scalenet.pdf en Google/Bing lo encontrará. Espero que esto ayude

+0

Este es un enlace muy interesante. Sé todo sobre la medición, pero esto da un poco de método PoC que podría terminar siendo útil. No es una regla general, pero la respuesta más útil hasta ahora. – Abel

Cuestiones relacionadas