Anatomia do Linux Servidor de utilização da memoria

Por Joel Pérez, Ajith Narayanan (Oracle Certified Associate) & Carlos H. Y. Furushima (OCE),
Postado em Setembro 2014

Revisado por Marcelo Pivovar - Solution Architect

Introdução Clientes Oracle cloud services enfrentavem a um longo tempo um problema referente utilização de memória estar sempre a um nível maior que 90% de consumo. Em muitos momentos parecia algo incomum e não realista, realizado uma pesquisa sobre esse caso foi descoberto um “bug” no processo de extração das informações referente a memória no Linux (da perspectiva Oracle), que foi responsável pela geração deste número não condizente com a realidade.

Declaração do problema

Oracle Enterprise Manager (OEM Grid Control) faz uso do utilitário sysstat, que são coleções de ferramentas de monitoração de performance para Linux, o SAR é a ferramenta utiliza para extração de informações sobre utilização de memória, essa utilização de extração foi induzido a um erro que refletiu em métricas do OEM Grid Control (mostrando números que não refletem a realidade dos fatos). Não foi validado se houve essa correção no OEM Cloud Control 12c.

Demostraremos abaixo o motivo dessas métricas enganosas.

OBS.: Para extrair é usado o comando "sar" em combinação ao parâmetro "r", que corresponde a utilização de memória, o comando completo é "sar -r 5 5". O campo "%memused" que representa a porcentagem de uso de memória, o cálculo para obter essa métrica referente a utilização de memória, se dá pela seguinte formula: %memused = (kbmemused/(kbmemused+kbmemfree)) * 100

O intuito do sistema operacional Linux é fazer uso do recurso de memória principal da melhor forma possível, assim é considerado como recurso desperdiçado área de memória livre, uma vez que esse espaço pode ser usado para buffers e cache, promovendo um ganho em operações de I/O.

  • Buffers = Quantidade de memória física usada como buffers em operações de escrita para disco. (Escrita: Entrada de dados de memória para disco)
  • Cache = Quantidade de memória física usada como cache em operações de leitura em disco. (Leitura:Saída de dados de disco para memoria)

Para obter a porcentagem efetivo de uso de memória, devemos excluir os buffers e cache, contabilizando assim somente o uso liquido da memória RAM.

Utilização de Memoria = ((kbmemused-kbbuffers-kbcached)/(kbmemused+kbmemfree)) * 100

A seguir é descrito um exemplo com o cálculo da utilização de memória, sob duas perspectivas são elas:

  • Utilização de Memoria Bruta

Este é o cálculo que o utilitáriosar faz na extração do campo "%memused", ou seja, o sistema operacional Linux considera Cache e Buffer na contabilização da porcentagem de uso da memória.

Exemplo :

Kbmemused kbmemfree kbbuffers kbcached

33180580     

16252192   

1591888   

22660668

Utilização de Memória Bruta (%memused) = (kbmemused/(kbmemused+kbmemfree)) * 100

Utilização de Memória Bruta (%memused) = (33180580/(33180580+16252192)) * 100

Utilização de Memória Bruta (%memused) = (0,6713) * 100

Utilização de Memória Bruta (%memused) = 67,13%

  • Utilização de Memoria Liquida

Este é o cálculo real referente a memória usada, ou seja, este percentual referente a quantidade total da memória que efetivamente está sendo usada, desprezando cache e buffer.

Utilização de Memória Liquida (%memused) = ((kbmemused-kbbuffers-kbcached)/(kbmemused+kbmemfree)) * 100

Utilização de Memória Liquida (%memused) = ((33180580-1591888-22660668)/(33180580+16252192)) * 100

Utilização de Memória Liquida (%memused) = ((0,1806)) * 100

Utilização de Memória Liquida (%memused) = 18,06%

Se utilizarmos o utilitário top para verificar a utilização da memória, a situação em primeiro momento parece terrível, dando a falsa impressão que toda a memória está sendo usada. Veja no exemplo abaixo.

O utilitário top traz as seguintes informações:

 

KB

MB

GB

Total de Memória Física

49432772

48274.19141

47.14277

Memória Usada

33167868

32390.49609

31.63134

Memória Livre

16264904

15883.69531

15.51142

O cache é uma dimensão parcial localizada na memória principal (Memória RAM), em operações de leitura em disco, os blocos oriundos da leitura é armazenado temporariamente no cache, caso haja uma nova necessidade de usa-las, assim tornando a operação de leitura mais performática. A área temporária de cache é dinâmica, ou seja, frequentemente é necessário ceder espaço caso algum processo requeira mais recurso em memória.

Com o objetivo de ter uma melhor visibilidade de utilização de memória, usaremos o comando free.

A linha que corresponde a "Mem:", informa que o sistema computacional tem 48274 MB de memória (47,14GB), dos quais 32581 MB (31,81GB) está sendo usado e 15693MB (15,32GB) está livre. A coluna de memória "shared" é obsoleta e deve ser ignorada. A coluna buffers mostra que 1554MB (1,51GB) está sendo usada como buffers para em operações de escrita para disco, já a coluna cached mostra que 22106MB (21,58GB) está sendo usada como cache de operações de leitura em disco. É importante ressaltar que áreas de buffers e cache, assim como as áreas livres (free) estão disponíveis para uso. Na linha que corresponde a "-/+ buffers/cache:" mostra de maneira mais clara o uso real de memória, onde no campo free termos o valor de 39354MB (38,43GB), esse valor representa a quantidade de memória livre para uso, ou seja, é a soma da quantidade de buffers, cache e free (15693MB + 1554MB + 22106 MB). Assim, é importante notar que, deveríamos nos concentrar na segunda linha "-/ + buffers/cache:" para obter informações sobre memória disponível no sistema.

Joel Pérez é um DBA expert com mais de 12 anos de experiência, especializado nas áreas de bases de dados com especial ênfase em soluções de alta disponibilidade (RAC, Dataguard, e outros). É um palestrante habitual em eventos de Oracle como: OTN LAD TOUR e outros. É o primeiro latino-americano a ser nomeado "OTN Expert " no ano de 2003 e é Oracle ACE Director. Durante estes anos, Joel trabalhou como consultor senior em um grande número de empresas e clientes em diversos países: Venezuela, Panama, Costa Rica, Dominican Rep., Haiti, Nicaragua, Guatemala, Colombia, Honduras, Ecuador, Mexico, India, Italy, France.

Ajith Narayanan possui 9 anos de experiência de trabalho, principalmente na administração de banco de dados Oracle e Oracle Apps administração, planejamento de capacidade e ajuste de desempenho em vários ambientes Oracle.

Carlos H. Y. Furushima é um DBA Oracle Sênior com ampla experiência e conhecimento em diversas áreas do banco de dados relacional é um especialista em "Performance, diagnostic and tuning", High Availability e Backup & Recovery, nos últimos anos de sua carreira profissional, Furushima vem trabalhado simultaneamente como DBA Oracle e Unix SysAdmin, atualmente atende empresas nacionais de grande porte do ramo de varejo e construção civil.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.