Compartir a través de


Procedimiento para registrar o eliminar del Registro un contador de rendimiento

Última modificación: jueves, 03 de marzo de 2011

Hace referencia a: SharePoint Foundation 2010

En este tema se explica cómo registrar un contador de rendimiento de Windows Server 2008 para que lo supervise el sistema de limitación de peticiones HTTP y supervisión del rendimiento de Microsoft SharePoint Foundation. También se describe cómo quitar un contador del sistema.

Nota importanteImportante

En el ejemplo que se ejecuta en este tema se usa una aplicación de consola. Independientemente del tipo de proyecto, es importante establecer la CPU y el .NET Framework de destino correctos. El proyecto debe tener como destino Microsoft .NET Framework 3.5 (no .NET Framework 4). La CPU de destino debe ser cualquier CPU o x64. Para obtener información sobre esta elección, vea Procedimiento para establecer el marco de destino y CPU correctos. La CPU de destino es generalmente x86 de manera predeterminada. Para cambiarla, haga clic con el botón secundario en el nombre del proyecto en el Explorador de soluciones y seleccione Propiedades. Puede cambiar la CPU en la ficha Compilar mediante la lista desplegable Destino de la plataforma.

Persistencia de los monitores y las calculadoras de puntuación de mantenimiento

La infraestructura del sistema crea monitores de rendimiento en el sistema de limitación de peticiones HTTP en tiempo de ejecución, como objetos SPSystemPerformanceCounterMonitor. Se crea uno de estos objetos por cada objeto SPPerformanceMonitorCreationData en la propiedad PerformanceMonitors persistente del objeto SPHttpThrottleSettings que también es persistente en la propiedad HttpThrottleSettings de la aplicación web. Sin embargo, el código no llama a un constructor para la clase SPPerformanceMonitorCreationData, sino que llama al método SPHttpThrottleSettings.AddPerformanceMonitor(). Este método crea el objeto SPPerformanceMonitorCreationData y lo agrega a la colección PerformanceMonitors. Una propiedad importante de la clase SPPerformanceMonitorCreationData es AssociatedHealthScoreCalculator. El método SPHttpThrottleSettings.AddPerformanceMonitor() también crea el objeto de calculadora de puntuación de mantenimiento. La única vez que el código debe llamar al constructor para SPBucketHealthScoreCalculator es cuando se crea una nueva calculadora con el objetivo de intercambiarla por la calculadora existente de un monitor de rendimiento ya registrado.

Para crear la solución de Visual Studio

  1. Cree un proyecto de aplicación de consola en Microsoft Visual Studio y establezca la plataforma de CPU y .NET Framework de destino.

  2. Agregue una referencia al Microsoft.SharePoint.dll del proyecto. Se encuentra en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.

  3. Abra program.cs, establezca un nombre de clase y un espacio de nombres adecuado y agregue instrucciones using para los espacios de nombres Microsoft.SharePoint, Microsoft.SharePoint.Administration y Microsoft.SharePoint.Utilities. El código debe tener ahora un aspecto como el siguiente:

    using System;
    using Microsoft.SharePoint; 
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Utilities;
    
    namespace Contoso.SharePoint.Utilities
    {
        class PerformanceCounterRegistrar
        {
            static void Main(string[] args)
            {
    
            }
    // end Main
        }
    }
    

Para agregar un monitor de rendimiento

  1. En el método Main, declare una matriz de valores Double que defina los límites de los cubos que usa la calculadora de puntuación de mantenimiento para asignar la puntuación de mantenimiento a los valores. Los cubos son subconjuntos de posibles valores del contador. La matriz debe cumplir los siguientes requisitos:

    • Los valores de los elementos deben estar bien ordenados, ya sea de menor a mayor o de mayor a menor.

    • Los valores también deben estar ordenados de mejor a peor estado. Por lo tanto, donde buckets es el nombre del objeto de matriz, buckets[0] es un valor de mejor estado que buckets[1], buckets[1] es un valor de mejor estado que buckets[2] y así sucesivamente. Por lo tanto, buckets[buckets.Length-1] debe ser siempre el valor que indica el peor estado en buckets.

    Una matriz con 10 elementos, el tamaño estándar para las matrices que definen cubos de rendimiento, crea 11 cubos: los valores que indican el mejor estado que buckets[0] están en el primer cubo, mientras que los valores que indican el peor estado que buckets[10] se encuentran en el undécimo cubo. La calculadora de puntuación de mantenimiento asignará una puntuación de mantenimiento a un valor (o al resultado de una función en varios valores) según el cubo al que pertenece el valor. La puntuación será un Int32 entre 0 y 10. A los valores del cubo en mejor estado se les asigna 0 y a aquellos del cubo en peor estado, se les asigna 10. La matriz puede tener menos de 10 elementos. Por ejemplo, suponga que los valores posibles de un contador de rendimiento hipotético varían entre 0 y 50,0 (los valores inferiores indican mantenimiento) y suponga que los números 10,0, 20,0, 30,0 y 40,0 se usan como los límites de los cubos. En este escenario, un objeto de la clase de calculadora de puntuación de mantenimiento estándar, SPBucketHealthScoreCalculator, generaría resultados de mantenimiento conforme a las siguientes reglas:

    • 0 para valores de rendimiento inferior a 10

    • 3 para valores entre 10,0 y 20,0

    • 5 para valores entre 20,0 y 30,0

    • 8 para valores entre 30,0 y 40,0

    • 10 para valores por encima de 40,0

    Durante la creación de la matriz del cubo, es importante tener en cuenta que el sistema de limitación de peticiones entra en modo de limitación de peticiones solo si al menos un contador que se está supervisando tiene una puntuación de 10 (en base a una media ponderada de varias muestras del contador). Por lo tanto, para una matriz de 10 o menos elementos, es de suma importancia que elija el valor del último elemento de la matriz. Este valor debe indicar un grado de mal estado extremo como para justificar el bloqueo de algunas solicitudes HTTP. De forma similar, para una matriz de 20 elementos, los valores que están en peor estado que el penúltimo elemento tendrán una puntuación de 10.

    Nota

    La matriz podría tener un solo elemento, en cuyo caso, los valores de peor estado que el valor del único elemento obtendrían una puntuación de mantenimiento de 10 y todos los demás tendrían una puntuación de mantenimiento de 0. Dado que ningún valor menor que 10 desencadenaría una limitación de peticiones, ¿por qué nos molestaríamos en tener más de un elemento en la matriz? En otras palabras, ¿por qué no tener un sistema binario de puntuación de mantenimiento: "buen estado" y "mal estado"? La respuesta es que la puntuación de mantenimiento del contador de peor estado se agrega al encabezado del objeto de respuesta HTTP, incluso si es menor que 10 y, por lo tanto, no se establece una limitación de peticiones. Si este valor puede abarcar varios valores, en lugar de solo dos, los clientes pueden usar el valor notificado para tener en cuenta las tendencias de mantenimiento del conjunto o granja de servidores. Las aplicaciones cliente también pueden usar la puntuación de mantenimiento para mejorar la sincronización con el servidor. Por ejemplo, una aplicación cliente podría establecer un intervalo mayor de sincronización para las puntuaciones de mantenimiento más altas (peor estado). (Algunas aplicaciones de Microsoft Office lo hacen). Por otro lado, no tiene mucho sentido tener más de 10 elementos en la matriz, porque solo existen once puntuaciones de mantenimiento posibles. Por lo tanto, tener más de 11 cubos haría que los valores en dos o más cubos consecutivos obtuvieran la misma puntuación de mantenimiento. Como se indicó anteriormente, sin embargo, puede tener menos de 10 elementos y eso podría ser adecuado para algunos tipos de contadores de rendimiento.

    En el siguiente código se muestra una declaración de una matriz diseñada para crear cubos para el contador de Windows Server 2008 denominado "Processor\% Processor Time\_Total". Este contador notifica el porcentaje de tiempo que los procesadores del servidor tardan en procesar otros procesos además del proceso inactivo del sistema. Para obtener más información acerca de este contador, vea el tema sobre el objeto de procesador.

    double[] busyProcessorBuckets = new double[10] {20.0, 28.8, 37.6, 46.4, 55.2, 64.0, 72.8, 81.6, 90.4, 99.2}; 
    

    En este ejemplo, la diferencia entre dos valores cualquiera es la misma, aunque no es necesariamente así. Para algunos tipos de contadores puede ser conveniente tener valores que progresan exponencialmente. Además, tenga en cuenta que en este ejemplo los valores son ascendentes. Sin embargo, para algunos tipos de contadores de rendimiento, los valores más grandes indican mejor estado que los más bajos. Debido a que la matriz de cubos se debe ordenar de mejor a peor estado, los valores deben ser descendentes en una matriz de cubos para un contador de este tipo.

  2. Aún en el método Main, obtenga una referencia a la aplicación web y, posteriormente, a la configuración de límite mediante una llamada al método GetHttpThrottleSettings(SPPersistedObject), tal y como se muestra en el siguiente ejemplo.

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
  3. Aún en el método Main, llame al método SPHttpThrottleSettings.AddPerformanceMonitor(), pasando el nombre del contador, su categoría, su instancia y la matriz de cubos como parámetros. Pase true o false para el último parámetro en función de si la matriz es ascendente o descendente, respectivamente. El código siguiente continúa el ejemplo de ejecución.

    throttleSettings.AddPerformanceMonitor("Processor",
                                           "% Processor Time",
                                           "_Total",
                                           busyProcessorBuckets,
                                           true);
    
    SugerenciaSugerencia

    El método SPHttpThrottleSettings.AddPerformanceMonitor() no comprueba si ya hay un monitor de rendimiento que está supervisando la misma instancia del mismo contador. Las llamadas sucesivas del método, con los mismos parámetros, registran objetos de contador de rendimiento redundantes.

Para comprobar si se registró el contador de rendimiento

  • Para obtener una lista de los monitores de rendimiento registrados para la aplicación web, use el cmdlet Get-SPWebApplicationHttpThrottlingMonitor de la Consola de administración de SharePoint. A continuación se muestra la sintaxis de la llamada al cmdlet.

    Get-SPWebApplicationHttpThrottlingMonitor –identity http://<Web application URL>
    

    El resultado para el monitor de rendimiento recién registrado tiene un aspecto similar al siguiente:

    Category                        : Processor
    Counter                         : % Processor Time
    Instance                        : _Total
    AssociatedHealthScoreCalculator : [20.0,28.8,37.6,46.4,55.2,64.0,72.8,81.6,90.4,99.2]
    

Para anular el registro de un contador de rendimiento

  • Anular el registro de un monitor de rendimiento es similar a registrarlo, excepto que el código llama a RemovePerformanceMonitor(). Una sobrecarga de este método anula el registro de todos los contadores de rendimiento que tengan una categoría, un contador y un nombre de instancia específicos. Una segunda sobrecarga cancela el registro de todos los contadores con una categoría y un nombre de contador especificados, por lo que si distintos monitores están supervisando diferentes instancias de un contador específico, todos se pueden quitar con una sola llamada. En el siguiente ejemplo se muestra el método RemovePerformanceMonitor() en uso para quitar el monitor en el ejemplo de ejecución:

    Uri webApplicationUri = new Uri("Http://localhost/");
    SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    
    // Remove the monitor. 
    throttleSettings.RemovePerformanceMonitor("Processor",
                                              "% Processor Time",
                                              "_Total");
    

Vea también

Conceptos

Limitación de solicitudes