Id de thread em diferentes distribuições linux

1

Nós temos um aplicativo de servidor que roda bem no Ubuntu e no antigo Mandrake Linux, mas ele falha consistentemente no Redhat Enterprise Linux (para ser preciso no RHEL 4 Update 8, kernel 2.6.9-89). No RHEL, o servidor geralmente é executado por 40 ou mais dias e depois disso ele pára de responder às conexões de entrada.

Percebemos que no Ubuntu para cerca de 5000 conexões de entrada, o servidor cria apenas cerca de 50 ids de thread exclusivos. Ao mesmo tempo, no RHEL, para a mesma quantidade de conexões de entrada, existem milhares de ids de thread. Eu acho que isso pode ser uma razão por trás desses bloqueios de servidor.

Existe alguma maneira que eu possa verificar se esta é a razão? Talvez alguma ferramenta que pode mostrar o número de threads "livres" no sistema ou uma ferramenta que pode mostrar "vazamento de discussão" no servidor? Existe uma configuração do sistema que controla como os segmentos são alocados e liberados? Talvez haja alguma configuração que "liga" um segmento específico a uma conexão TCP de entrada e isso funciona de forma diferente no Ubuntu e no RHEL?

PS

Esqueci de mencionar que no RHEL um ID de encadeamento geralmente se parece com isso xxxx004 ou xxxx005, onde x é algum dígito hexadecimal, por exemplo, 1E8004 e 750005, e eles estão sempre aumentando com o tempo.

    
por Max 19.07.2013 / 19:49

1 resposta

1

/ proc

Parece que você está se intrometendo no limite máximo de threads. Você pode verificar este parâmetro aqui:

$ cat /proc/sys/kernel/threads-max
12345

Você pode alterar este valor com este comando:

$ sudo echo <number> > /proc/sys/kernel/threads-max

Para torná-lo permanente para reinicializações, edite esse arquivo, /etc/sysctl.conf , e adicione esta linha:

kernel.threads-max = 50000

Em seguida, execute este comando:

$ sudo sysctl -p

Parâmetros Adicionais do Kernel

Você pode verificar outros configuráveis para o Kernel usando o comando sysctl -a .

Por exemplo, aqui estão todos os parâmetros "thread":

$ sudo sysctl -a|grep thread
kernel.threads-max = 7514
kernel.slow-work.min-threads = 2
kernel.slow-work.max-threads = 16
vm.nr_pdflush_threads = 0

2.6 vs. 3.x Kernels

O desenho de uma comparação entre o RHEL 4.x que está usando uma biblioteca datada com 2.6 Kernel e glibc vs. a mais recente 3.x é como comparar maçãs com laranjas. Houve várias alterações no kernel, então eu não esperaria que elas se comportassem de maneira semelhante.

    
por 19.07.2013 / 23:12