Problemas de memória com o Tomcat no Solaris 10

1

Eu tenho um servidor executando o Solaris 10. Ele reporta 70+ libras livres de GiB. Eu estou tentando iniciar o Tomcat 7.0.68 usando o Java 1.7.0_80 no modo de 64 bits.

O servidor está afirmando que não é capaz de alocar 717 MiB de RAM. Eu recebo um arquivo hs_err_pidxxx.log toda vez que eu tento. Sugere isto:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 717225984 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space

Não. Há 70 GiB disponíveis, ele está tentando alocar 700 MiB.

#   In 32 bit mode, the process size limit was hit

Estamos no modo de 64 bits.

# Possible solutions:
#   Reduce memory load on the system

Não há mais nada nessa máquina, exceto o sistema operacional.

#   Increase physical memory or swap space

Já temos duas ordens de magnitude a mais do que o necessário.

#   Check if swap backing store is full

Não.

#   Use 64 bit Java on a 64 bit OS

Feito.

#   Decrease Java heap size (-Xmx/-Xms)

Poderia se eu pudesse.

#   Decrease number of Java threads

Como isso é feito?

#   Decrease Java thread stack sizes (-Xss)

Valores sugeridos? Está no padrão, mas eu não sei o que é para ajustá-lo.

#   Set larger code cache with -XX:ReservedCodeCacheSize=

Novamente, estamos no padrão.

$ swap -s
total: 48607296k bytes allocated + 18201336k reserved = 66808632k used, 311770552k available
    
por Glenn Lasher 25.04.2016 / 22:27

1 resposta

1

RAM livre significa simplesmente que não há nada armazenado nele. Isso não significa que você pode usá-lo. É perfeitamente possível que a RAM reportada como livre não seja utilizável por sua nova JVM porque outros aplicativos a reservaram. Em qualquer caso, a JVM, assim como a maioria dos aplicativos, não solicita memória RAM, mas sim memória virtual. Isso é mais do que provavelmente o problema que o seu sistema está sofrendo, a falta de memória virtual.

Você saberá o uso de sua memória virtual com esse comando:

swap -s

A resposta simples para uma falta de memória virtual é simplesmente aumentar (ou criar) uma área de troca para que as reservas de memória tenham uma área de armazenamento de apoio.

Editar: Com as informações adicionais que você postou, o motivo pelo qual seu aplicativo não pode alocar mais memória virtual é devido ao fato de você estar em execução em uma região não global onde o limite de memória está em vigor. As zonas não globais são contêineres, ou seja, todas compartilham o mesmo kernel. No entanto, o uso de recursos pode ser limitado para impedir que uma zona perturbe as outras.

Fora de outros processos que usam memória virtual, não há nada que você possa fazer desta zona, mesmo como root. Você precisa pedir ao administrador da região global para conceder mais memória virtual à sua zona , no seu caso, o zone.max-swap configuração.

    
por 26.04.2016 / 01:26