NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem

O que são NPTL, Exec-Shield e porque meus programas de uma hora para outra crasham adoidamente? Se você usa RedHat 9, Fedora Core 1, kernel 2.6 e/ou kernel 2.4 patcheado, seus problemas podem se resolver após a leitura deste artigo.

[ Hits: 19.606 ]

Por: Cesar Cardoso em 19/12/2003


NPTL



NPTL, também conhecido como Native POSIX Thread Library, é o novo sistema de threading do kernel 2.6. O NPTL promete melhor compatibilidade com o padrão POSIX, maior escalabilidade e maior desempenho na criação e destruição de threads, colocando o Linux em pé de igualdade com os Unix comerciais em termos de alto desempenho (e custando muuuuuuuuito menos! :-) Para os chegados em tecnicalidades ou estudiosos de sistemas operacionais, vale a leitura do paper descritivo da biblioteca em: A RedHat vem implementando um backport do NPTL para os seus kernels 2.4 desde o RedHat 9 e o kernel do Fedora Core 1 tem o mesmo patch.

Só que alguns programas podem crashar alegremente, deixando você com um segfault na mão e uma cara de tacho. Exemplos clássicos são o IBM JRE e o Sun JVM (antes do 1.4.1, bem, você deveria estar utilizando o 1.4.2 mesmo...). Neste caso, LD_ASSUME_KERNEL é seu amigo.

LD_ASSUME_KERNEL é uma variável de ambiente que diz ao kernel para utilizar o velho LinuxThreads em vez do NPTL, com isso deixando o programa problemático mais feliz. Pode assumir os valores 2.2.5, 2.4.1 ou 2.4.19 (ou seja, emulação do comportamento de kernels específicos). Uma boa política é utilizar um alias do shell para o programa crashento, por exemplo:

alias programa_crashento="LD_ASSUME_KERNEL=2.4.1 programa_crashento"
    Próxima página

Páginas do artigo
   1. NPTL
   2. Exec-Shield
   3. Palavras finais
Outros artigos deste autor

Porque o RedHat 9 tem problemas com teclados US-International?

Entendendo a configuração de rede para RedHat e similares

Rumo a um pinguim móvel

Para não se perder no mundo da memória Flash

DHCP sem (quase :-D) mistérios

Leitura recomendada

Gerência e criação de módulos do kernel

Aplicando patches no kernel

KernelCheck - Instalando o kernel mais recente em distros Debian-like e outras

Atualizando kernel de 2.4.31 para 2.6.13 no Slackware 10.2

Compilando o Kernel do OpenBSD 4.3 (GENERIC)

  
Comentários
[1] Comentário enviado por arknoid em 22/12/2003 - 16:52h

bahm blz de artigo cesar ficou bem tri e agora posso tentar rodar as tralhas que me encomodavam!
qualquer coisa vou te encomodar!

[2] Comentário enviado por PlainSpooky em 23/12/2003 - 16:34h

Só uma correção...

ao invés de "cat 0 > /proc/sys/kernel/exec-shield" usa-se "echo 0 > /proc/sys/kernel/exec-shield", uma distração boba que vez ou outra em também cometo. :)


Contribuir com comentário