(Resolvido) Firebird Classic 2.1 com alto consumo de RAM

Iniciado por willsazon, 28 de Julho de 2016, 10:46

tópico anterior - próximo tópico

willsazon

Muito bom dia a todos da lista,

Possuo uma base de dados firebird com 40GB e essa base é acessada por um ERP. Pelo que eu pude perceber ao abrir um módulo desse ERP é criada uma nova conexão com a base de dados.

Meu servidor é o Ubuntu server 14.04 LTS virtualizado no Hyper-V. Esse servidor possui 4 processadores e 25GB de RAM com HD expansivo de 120GB. Os usuários começaram a reclamar de lentidão do software e quando fui monitorar vi que o FB esta consumindo praticamente todo recurso de RAM do servidor.

Em várias buscas na net encontrei esse artigo http://www.firebase.com.br/artigo.php?id=2680, fiz alguns testes usando as configurações nele mencionadas mas sem sucesso.

Executando o comendo ps aux | grep firebird no Ubuntu consigo ver as instancias do firebird abertas.

root@Bancos:/BANCOS# ps aux | grep firebird
firebird  1470  0.0  0.0  17704  2716 ?        S    05:49   0:00 /usr/lib/firebi                                                                                     
firebird  1493  0.0  0.0  63860 12508 ?        Ss   05:58   0:00 fb_inet_server
firebird  1742  0.2  0.1  97984 46856 ?        Ss   07:10   0:10 fb_inet_server
firebird  1812  0.0  0.0  65492 16660 ?        Ss   07:34   0:00 fb_inet_server
firebird  1818  0.0  0.0  66844 17744 ?        Ss   07:35   0:00 fb_inet_server
firebird  1832  0.0  0.0  66588 17948 ?        Ss   07:38   0:01 fb_inet_server
firebird  1848  0.5  0.1  96260 44240 ?        Ss   07:40   0:14 fb_inet_server
firebird  1993  1.7  0.1  76400 26964 ?        Ss   07:51   0:38 fb_inet_server
firebird  2007  0.0  0.0  69980 20588 ?        Ss   07:54   0:00 fb_inet_server
firebird  2025  0.0  0.0  68632 20296 ?        Ss   07:55   0:00 fb_inet_server
firebird  2042  0.3  0.1  82608 30936 ?        Ss   07:58   0:05 fb_inet_server
firebird  2056  0.0  0.0  66200 17800 ?        Ss   08:00   0:00 fb_inet_server
firebird  2072  0.2  0.0  72164 22928 ?        Rs   08:01   0:03 fb_inet_server
firebird  2094  0.2  0.1  78832 27320 ?        Ss   08:02   0:03 fb_inet_server
firebird  2104  0.3  0.1  75124 26376 ?        Ss   08:02   0:04 fb_inet_server
firebird  2139  0.6  0.1  88816 38336 ?        Ss   08:07   0:08 fb_inet_server
firebird  2156  0.0  0.0  66012 17316 ?        Ss   08:09   0:00 fb_inet_server
firebird  2158  0.0  0.0  68384 18780 ?        Ss   08:09   0:00 fb_inet_server
firebird  2161  0.1  0.0  69208 20268 ?        Ss   08:10   0:01 fb_inet_server
firebird  2175  0.0  0.0  66008 17344 ?        Ss   08:12   0:00 fb_inet_server
firebird  2190  3.3  0.0  69212 19604 ?        Ss   08:14   0:27 fb_inet_server
firebird  2192  0.4  0.0  74464 25476 ?        Ds   08:15   0:03 fb_inet_server
firebird  2201  0.0  0.0  66012 17692 ?        Ss   08:18   0:00 fb_inet_server
firebird  2224  0.0  0.0  65880 17704 ?        Ss   08:20   0:00 fb_inet_server
firebird  2243  0.1  0.0  68120 19300 ?        Ss   08:22   0:00 fb_inet_server
firebird  2257  0.0  0.0  65628 17444 ?        Ss   08:25   0:00 fb_inet_server
firebird  2259  1.1  0.0  66524 18048 ?        Ds   08:25   0:01 fb_inet_server



Executando o comando free -m -t obtenho a seguinte saída
root@Bancos:/BANCOS# free -m -t
             total       usado      livre    compart.  buffers     em cache
Mem:   25114      24843        270         11         59      23785
-/+ buffers/cache:        998      24115
Swap:        16380          0      16380
Total:       41495      24843      16651


Ao executar o comando  ps aux |head -1 ; ps aux | sort -nk 4 -r | head -n 1 obtenho a seguinte saída
root@Bancos:/BANCOS#  ps aux |head -1 ; ps aux | sort -nk 4 -r | head -n 1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
firebird  2139  0.9  0.2 107672 56552 ?        Ss   08:07   0:25 fb_inet_server


Alguém saberia me informar o motivo desse problema?
Ubuntu 14.04.2 LTS

druidaobelix

Então, /willsazon/,

Em rápida vista não me parece que seja esse o problema, isto é, não se trata de consumo excessivo de memória, o que apenas não está havendo no seu sistema.

Vamos ler as informações do 'free": tenho RAM de 25114 , dos quais 24483 estão sendo usados, porém desse uso 23785 são cache.
Então quanto é que estou usando realmente de RAM primária? A diferença entre 24483 - 23785, que é algo como 698, ou seja, quase nada, o que é compatível com o 'ps aux' mostrado adiante e que pontua o processo consumindo apenas 0,2% (não é igual porque obviamente os momentos são diferentes), e ainda confirmada pelo não uso da swap, em resumo, apenas não há consumo excessivo de RAM por parte desse processo.

Note que o uso de memória cache é uma "otimização" feita pelo kernel, segundo métodos próprios, visando obter melhor performance do sistema, evitando leitura em disco, extremamente mais lenta, ou seja, se disponível o Linux irá crescentemente se utilizando da memória RAM para cache, pois dessa forma o sistema melhora o desempenho, mas evidentemente estar em cache não significa estar esgotando a memória RAM, pois só estará em cache aquilo que for mais usado.

O problema deve estar em outro lugar, sendo uma boa hipótese a ser pesquisada o HD expansivo, que é uma atividade muito lenta, sobretudo quando em fase real de expansão, se é que estou entendendo corretamente o que você chamou de "hd expansivo".

Esse tópico eventual pode ajudar a entender melhor esse aspecto:

Consumo de memória muito alto

http://ubuntuforum-br.org/index.php/topic,120220.msg660340.html#msg660340

Nele veja sobretudo o artigo desse link:

Explicando o "free", do Linux

https://bitismyth.wordpress.com/2012/05/15/explicando-o-free-do-linux/

www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

galactus

Colega, o link indicado para o artigo só pode ser visto para quem é cadastrado no Fórum em questão!

Quanto ao seu problema, do que pude pesquisar no tio Google, podem ser várias coisas. Mas duas coisas podem ser o motivo princiapl segundo o FAQ do Firebird:

http://www.firebirdfaq.org/faq333/

Ou seja, otimização da base de dados ou o mais provável utilização do cache  pelo sistema de arquivos. Este último também afeta sistemas Windows.  A solução geralmente se dá alterando parâmetros na utilização do cache do sistema operacional e do firebird, como neste exemplo: http://servertopic.com/topic/Ak1f-high-memory-utilization-with-firebird-windows-server-2008-r2

Você não disse se o sistema é 32 ou 64bits, é importante saber disso.  E é bom saber o sistema de arquivos utilizado no Ubuntu para tentar conter o problema do uso do cache!


Lembrando que nunca usei o Firebird, então não tenho como te ajudar mais a não ser te mostrando este norte!     

Talvez você possa achar mais informações úteis aqui:

http://www.firebirdfaq.org/cat10/
http://www.firebirdfaq.org/cat6/

Agora, esse Firebird é usado pra burro no Windows, não acho quase nada pra Linux!  Foi você quem fez a instalação e configuração disso aí?
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

willsazon

Citação de: druidaobelix online 28 de Julho de 2016, 14:17
Então, /willsazon/,

Em rápida vista não me parece que seja esse o problema, isto é, não se trata de consumo excessivo de memória, o que apenas não está havendo no seu sistema.

Vamos ler as informações do 'free": tenho RAM de 25114 , dos quais 24483 estão sendo usados, porém desse uso 23785 são cache.
Então quanto é que estou usando realmente de RAM primária? A diferença entre 24483 - 23785, que é algo como 698, ou seja, quase nada, o que é compatível com o 'ps aux' mostrado adiante e que pontua o processo consumindo apenas 0,2% (não é igual porque obviamente os momentos são diferentes), e ainda confirmada pelo não uso da swap, em resumo, apenas não há consumo excessivo de RAM por parte desse processo.

Note que o uso de memória cache é uma "otimização" feita pelo kernel, segundo métodos próprios, visando obter melhor performance do sistema, evitando leitura em disco, extremamente mais lenta, ou seja, se disponível o Linux irá crescentemente se utilizando da memória RAM para cache, pois dessa forma o sistema melhora o desempenho, mas evidentemente estar em cache não significa estar esgotando a memória RAM, pois só estará em cache aquilo que for mais usado.

O problema deve estar em outro lugar, sendo uma boa hipótese a ser pesquisada o HD expansivo, que é uma atividade muito lenta, sobretudo quando em fase real de expansão, se é que estou entendendo corretamente o que você chamou de "hd expansivo".

Esse tópico eventual pode ajudar a entender melhor esse aspecto:

Consumo de memória muito alto

http://ubuntuforum-br.org/index.php/topic,120220.msg660340.html#msg660340

Nele veja sobretudo o artigo desse link:

Explicando o "free", do Linux

https://bitismyth.wordpress.com/2012/05/15/explicando-o-free-do-linux/

Boa tarde druidaobelix,

po muito legal a sua explicação. Muito obrigado, consegui entender bem sobre a memoria e o comando free.

Eu me confundi pela saída do comando free e também pelo gerenciamento do The Dude onde ele está mostrando sempre 99% de memoria em uso constantemente.

Como na imagem abaixo.

Ubuntu 14.04.2 LTS

druidaobelix

Como disse, vi o tópico apenas muito rapidamente e sem qualquer reflexão, porém vendo as observações do /Galactus/ e agora o seu complemento me dei conta de que estamos falando de um servidor Linux em máquina virtual hospedado num Windows, então falta muita coisa para analisar, como o primeiro e mais evidente passo que é a máquina física na qual está o host Windows, se ela é de fato suficientemente robusta para tanto. Se a hospedeira estiver "apertada" ao ceder core e ram, a guest também não vai desempenhar bem.

Todo projeto depende dos recursos que concretamente se tem em mãos, enfim, do orçamento realmente disponível e, assim, a priori, não sei dizer as razões pelas quais se optou por esse hardware (que no momento desconhecemos qual seja) e essa arquitetura, mas é claro que se tenho os recursos adequados o melhor não é virtualizar o Linux e sim deixá-lo rodando diretamente em máquina física, a menos que o seu hosts seja de fato um "supersônico" para sustentar de forma condizente e convincente as VM que estiverem nele. O "normal" é ter o Linux em máquina física e quando precisa mesmo de Windows, então virtualizo este e não aquele.
www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

willsazon

Citação de: druidaobelix online 28 de Julho de 2016, 15:25
Como disse, vi o tópico apenas muito rapidamente e sem qualquer reflexão, porém vendo as observações do /Galactus/ e agora o seu complemento me dei conta de que estamos falando de um servidor Linux em máquina virtual hospedado num Windows, então falta muita coisa para analisar, como o primeiro e mais evidente passo que é a máquina física na qual está o host Windows, se ela é de fato suficientemente robusta para tanto. Se a hospedeira estiver "apertada" ao ceder core e ram, a guest também não vai desempenhar bem.

Todo projeto depende dos recursos que concretamente se tem em mãos, enfim, do orçamento realmente disponível e, assim, a priori, não sei dizer as razões pelas quais se optou por esse hardware (que no momento desconhecemos qual seja) e essa arquitetura, mas é claro que se tenho os recursos adequados o melhor não é virtualizar o Linux e sim deixá-lo rodando diretamente em máquina física, a menos que o seu hosts seja de fato um "supersônico" para sustentar de forma condizente e convincente as VM que estiverem nele. O "normal" é ter o Linux em máquina física e quando precisa mesmo de Windows, então virtualizo este e não aquele.
Prezados senhores,

Eu acabo de migrar para essa nova estrutura onde como host de virtualizacão tenho um Dell PowerEdge R730 com 64GB de RAM dois processadores E5-2600 v4 e 2 Hds de 300GB e Windows Server 2012 com Hyper-v.

Esse host possui apenas duas VMs rodando sobre ele Servidor de Banco de dados (25GB de RAM, HD de 120GB e 6 nucleos do processador dedicados a maquina virtual) e servidor de  aplicação (8GB de RAM, HD de 300GB e 2 nucles de processador)


Antes de migrar o servidor de base de dados para maquina virtual eu possuia um servidor fisico dedicado para banco de dados com 2 HDs de 500 em RAID, 4GB de RAM e um Xeon e a situação era a mesmo.

Mesmo em ambiente físico o problema de memoria ocorria. O The Dude e o comando free -m mostravam 99% de memoria em uso. Sempre achei que fosse por que meu servidor físico possuía apenas 4GB de RAM, mas me enganei pois agora ocorre o mesmo problema.
Ubuntu 14.04.2 LTS

druidaobelix

Citar[...] tenho um Dell PowerEdge R730 com 64GB de RAM dois processadores E5-2600 v4 e 2 Hds de 300GB [...]

Uma bela de uma máquina, é essa aqui?

http://www.techradar.com/reviews/pc-mac/peripherals/servers/dell-poweredge-r730-1296123/review

Suponho que os discos sejam SSD, porque definitivamente merece.  :)

www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

zekkerj

Olá wilsazon, dica rápida: ignore as informações do "The Dude" / "free -m". Mesmo que vc não esteja rodando absolutamente nada em sua máquina, eles vão indicar sempre que toda a memória está em uso, pois é exatamente isso que o Linux faz o tempo todo: ele toma toda a memória pra si e a usa conforme seu próprio juízo. Enquanto a máquina não começar a usar o Swap, está tudo bem.

Reforço a indicação do DruidaObelix e do Galactus de que seu problema parece estar mais relacionado com o sistema de arquivos e com o disco virtual. Trabalho muito com o Hyper-V também, e ele pode ser um pouco traiçoeiro com isso. Primeiro, como vc está usando o Server2012, seu  Hyper-V aceita tanto discos VHD quanto VHDX, este último tem desempenho melhor em algumas situações.

Procure também não usar nenhuma opção dinâmica, nem memória nem disco. Estas opções trocam desempenho por flexibilidade.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

willsazon

Citação de: zekkerj online 28 de Julho de 2016, 19:06
Olá wilsazon, dica rápida: ignore as informações do "The Dude" / "free -m". Mesmo que vc não esteja rodando absolutamente nada em sua máquina, eles vão indicar sempre que toda a memória está em uso, pois é exatamente isso que o Linux faz o tempo todo: ele toma toda a memória pra si e a usa conforme seu próprio juízo. Enquanto a máquina não começar a usar o Swap, está tudo bem.

Reforço a indicação do DruidaObelix e do Galactus de que seu problema parece estar mais relacionado com o sistema de arquivos e com o disco virtual. Trabalho muito com o Hyper-V também, e ele pode ser um pouco traiçoeiro com isso. Primeiro, como vc está usando o Server2012, seu  Hyper-V aceita tanto discos VHD quanto VHDX, este último tem desempenho melhor em algumas situações.

Procure também não usar nenhuma opção dinâmica, nem memória nem disco. Estas opções trocam desempenho por flexibilidade.

Bom dia,
Sim eu me confundi quando disse disco dinâmico. Eu quiz dizer que eu o disco é de 120Gb porem apenas 70GB estavam sendo usados. Quando formatei o servidor eu escolhi VHD e o formato de arquivos EXT4.

O meu grande problema em relação a tudo isso é a lentidão do ERP que usa o FB. Minha primeira reação foi pensar ser por questão do FB estar consumindo muita memoria, mas posso ter me enganado. Hoje fui verificar o servidor e mesmo com apenas 3 conexões a base de dados o The Dude mostra 99% da memoria RAM em uso.
Ubuntu 14.04.2 LTS

druidaobelix

Para não ficar procurando no lugar errado, toda análise de lentidão de uma rede começa sempre pela infraestrutura até finalmente chegar no software específico.

Se o disco é da forma comum, isto é, afastada a hipótese de alocação dinâmica, que sabidamente é lenta, resta pesquisar outros fatores ainda na perspectiva da infraestrutura.

1) Quantas estações de trabalho estão vinculadas a esse servidor?
A lentidão ocorre mesmo com apenas duas ou três estações clientes trabalhando?

2) Qual é a tipologia dessa rede (forneça uma ideia desse cenário), isto é:

a) cabeamento ou wireless?
b) existem switches e roteadores no caminho?

3) as estações clientes possuem placas de rede compatíveis e sem gargalo (10/100/1000 Mbps)?

4) Antes de partir para análises mais sofisticadas, fez a análise mais simples de todas que é a mensuração pelo ping?

a) o valor obtido é razoável?
b) todas as estações estão dentro da mesma média?

Problemas comuns:

colisão em excesso
broadcast em excesso
Uplink estreito
Switches em loop
cpu de switches esgotado
www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

zekkerj

Citação de: willsazon online 29 de Julho de 2016, 07:29
Citação de: zekkerj online 28 de Julho de 2016, 19:06
Olá wilsazon, dica rápida: ignore as informações do "The Dude" / "free -m". Mesmo que vc não esteja rodando absolutamente nada em sua máquina, eles vão indicar sempre que toda a memória está em uso, pois é exatamente isso que o Linux faz o tempo todo: ele toma toda a memória pra si e a usa conforme seu próprio juízo. Enquanto a máquina não começar a usar o Swap, está tudo bem.

Reforço a indicação do DruidaObelix e do Galactus de que seu problema parece estar mais relacionado com o sistema de arquivos e com o disco virtual. Trabalho muito com o Hyper-V também, e ele pode ser um pouco traiçoeiro com isso. Primeiro, como vc está usando o Server2012, seu  Hyper-V aceita tanto discos VHD quanto VHDX, este último tem desempenho melhor em algumas situações.

Procure também não usar nenhuma opção dinâmica, nem memória nem disco. Estas opções trocam desempenho por flexibilidade.

Bom dia,
Sim eu me confundi quando disse disco dinâmico. Eu quiz dizer que eu o disco é de 120Gb porem apenas 70GB estavam sendo usados. Quando formatei o servidor eu escolhi VHD e o formato de arquivos EXT4.

O meu grande problema em relação a tudo isso é a lentidão do ERP que usa o FB. Minha primeira reação foi pensar ser por questão do FB estar consumindo muita memoria, mas posso ter me enganado. Hoje fui verificar o servidor e mesmo com apenas 3 conexões a base de dados o The Dude mostra 99% da memoria RAM em uso.

Você está usando o The Dude pra acompanhar a memória do hospedeiro, ou da VM Linux? Se é do hospedeiro, tudo bem, vale; mas a VM Linux, como já dissemos, não tem nenhum problema dela estar em 99% de RAM, o Linux sempre faz isso.

Quanto ao disco virtual, há um aplicativo que converte VHD em VHDX, que vai te dar algumas vantagens.

Vou aproveitar pra bater em outra questão: o próprio Firebird. Cara, a menos que tua aplicação realmente exija o Firebird, ele não é, de forma nenhuma, a melhor solução de SGBD. Eu recomendo fortemente que você use outra solução, como o MySQL, o MariaSQL (que basicamente é o MySQL GPL), ou mesmo o Oracle, que se dá muito bem com aplicações ERP.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

willsazon

Vamos lá:

druidaobelix
Citar1) Quantas estações de trabalho estão vinculadas a esse servidor?
A lentidão ocorre mesmo com apenas duas ou três estações clientes trabalhando?
ao total são 63 estações de trabalho quando em horário de pico.
Quando cheguei hoje de manha haviam apenas três estações conectadas, o consumo exibia  99% de RAM, andei pesquisando no google sobre o que me disseram sobre o uso da memória pelo Linux e via que realmente vai ser assim. Ninguém ainda me reclamou de lentidão hoje, contudo o que fiz de diferente foi entrar no firebird.config e mudar a quantidade de processadores utilizadas pelo FB para 3 ao invés de 1 como estava o padrão do mesmo.

Citar2) Qual é a tipologia dessa rede (forneça uma ideia desse cenário), isto é:

a) cabeamento ou wireless?
b) existem switches e roteadores no caminho?

a)As estações são todas cabeadas.
b) Existe sim um switch no caminho. Tenho um especifico para os servidores e um para as estações.

Citar3) as estações clientes possuem placas de rede compatíveis e sem gargalo (10/100/1000 Mbps)?
Shitchs GB e placas de rede também GB.

Citar4) Antes de partir para análises mais sofisticadas, fez a análise mais simples de todas que é a mensuração pelo ping?
Ping < 1ms

Citarcolisão em excesso
broadcast em excesso
Uplink estreito
Switches em loop
cpu de switches esgotado
Estas não verifiquei, vou verificar.

zekkerj
CitarVocê está usando o The Dude pra acompanhar a memória do hospedeiro, ou da VM Linux? Se é do hospedeiro, tudo bem, vale; mas a VM Linux, como já dissemos, não tem nenhum problema dela estar em 99% de RAM, o Linux sempre faz isso.

Quanto ao disco virtual, há um aplicativo que converte VHD em VHDX, que vai te dar algumas vantagens.

Vou aproveitar pra bater em outra questão: o próprio Firebird. Cara, a menos que tua aplicação realmente exija o Firebird, ele não é, de forma nenhuma, a melhor solução de SGBD. Eu recomendo fortemente que você use outra solução, como o MySQL, o MariaSQL (que basicamente é o MySQL GPL), ou mesmo o Oracle, que se dá muito bem com aplicações ERP.

Removi a opção de monitoramento de memoria da VM Linux pelo Dude. Quanto ao tipo de disco também me confundi, fui olhar na configuração da VM e esta em VHDX, lembrei que quando fui criar o Hyper-v não permitiu VHD.

Infelizmente cara, a aplicação só roda sobre o FB 2.1.  (Sobre o Oracle ele roda, mas não tive a benção da diretoria para tal aquisição).

Como disse acima, eu mudei no firebird.conf para utilizar 3 processadores,  já que aloquei 6 para a VM e até agora não houve nem uma reclamação.
Vou aguardar pra ver se vai permanecer assim caso não permanece irei verificar as sugestões do amigo druidaobelix.

Vou aguardar até está próxima semana para ver os resultados. Depois eu volto aqui para contar.  :)
Ubuntu 14.04.2 LTS

willsazon

Prezados senhores,

venho por meio deste agradecer a atenção e as resposta no nesse tópico criado por mim.

Conforme eu havida dito eu fiz alguns testes e não obtive mais o problema.  Essa semana no auge do faturamento da empresa o sistema está a 100%.

A solução (não sei ao certo) se deu quando eu entrei no arquivo de configuração do Firebird e mudei a quantidade de processador para 3.

Mais uma vez muito obrigado.
Ubuntu 14.04.2 LTS