shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script consumindo memória demais.


From: Tiago Peczenyj
Subject: Re: [shell-script] Script consumindo memória demais.
Date: Mon, 8 Dec 2014 15:57:56 -0200

ola

vc esta jogando o conteudo do arquivo para uma variavel de ambiente e, salvo engano, vc vai ter dificuldades de desalocar isso.

a primeira coisa que eu tentaria fazer é um 'unset' do seu vetor ao final de cada laço.

a segunda coisa que eu tentaria fazer é criar o vetor em um subshell pois, ao final da execução do mesmo, a memoria sera desalocada.

a terceira coisa seria não usar vetores para grandes quantidades de dados. arquivos temporarios podem ser bem mais eficientes.

fica dificil dar uma resposta mais concreta


2014-12-08 15:50 GMT-02:00 address@hidden [shell-script] <address@hidden>:
 

Prezados


Para realizar testes no meu ambiente de trabalho, escrevi uma biblioteca de funções e quando preciso realizar tais testes, simplesmente carrego esta biblioteca com um source e mando brasa no meu serviço.


Ocorre que numa sexta-feira dessas, eu carreguei a biblioteca, executei uma função de teste dentro de um loop "while true do done" e deixei rodando o final de semana todo, sem querer - é claro.


Quando cheguei na segunda a máquina estava travada, só respondendo a um "dedoff" ( desligamento pelo longo pressionamento da tecla power).


Segue abaixo um pequeno script que causa o mesmo efeito:


cat teste_memoria.sh

#!/bin/bash


  function ler_arquivo {

    local endereco="$1"

    grep "$endereco" arquivo.txt

  }


  echo "1 aaa" > arquivo.txt

  echo "2 bbb" >> arquivo.txt

  echo "3 ccc" >> arquivo.txt

  echo "4 ddd" >> arquivo.txt

  echo "5 eee" >> arquivo.txt


  clear

  

  for n in $(seq 1 100000); do

    for i in 1 2 3 4 5; do

      vetor=( $(ler_arquivo "$i") )

      echo  "$n ${vetor[1]}"

    done

  done


Se eu executo este script com "./teste_memoria.sh" a quantidade de memória alocada para a instância do bash não se altera, porém se eu fizer "source teste_memoria.sh" a quantidade de memória cresce a cada execução, não retornando aos patamares iniciais.


O que estou fazendo de errado? Há como evitar esse efeito?







--
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj

reply via email to

[Prev in Thread] Current Thread [Next in Thread]