Defina memória para pools de heap ou buffers, além da sobrecarga nativa, de cache de páginas, de threads e de recuperação; o heap visível não corresponde ao total do contentor.
Isto é importante num servidor doméstico partilhado, onde uma aplicação JVM e uma base de dados competem com a cache de páginas do NAS. O risco operacional é que um limite definido como igual ao tamanho do heap provoque encerramentos por OOM, enquanto a ausência de limite permite que uma carga de trabalho expulse todas as outras. Comece com uma linha de base guardada, faça uma alteração reversível de cada vez e pare sempre que o ramo observado deixar de corresponder ao caminho de configuração pretendido.
Estabelecer a linha de base dos limites de memória de contentores para JVMs e bases de dados
Antes de alterar definições, registe o conjunto de trabalho do contentor, o RSS, a cache de páginas, a memória nativa da JVM, os buffers da base de dados, a swap, os eventos OOM e a latência sob carga máxima. Capture a configuração original e uma execução semelhante à de produção, para que as melhorias posteriores sejam comparadas com a mesma carga de trabalho, e não com um estado de memória ou de inatividade sintético.
Utilize as atuais restrições de memória do contentor para confirmar o controlo suportado e a sua semântica. Considere os valores predefinidos como um ponto de partida conhecido, e não como prova de que a definição corresponde a este servidor, à combinação de clientes ou ao objetivo de recuperação.
Defina os critérios de aceitação e de paragem antes de editar. O sinal de aceitação tem de ser visível nos registos, no estado do protocolo, na saída da aplicação ou nos dados restaurados; a condição de paragem tem de impedir um acesso mais amplo, perda de dados, esgotamento de recursos ou uma indisponibilidade que consuma a próxima janela de recuperação.
Aplicar a alteração dos limites de memória de contentores para JVMs e bases de dados em etapas controladas
Passo 1: Meça uma carga de trabalho máxima sem limite, mas controlada, e separe a cache recuperável da memória residente não recuperável. Depois da alteração, inspecione imediatamente o estado esperado; se este não aparecer, desfaça este passo antes de aplicar o seguinte.
Passo 2: Defina objetivos de heap ou buffers conscientes da aplicação abaixo do limite do contentor e reserve memória do anfitrião para o kernel e a cache de armazenamento. Depois da alteração, inspecione imediatamente o estado esperado; se este não aparecer, desfaça este passo antes de aplicar o seguinte.
Passo 3: Adicione um limiar de aviso antes do limite rígido e reduza a simultaneidade quando surgir pressão sustentada. Depois da alteração, inspecione imediatamente o estado esperado; se este não aparecer, desfaça este passo antes de aplicar o seguinte.
services:
app:
mem_limit: 4g
environment:
JAVA_TOOL_OPTIONS: "-Xms1g -Xmx3g"
Interpretar os ramos de sucesso, falha e exceção
Há sucesso quando a carga de trabalho máxima se mantém abaixo da margem de aviso sem thrashing de swap, encerramentos por OOM ou degradação da latência de armazenamento. Registe a carga de trabalho, a versão e o momento exatos que produziram o resultado; um teste mais leve não prova que o problema original tenha sido resolvido.
Há falha quando o kernel encerra o processo, a JVM não consegue reservar memória nativa ou a base de dados expulsa repetidamente cache útil. Não compense enfraquecendo todos os controlos adjacentes. Regresse à última linha de base limpa e isole se a incompatibilidade pertence à identidade, à rede, ao armazenamento, à prontidão da aplicação ou à capacidade.
Perante uma exceção ou um resultado ambíguo, restaure o último limite estável e reduza o heap, o número de ligações ou a simultaneidade dos workers antes de aumentar a pressão sobre o anfitrião. Escale apenas depois de o elemento de diagnóstico de baixo risco ser repetível e as evidências mostrarem que é necessária uma alteração mais profunda da plataforma ou do hardware.
Verificar a persistência sob a carga original do servidor doméstico
Repita o mesmo caminho do cliente, tamanho dos ficheiros, simultaneidade, evento de suspensão ou reinício e carga de trabalho concorrente utilizados na linha de base. Execute pelo menos dois ciclos, para que um sucesso com a cache aquecida, uma reconexão fortuita ou um único arranque limpo não sejam confundidos com persistência.
Confirme tanto o sucesso como a contenção: a carga de trabalho máxima mantém-se abaixo da margem de aviso sem thrashing de swap, encerramentos por OOM ou degradação da latência de armazenamento, enquanto utilizadores, serviços, partilhas e caminhos administrativos não relacionados mantêm o comportamento original. Consulte o fluxo de trabalho ZimaSpace relacionado quando a alteração tocar num limite adjacente de armazenamento, rede ou recuperação.
Feche a alteração apenas quando o sinal de aceitação persistir e a reversão continuar utilizável. Se o kernel encerrar o processo, a JVM não conseguir reservar memória nativa ou a base de dados expulsar repetidamente cache útil, pare a automatização, preserve os registos e a configuração guardada e regresse ao último estado verificado, em vez de acumular mais alterações.
FAQ sobre dispersão de consultas, decisão final e teste final
Estas perguntas sobre dispersão de consultas abrangem as decisões seguintes que os utilizadores costumam pesquisar depois de a configuração principal funcionar. Alargam o limite sem introduzir um caminho de reparação não testado.
Aplique cada resposta apenas quando a respetiva condição corresponder ao ambiente medido. Diferenças de versão, protocolo, sistema de ficheiros, cliente e limite de confiança podem alterar o ramo correto.
Mantenha as respostas junto do manual de procedimentos e atualize-as depois de atualizações ou alterações de topologia. Qualquer exceção que amplie o acesso de escrita, a acessibilidade da rede ou a autoridade de eliminação exige um novo teste de reversão e recuperação.
O Xmx deve ser igual ao limite de memória do Docker?
Não. Deixe espaço para metaspace, buffers diretos, threads, cache de código, bibliotecas nativas e sobrecarga do sistema operativo.
Uma base de dados utiliza memória fora do seu buffer pool?
Sim. As ligações, as áreas de trabalho, a manutenção, as extensões e a cache do sistema de ficheiros podem exceder substancialmente o pool configurado.
A swap é sempre prejudicial?
Nem sempre, mas a swap sustentada durante trabalho interativo é um forte sinal de que o plano de memória ou a simultaneidade estão incorretos.
Conclusão: A configuração está concluída quando a carga de trabalho máxima se mantém abaixo da margem de aviso sem thrashing de swap, encerramentos por OOM ou degradação da latência de armazenamento, o ramo de falha é compreendido e a reversão documentada não depende do componente que está a ser alterado.
Protocolo de teste final: restaure a linha de base guardada, aplique uma vez a alteração aprovada, repita a carga original semelhante à de produção, verifique o sinal de sucesso e o limite de contenção e, em seguida, execute a reversão com dados descartáveis. Mantenha a alteração apenas quando todas as cinco observações forem concordantes.
Suporte e Dicas
Mais para Ler

Guia de armazenamento para gravação de TV em direto: capacidade, retenção e limpeza
Meça gravações reais, reserve margem de segurança, combine limites de idade e capacidade e confirme que o programa elegível mais antigo é removido antes...

Fluxo de recuperação de metadados de multimédia doméstica após o restauro de uma base de dados
Proteja o estado restaurado, verifique a identidade e os caminhos dos ficheiros multimédia e, em seguida, corrija as capas ou correspondências em falta numa...

Lista de verificação de compatibilidade do cliente Jellyfin para áudio, vídeo e legendas
Teste ficheiros representativos, uma variável de cada vez, e registe Direct Play, remux, conversão de áudio, transcodificação de vídeo ou falha para cada cliente.

