Processo W3wp.exe consumindo 100% do CPU de um Servidor Exchange CAS

4 de janeiro de 2016

Certa vez um servidor Exchange Server 2007 com a função de CAS (Client Access Server) estava apresentando um alto consumo de CPU. Ao verificar qual processo que estava consumindo este recurso, identificamos o “W3wp.exe” com 100% de consumo de CPU.

Após uma análise detalhada, percebemos que este consumo de CPU elevado poderia estar relacionado a sincronização de dispositivos móveis com o servidor CAS.

O servidor Exchange CAS roda extremamente lento e pode não responder às requisições do Microsoft Exchange ActiveSync. Quando isso ocorre o processo “W3wp.exe” que roda sob o MSExchangeSyncAppPool pode usar 100% do tempo da CPU.

A causa deste sintoma ocorre quando um dispositivo móvel tenta sincronizar um número elevado de contatos em uma única requisição.

Identificar se isto está ocorrendo em seu ambiente é possível através de uma query nos logs do IIS. Com esta query conseguimos identificar o usuário e o dispositivo do usuário que estão gerando alto consumo de CPU.

Baixe e instale o Log Parser Sutdio no servidor Exchange CAS;

http://blogs.technet.com/b/exchange/archive/2013/06/17/log-parser-studio-2-2-is-now-available.aspx

Abra o Log Parser Sutdio e crie uma nova IIS query e execute o seguinte comando:

 

/* Procurar dispositivo/Informação do usuário consumindo 100% do CPU enquanto sincroniza os contatos */
Select TOP 5000 TO_TIMESTAMP(TO_DATE(date), TO_TIME(time)) as [Time],
cs-username as [User],
cs(user-agent) as DeviceID,
TO_INT(EXTRACT_PREFIX(EXTRACT_SUFFIX(cs-uri-query, 0, ‘_RpcC’), 0, ‘_’)) As RPCCount,
sc-status as Status,
sc-substatus as SubStatus,
sc-bytes as [Bytes],
DIV(sc-bytes, 1024) AS [KBytes], time-taken, DIV(time-taken, 1000) as Sec, cs-uri-query
FROM ‘[LOGFILEPATH]’
WHERE
RPCCount > 2000 /* <– Altere o RPC count se necessário */
AND cs-uri-query LIKE ‘%Cmd=Sync%’
AND cs-uri-query LIKE ‘%Ty:Co%’
ORDER BY [Bytes] DESC

Nota: Normalmente os usuários “problemáticos” atingem um valor de RPC count em torno de 2000.

Caso seja identificado algum usuário com valor RPC count maior que 2000, você pode seguir os seguintes passos a fim de validar o diagnóstico:

a) Desabilite temporariamente a sincronização para este usuário;
b) Reinicie o serviço MSExchangeSyncAppPool;
c) Execute a query novamente.

Se após estes passos o consumo de CPU do Exchange baixar e o usuário não aparecer mas nos resultados da query o seu diagnóstico está confirmado.

Agora você deve analisar a pasta de contatos do usuário e reduzir o número de contatos.

Posts relacionados