Linux + Oracle iAS 9 + prevayler : Problemas de memória

6 respostas
om1

Estou tendo um pouco de dor de cabeça com um sistema que roda na plataforma citada. Tenho pouca experiência em Linux e em iAS, por isso qualquer luz será muito bem vinda.

Quando eu inicio o ias, o uso de memória chega a um pico de 1.2GB, e depois não baixa mais, ou pelo menos o enterprise manager continua indicando algo em torno disso. Esse mesmo sistema, rodando com os mesmos objetos (copiados os snapshots e transactionLogs) na minha máquina(winXP+tomcat5), o uso de memória não passa de 90MB.

na máquina do cliente, o comando top me retorna a seguinte informação:

Mem:  3863192K av, 3805548K used,   57644K free,  363388K shrd,  194908K buff
Swap: 2048248K av,       0K used, 2048248K free                 1915568K cached

PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
 1871 oracle    15   0  174M 174M 11908 S     0.0  4.6   0:00 java

e free -m retorna o seguinte:

total       used       free     shared    buffers     cached
Mem:          3772       3723         49        354        190       1870
-/+ buffers/cache:      1663       2109
Swap:         2000           0       2000

Encontrei uma referência dizendo que no linux, mesmo quando um processo não precisa mais da memória, ela fica em cache até que aquele processo, ou qualquer outro, precise da memória. Com isso, eu chego à conclusão que o Enterprise Manager está reportando esta memória “cached” como sendo memória utilizada.

Preciso fazer um relatório para meu cliente sobre o uso da memória pela aplicação, e gostaria de saber se esta minha conclusão está correta.
E mesmo estando correta, ainda fico pensando o que levou a este pico de 1.2GB, pois se o sistema realmente necessita desta quantidade de memória, como eu consigo utilizá-lo em minha máquina?

Agradeço qualquer ajuda.

6 Respostas

pcalcado

Você já notou que por mais que a memória esteja ocupada, nunca entra no swap? Sua máquina está lerda?

Mem:  3863192K av, 3805548K used,   57644K free,  363388K shrd,  194908K buff

O gerenciamento de memória no Linux utiliza a memória não-utilizada por você para fazer cache de disco [regiões mais acessadas] e outras facilidades para otimizar o desempeho. seu servidor está normal.

Eu tinha escrito um e-mail bem grande sobre isso certa vez… vou ver se acho…

[]s

om1

Phillip,

Realmente a máquina não está lenta, nem tá fazendo swap. Acho que minha conclusão está no caminho certo :slight_smile:

Se você encontrar o email, me mande pra eu tentar entender melhor o gerenciamento de memória do linux, para poder fazer um relatório consistente.

Se alguém tiver mais algo a adicionar, será bem vindo!

Valeu!

[]s

A

Você está certo sim.
Não só no linux mas nos sistemas Unix, o gerenciamento de memória funciona bem diferente do Windows.
Realmente a memória não vai pra “free” quando o sistema para de utiliza-la. Ela fica “cached”.
O que você pode fazer para mensurar quanto cada JVM está utilizando de memória é baixar algum aplicativo JVM Prof para medir os recursos utilizados por cada JVM.

Tenta no site da Sun um aplicativo chamado JVMStat.

Boa sorte.

om1

Opa Antonio,

Eu baixei o JMP e rodei aqui na minha máquina para verificar o comportamento e me assegurar que a aplicação não está utilizando mais recursos do que deveria.

Não posso rodar nenhum profiler em produção pois causa um overhead inaceitável(certo?), mas pela execução na minha máquina, me certifico que não há problemas em minha aplicação.

Agora, é só escrever um relatório pro cliente entender que a aplicação não está usando toda a memória que o manager do IAS informa, e tá tudo bem.

A Oracle podia considerar no enterprise manager do IAS este aspecto do gerenciamento de memória dos diversos S.O.s, pra evitar este tipo de confusão… :roll:

Valeu! :slight_smile:

pcalcado

Achei!!

Uhm… era mais sobre processos, mas tá beleza…

Como nem todo mundo tem conta no Yahoo! Groups [tá aqui: http://br.groups.yahoo.com/group/linux-board/message/8522], vou colar aqui:

De: Andre Luiz <andre_listas@y…>
Data: Seg Dez 1, 2003 1:52 pm
Assunto: Re: [linux-board] Varios processos ncsa_auth… isso eh normal?

> On 28 Nov 2003 09:58:55 -0300
> Phillip LISTAS <phillip_listas@y…> wrote:
>
> >
> > André,
> >
> > Ele não está sendo executado 100 vezes, são 100 threads. O Linux tem
> > um sistema para tratar light-weigth processes diferente, vou colar
> > abaixo trechos de um e-mail que fiz para a equipe de infra aqui da
> > empresa, o assunto era o mesmo, mas se tratava do Tomcat e do pessoal do
> > datacenter estar alertando sobre processos e memória em excesso:
> >
> >
> > Existem basicamente dois tipos de processo que podem ser disparados
> > por uma aplicação: as threads e os processos propriamente ditos. As
> > threads são processos que correm em paralelo no mesmo ambiente, para que
> > sejam melhores aproveitados os ciclos de CPU. As variáveis (ou seja: o
> > espaço alocado pelo programa), permanecem dentro da mesma área de
> > memória que foi alocada para este (exceto, talvez, em ambientes Windows,
> > que trabalham sem memória protegida, ou como eu chamo “carinhosamente”:
> > modo de memória esculhambada).
> >
> > O GNU/Linux trata as Threads como processos independentes para fins
> > de listagem. Se vocês observarem, o XImian Evolution usa mais de dez
> > processos, o Mozilla Thunderbird, que é extremamente leve e rápido, abre
> > quase que um para cada página visitada simultâneamente, fora os para
> > interpretar o JavaScript, etc. Sem threads, seria necessário carregar
> > todo o HTML de uma página, depois carregar as figuras uma por uma,
> > depois executar os scripts, falsh, etc. Cada um por vez. Isto tornaria o
> > processo todo extremamente lento e tedioso, vendo que a multitarefa
> > implica que o servidorCPU seja dividido entre vários processos, ams não
> > impede que sejam vários processos (Threads) da mesma aplicação.
> > Utiliza-se então, mais ciclos de CPU num menor espaço de tempo.
> >
> > Quem programa com java sabe o quão fácil e’criar uma thread e
> > quantos problemas podem surgir com elas. Se você colocar dois destes
> > “lightweight processes” rodando paralelamente, se ambos tentarem acessar
> > o objeto usuario para alterar, digamos, a senha, vai haver um problema
> > de sincronia. O mesmo que acotnece com bancos de dados que não possuem
> > locks.
> >
> > O Tomcat, como Container Web, recebe (ou pode receber) centenas de
> > requisições num espaço de tempo muito curto. Caso não pudessem ser
> > utilizadas threads, seria atendida uma rquisição por vez (lembrando que
> > o HTTP é um protocolo sem estado), o usuário deveria esperar eu, por
> > exemplo, enviar meu login, o servlet receber isto, passar ao banco, o
> > banco processar, passar a resposta para o servlet, o servlet validar,
> > processar, converter, chamar uma JSP (ou criar um HTM na resposta) e
> > desviar para o usuário. Fecha-se a conexão e o container está pronto
> > para receber outra chamada. ALguém quer isto? Logo, lembrando que o
> > Jakarta Tomcat é a especificação OFICIAL da Sun Microsystens para o JSP
> > e Servlets, creio que existe a necessidade de tantas threads, algumas
> > para cada request, mais algumas para processos internos, etc.
> >
> > Passando os processos, vamos à memória propriamente dita. Alguém
> > reparou que o sistema bate 100% de RAM (ou quase) mas NUNCA entra em
> > cache? Isto só comprova o que o Eduardo disse, e que é afirmado em
> > centenas de especificações técnicas. O GNU/Linux, como sistema estável,
> > rápido e seguro que é, faz um cache das áreas de disco mais utilizadas
> > em memória. Imagina o Tomcat. Ele precisa executar algumas classes de
> > suas bibliotecas várias vezes por requisição, imagine se todas estas
> > classes permanecessem em disco? Memória Principal é muito mais rápida
> > que qualquer outro meio de armazenamento (exceto cache de processador e
> > registradores, mas esta é outra história…), é muito mais inteligência
> > do sistema operacional buscar os dados dali do que da MS (Memória
> > Secundária, não confundir com uma famosa fabricante de bugs de Redmond).
> > QUando um aplicativo precisa, esta área é limpa instantâneamente e o
> > espaço é alocado. Como o cache é MS, seria idiotice fazer cache de MS em
> > outra partição de MS.
> >
> > O fenômeno do 99% de memória consumida acontece quando a máquina
> > está ligada por muito tempo, não importa qual máquina ou qual kernel.
> > Isto causa o problema dos travamentos? Não. Se fosse assim, não haveriam
> > tantos servdiores GNU/Linux no mundo, nem o nosso firewall ou o Predator
> > estariam vivos. O que acontece é que o cache, aos poucos, vai pegando
> > todo o espaço da memória com o espaço do disco que já foi solicitando,
> > retirando o cache dos que não são mais necessários para dar lugar os
> > outros. Alguém lembra do Round Robin, FIFO, Best-FIt, Worst-FIt, etc. ou
> > todos dormiam nas aulas de SO?
> >
> > Resumindo: o GNU/Linux é assim e essa é uma das causas de seu
> > sucesso mundial.
> >
> > FYI:
> >
> > GNU/Linux
> > http://www.geocrawler.com/archives/3/243/2002/2/0/7968061/
> > http://www.revistadolinux.com.br/forum/000,020,1,2003.0901.080952.html
> > http://www.onlamp.com/pub/a/onlamp/2002/11/07/linux_threads.html
> > http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html#D
> >
http://groups.google.com/groups?q=“free+memory”+process+threads+kernel&hl=en
&lr=&ie=UTF-8&oe=utf-8&selm=7gk3km%24k621%40norma.bull.net&rnum=4
> >
> > Tomcat/Servlets
> > http://java.sun.com/products/servlets
> > http://marc.theaimsgroup.com/?t=104519961700002&r=1&w=2
> > http://marc.theaimsgroup.com/?t=104333066400004&r=1&w=2
> >
> >
> >
> >
> >
> > Em Sex, 2003-11-28 às 14:44, Andre Luiz escreveu:
> >
> > > Fala ae… certo?
> > >
> > > Aqui onde eu trabalho temos um proxy onde os usuarios acessam a internet
por autenticacao… o problema eh que me deparei com a situacao
> > > de que o programa ncsa_auth estah sendo executado 100 vezes (ps ax |
grep [n]csa_auth | wc -l)… alguem pode me dizer se isso eh
> > > normal?
> > >
> > >
> > > valew!

Detalhe:

E eu já era o rei dos erros de digitação… :lol:

[EDITADO acrescentando comentário inútil]

Detalhe2:

Nessa época eu tava na turminha do Stallman de chamar tudo de GNU/Alguma coisa… :stuck_out_tongue:

[/EDITAO]

[]s

smota

Hummm de entrao … isso (testar na sua e não na produção) só vale se seu teste for muito bem feito, com uma ferramenta de stress bem utilizada (a ferramentar por si não diz nada) …

É que as vezes seu código só vai ter comportamento inaceitável com uma carga grande (se ele aloca recursos demais, objetos demais, etc. … baseado em usuários ou em requisições) … com carga pequena não rola o problema.

Por isso se quiser afirmar e quiser que ele acredite mostre o teste ou convença a rodar em produção, por 2 horas que seja … não vai matar ninguem.

Criado 8 de julho de 2004
Ultima resposta 8 de jul. de 2004
Respostas 6
Participantes 4