La mayoría de las empresas de hosting lo que pretenden es albergar cuantas más aplicaciones mejor en un mismo servidor. Eso significa más clientes dentro del mismo hardware y por lo tanto más ingresos. Para ello generan un único grupo de aplicaciones en el que se ejecutan todas las aplicaciones, lo que abre menos procesos simultánenos en el servidor y ahorra recursos. Como contrapartida las aplicaciones mal escritas pueden llegar a monopolizar los recursos del servidor y echar abajo a las demás.

La dificultad de esta técnica de gestión estriba en averiguar qué aplicación es la que está desbocada cuando aparecen los problemas, ya que al estar todas bajo el mismo proceso no hay forma de distinguir unas de otras para poder parar a la conflictiva.

Sabiendo que esto es práctica habitual, el equipo de ASP.NET ha introducido un nuevo ajuste en la configuración de ASP.NET 4.0 que permite distinguir los recursos utilizados por cada aplicación individualmente, aunque compartan el mismo proceso.

Para ello utilizan la nueva característica de Monitorización de recursos por dominio de aplicación (Application Domain Resource Monitoring o ARM), que como su propio nombre indica habilita la capacidad de controlar el uso de memoeria y CPU que hace cada dominio de aplicación. Como cada aplicación ASP.NET se ejecuta en su propio dominio de aplicación, gracias a esta característica es muy fácil controlar qué aplicaciones se están desmadrando.

Para habilitar el que esto funcione hay que editar el archivo aspnet.config. OJO, no es Web.config ni un archivo normal de configuración general del framework. Se encuentra en la carpeta "C:\Windows\Microsoft.NET\Framework\v4.0.30319" en sistemas de 32 bits y en "C:\Windows\Microsoft.NET\Framework64\v4.0.30319" en el caso de sistemas x64. No se trata de un archivo muy bien documentado, pero aquí puedes encontrar información sobre algunos de sus elementos.

Una vez abierto basta con añadir un nodo appDomainResourceMonitoring, así:

appDomainResourceMonitoring1

Al hacerlo conseguiremos que funcionen dos nuevos indicadores de rendimiento bajo el grupo "ASP.NET Applications": % Managed Processor Time y Managed Memory Used, que se corresponden con lo que ofrece el mencionado ARM:

appDomainResourceMonitoring2

Gracias a eso nos será muy fácil identificar aquellas aplicaciones rebeldes en el servidor aunque las ejecutemos todas bajo el mismo proceso de trabajo o grupo de aplicaciones.

¡Espero que te sea útil!

Escrito por un humano, no por una IA