Linux

Introdução

Clientes Oracle cloud services enfrentavam 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.

anatomy-of-linux-01

 

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.

anatomy-of-linux-02

 

 

 

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.

anatomy-of-linux-03

 

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.

Carlos H. Y. Furushima é um especialista em banco de dados relacional, trabalhando como consultor de TI, atuando principalmente como o Oracle Database Administrator (DBA Oracle). Tem uma vasta experiência e conhecimento em “Performance, diagnostic and tuning”, “High Availability”, “Backup & Recovery” e “Exadata”. Ele também está entusiasmado com sistema operacional Linux/Unix, onde contribui com o desenvolvimento do código do kernel Linux em parceria com a comunidade “GNU Linux”, com criação e revisão de novas funcionalidades, melhorias e correções de bugs. Recentemente, Furushima divide seu tempo com consultoria especializada em banco de dados Oracle e estudos sobre “Oracle Internals”, com o objetivo de descobrir e entender os benefícios do bancos de dados Oracle em plataforma Linux/Unix. Siga Furushima em seu blog http://dbafurushima.com.br/.