O WebSphere eXtreme
Scale suporta o
dimensionamento do consumo de memória das instâncias BackingMap em grades de dados distribuídas. O dimensionamento do consumo de memória não é suportado para instâncias de grades de dados locais. O valor relatado por WebSphere eXtreme
Scale para um determinado mapa é muito próximo do valor relatado pela análise de dump do heap. Se o objeto do mapa for complexo, os dimensionamentos poderão ser menos precisos. A mensagem CWOBJ4543 é exibida no log para qualquer objeto de entrada de cache que não pode ser dimensionada com exatidão porque ela é excessivamente complexa. É possível obter medidas mais precisas para evitar uma complexidade desnecessária no mapa.
Procedimento
- Ative o agente de dimensionamento.
Se estiver usando uma Java virtual machine Java 5 ou superior, use o agente de dimensionamento. Com o agente de dimensionamento, o
WebSphere eXtreme
Scale pode obter informações adicionais a partir da JVM para melhorar suas estimativas. O agente pode ser carregado
incluindo o seguinte argumento na linha de comandos JVM:
-javaagent:WXS lib directory/wxssizeagent.jar
Para uma topologia integrada,
inclua o argumento na linha de comandos do processo do WebSphere Application Server.
Para uma topologia distribuída, inclua o argumento na linha de comandos dos processos (contêineres) do
eXtreme Scale e do processo
do WebSphere Application Server.
Quando carregada corretamente,
a seguinte mensagem é gravada no arquivo
SystemOut.log.
CWOBJ4541I: O dimensionamento de memória de BackingMap aprimorado está ativado.
- Prefira os tipos de dados Java
no lugar de tipos de dados customizados, onde possível.
O
WebSphere eXtreme
Scale pode dimensionar com exatidão
o custo de memória dos seguintes tipos:
- java.lang.String e matrizes em que String é a classe do componente
(String[])
- Todos os tipos de wrapper primitivos (Byte, Short, Character, Boolean,
Long, Double, Float, Integer) e matrizes em que os wrappers primitivos são
o tipo de componente (por exemplo, Integer[], Character[])
- java.math.BigDecimal e java.math.BigInteger e matrizes em que essas
duas classes são o tipo de componente (BigInteger[] e BigDecimal[])
- Tipos temporais (java.util.Date, java.sql.Date, java.util.Time,
java.sql.Timestamp)
- java.util.Calendar e java.util.GregorianCalendar
- Evite a internação do objeto, quando possível.
Quando um objeto é inserido em um mapa, o
WebSphere eXtreme
Scale assume que ele possui referência apenas ao objeto e todos os objetos a todos os objetos aos quais ele referecia diretamente. Se inserir 1000 Objetos customizados em um mapa e cada um tiver uma referência à mesma instância da sequência, o
WebSphere eXtreme
Scale dimensionará esse instância da sequência em 1.000 vezes, superestimando o tamanho real do mapa no heap.
No entanto, o
WebSphere eXtreme
Scale compensa corretamente para os seguintes cenários de internação comuns:
- Referências a Enumerações de Java 5
- Referências a Classes que seguem o Padrão de Enumeração Typesafe.
As classes que seguem este padrão possuem apenas construtores privados definidos, possuem pelo menos um campo final estático privado de seu próprio tipo e, se Serializável for implementado, a classe implementará o método readResolve().
- Internação de wrapper Primitivo Java 5. Por exemplo, use Integer.valueOf(1) em vez do novo Integer(1)
Se você tiver que usar a internação, use uma das técnicas anteriores para obter estimativas mais exatas.
- Use tipos customizados com atenção.
Ao usar tipos customizados,
prefira tipos de dados primitivos para campos vs tipos de Objeto.
Além disso,
prefira os tipos de Objeto listados na entrada 2 no lugar de suas próprias implementações customizadas.
Ao usar tipos customizados,
mantenha a árvore de Objeto para um nível. Ao inserir um Objeto customizado
em um mapa, o WebSphere eXtreme
Scale calculará
apenas o custo do Objeto inserido, que inclui os campos primitivos e
todos os Objetos aos quais ele faz referência diretamente. O WebSphere eXtreme
Scale não seguirá referências adicionais na árvore de Objeto. Se inserir um Objeto no mapa e o WebSphere eXtreme
Scale detectar referências que não foram seguidas durante o processo de dimensionamento, uma mensagem codificada CWOBJ4543, que inclui o nome da Classe que não pôde ser totalmente dimensionada, é exibida. Quando esse erro ocorrer, trate as estatísticas de tamanho no mapa como dados de tendência, em vez de confiar nas estatísticas de dimensionamento como sendo totalmente exatas.
- Use o modo de cópia CopyMode.COPY_TO_BYTES, se possível.
Use o modo de cópia de CopyMode.COPY_TO_BYTES para remover qualquer dúvida sobre como dimensionar os Objetos de valor que estão sendo inseridos no mapa, mesmo quando uma árvore de Objeto tiver muitos níveis para serem dimensionados normalmente (resultando na mensagem CWOBJ4543).