Fórum Ubuntu Linux - PT
Suporte Técnico => Servidores => Tópico iniciado por: willsazon em 28 de Julho de 2016, 10:46
-
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 (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?
-
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/
-
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í?
-
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.
(https://s31.postimg.org/kzb3uhoob/Dude.png)
(https://postimg.org/image/r08srkbaf/)
-
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.
-
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.
-
[...] 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. :)
-
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.
-
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.
-
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
-
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.
-
Vamos lá:
druidaobelix
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?
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.
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?
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.
3) 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.
4) Antes de partir para análises mais sofisticadas, fez a análise mais simples de todas que é a mensuração pelo ping?
Ping < 1ms
colisão em excesso
broadcast em excesso
Uplink estreito
Switches em loop
cpu de switches esgotado
Estas não verifiquei, vou verificar.
zekkerj
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.
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. :)
-
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.