Resposta rápida
Para sanitizar um thread dump antes de compartilhar: mascare localmente com o tm-anon (tm-anon mask dump.txt) e envie só o resultado. Nomes reais de pacotes, classes e threads viram pseudônimos determinísticos e ficam num vault na sua máquina — a análise no ThreadMine dispara as mesmas detecções e devolve o mesmo health score.
O problema: o dump é útil porque é indiscreto
Em muita empresa, colar um thread dump de produção num analisador de terceiro é proibido por política — e a política tem razão. O dump carrega nomes de pacotes e classes internas (com.suaempresa.pagamento.LedgerService), nomes de thread que embutem id de tenant, rota ou cliente, e a linha de comando inteira da JVM, com flags e caminhos. É exatamente o tipo de dado que o time de compliance classifica como “não sai daqui” — e, na hora do incêndio, quem mais precisa da análise é quem não pode enviar o dump.
O tm-anon existe para destravar esse cenário: ele torna o dump inofensivo antes de sair da máquina, sem quebrar o que um analisador precisa para trabalhar.
Como funciona
O tm-anon substitui os seus nomes por pseudônimos determinísticos (HMAC com a chave de um vault local): com.acme.payment.LedgerService vira sempre o mesmo com.app1.Class2, neste dump e nos próximos. Esse determinismo importa — comparação antes/depois e timeline multi-dump continuam funcionando, porque a mesma classe recebe o mesmo pseudônimo em todos os dumps. O mapeamento reverso fica no vault, que nunca sai da sua máquina.
- 01
Mascare o dump localmente
tm-anon mask gera um dump.anon.txt sem nenhum nome interno; tm-anon verify confere o resultado — é o gate de compliance.
- 02
Envie o arquivo mascarado
Upload normal no ThreadMine: cole ou arraste o dump.anon.txt como qualquer dump.
- 03
A análise roda igual — com badge
As mesmas detecções disparam, e o relatório sai com o badge "Anonimizado" automaticamente — a detecção é automática, nada a configurar.
- 04
Exporte o relatório em JSON
O export JSON carrega o diagnóstico completo, ainda com os pseudônimos.
- 05
De volta aos nomes reais
tm-anon unmask traduz o relatório usando o vault — na sua máquina, e só nela.
Instalação
O artefato primário é um jar único, sem dependências (requer Java 21+). Quem não quer JVM na estação usa os binários nativos anexados na mesma release: tm-anon-windows-amd64.exe, tm-anon-linux-amd64 e tm-anon-macos-arm64.
Download
curl -LO https://github.com/maschiojv/threadmine-anonymizer/releases/latest/download/tm-anon.jar java -jar tm-anon.jar
Uso
Quatro comandos: init uma vez por projeto, mask e verify a cada dump, unmask quando o relatório volta.
Crie o vault local (uma vez por projeto)
tm-anon init
Mascare o dump
tm-anon mask dump.txtVerifique — o gate de compliance
tm-anon verify dump.txt dump.anon.txt
Reverta os nomes no export JSON
tm-anon unmask export.jsonPor que confiar
A pergunta certa para qualquer ferramenta que toca dado sensível é “como eu verifico?” — aqui, cada garantia é auditável:
Open-source (MIT)
Código completo no GitHub — o que roda na sua máquina é o que está no repositório.
Zero código de rede
O jar não tem cliente HTTP nem java.net — e um teste de arquitetura quebra o build se alguém adicionar.
THREAT_MODEL público
O modelo de ameaças documenta o que a ferramenta protege e os limites honestos do mascaramento.
Binários nativos win/linux/mac
Gerados em CI público a partir do mesmo código do jar — sem JVM para rodar.
O que a análise preserva
Mascarar não degrada a análise porque as detecções do ThreadMine são estruturais: deadlock é um ciclo de locks, pool exhaustion é um pool inteiro no mesmo estado, virtual thread pinning é um padrão de frames — nada disso depende do seu nome de classe. O que os detectores casam por nome (frames de JDK e frameworks, sufixos de pool como http-nio-8080-exec-1) fica numa allowlist pública e passa verbatim. Na verificação de ponta a ponta, 17/17 dumps do corpus analisados antes e depois do mascaramento produziram o mesmo resultado. E o relatório de um dump mascarado exibe o badge “Anonimizado” automaticamente.
Perguntas frequentes
O dump mascarado perde qualidade de análise?
Não. As detecções do ThreadMine são estruturais, e tudo que os detectores casam por nome (frames de JDK e frameworks, sufixos de pool) fica verbatim por uma allowlist pública. Na verificação de paridade, 17 de 17 dumps do corpus produziram o mesmo resultado antes e depois do mascaramento — mesmos problemas, mesmo health score.
E se eu perder o vault?
O vault é o único mapa entre pseudônimos e nomes reais — e ele nunca sai da sua máquina, então nem o ThreadMine consegue reverter por você. Sem ele, o unmask deixa de ser possível; as análises já feitas continuam válidas, só que lendo pseudônimos. Trate o arquivo como um segredo e faça backup como faria com uma chave privada.
A IA (Vein) funciona com dump anonimizado?
A análise determinística é idêntica com ou sem mascaramento. Já o parecer de IA é gerado sobre o dump mascarado, então referencia os pseudônimos (com.app1.Class2 em vez dos seus nomes reais). Para ler com os nomes verdadeiros, exporte o JSON e rode o unmask localmente — a tradução acontece na sua máquina, e só nela.
Mascare, envie e analise — sem cadastro
Rode o tm-anon mask no seu dump, cole o resultado no ThreadMine e receba o diagnóstico em segundos. O primeiro dump não pede conta.