Memory Issue: Raspberry Pi [fechado]

0

Estou trabalhando em um projeto necessário para monitorar o no-break usando o servidor NUT. Para monitoramento e registro de dados, estou usando o sistema operacional minibiano (JESSIE). A fim de monitorar o no-break ETON eu escrevi um script de shell que pergunta os dados a cada segundo. Como estou usando um cartão SD de 8 GB para armazenar o sistema operacional e o registro de dados, participoi-o como unidades raiz (2 Gb) e de registro de dados (4 Gb).

O script do monitor da UPS é iniciado pelo Crontab como um processo em segundo plano. O recurso incluído nos scripts do UPS Monitor é o seguinte:

  • Buscar dados do nobreak a cada 1 segundo
  • Gerar nova pasta todos os dias
  • Carimbo de data / hora dos arquivos de log .csv
  • Procure uma pasta com mais de um dia, comprima-a e exclua a pasta

Problema:

Eu assumi que o espaço de 2 GB para o root seria suficiente, já que meu sistema operacional leva apenas cerca de 800 Mb. Mas enquanto executo um teste por três dias, a partição raiz consumiu mais de 100 Mb em três dias. Neste caso, minha partição raiz será preenchida dentro de 30 dias

Não sei por que executar o shell script causando muita sobrecarga na memória.

Aqui está o uso da memória pelo Raspberry Pi OS (sem shell script) e o UPS Monitor (com shell scripts)

Tempo de execução do teste: 3 dias

Teste de memória do monitor UPS: START

TestedememóriadomonitordaUPS:STOP

TestedememóriadoRaspberryPIOS:START

TestedememóriadoRaspberryPIOS:STOP

Usodememóriadosscripts

Encontreialgunslinkson-lineparaencontrarousodememóriapeloscript,masnãoconsigofazernenhumsentido.

Scriptderegistrodedados

#!/bin/bashgpio-gmode16outgpio-gmode21outgpio-gwrite160gpio-gmode24inLOG_PATH='/media/ntfs/logs/'LOG_HEADER='date+%H:%M:%S'LOG_DIR_NAME='date+%d_%m_%Y'LOG_FOLDER='find/media/ntfs/logs-typed-mtime+0'timeCounter=0switchRead=0#Browselogdirectorycd--$LOG_PATHLOG_NAME=$LOG_HEADERwhile:doswitchRead='gpio-gread24'LOG_DIR_NAME='date+%d_%m_%Y'LOG_DIR=$LOG_PATH$LOG_DIR_NAMEecho"$LOG_DIR"

    if [ -d "$LOG_DIR" ]
    then
            cd -- $LOG_DIR
            echo "DIRECTORY FOUND"
    else
        mkdir -p $LOG_DIR
        LOG_NAME='date +%H:%M:%S'
        echo "NEW DIRECTORY CREATED!!!!!"
        cd -- $LOG_DIR
        HEADER='UPS MODEL, UPS STATUS, BATTERY CHARGE, BATTERY RUNTIME,$
        echo $HEADER > $LOG_NAME.csv
        # Calling old folder compression script
        /root/day.sh
    fi

    # executing ups status command and saving result in array
    declare -A status="($(upsc myups | sed 's/\(.*\):\(.*\)/[]=""/'))"

    if [[ ${status[device.model]} != "" ]] ; then
        echo "WRITIN FILE"
        echo  ${status[device.model]}","${status[ups.status]}"," ${stat$
    fi

    if [[ ${status[ups.status]} = *OB* ]] ; then
        timeCounter=$(( $timeCounter+1))
        #echo $timeCounter  ":("

        if [[ "$timeCounter" -gt 20 ]] ; then
            #echo ":D"
            timeCounter=0
            LOG_NAME='date +%H:%M:%S'
            echo $HEADER > $LOG_NAME.csv
       fi
    fi

    if [[ "$switchRead" = 1 ]] ; then
        echo "Read Kar liya bhiya"
        gpio -g write  16 1
        'sudo shutdown -h now'
    else
        gpio -g write 16 0
    fi

    gpio -g write 21 0
    sleep 0.5
    gpio -g write 21 1
    sleep 0.5
done
exit 0

Obrigado

    
por Kunal Sonone 12.09.2016 / 17:38

1 resposta

4

Parece que você está falando sobre o uso de disco / espaço de armazenamento em vez do uso de memória. Memória (ram) é uma rápida volatilidade (dados são perdidos quando desligados) que são usados por programas geralmente para processar dados. Você está falando sobre o uso do disco, que é fisicamente armazenado em seu cartão SD e não é perdido quando desligado. Para o resto, vou assumir que você se referia ao uso do disco.

Existem muitos lugares em que seu programa pode estar usando o disco durante a execução, além de seus arquivos de dados. Sem saber exatamente o que seu programa está fazendo, será difícil dizer exatamente o que está fazendo para usar o espaço extra. No entanto, algumas coisas comuns para procurar são log, cache e arquivos temporários.

Arquivos de log geralmente são gravados em /var/log , arquivos de cache em /var/cache e arquivos temporários em /tmp ou /var/tmp . Estes são locais que poderiam estar crescendo em tamanho e você deve ficar de olho.

Você realisticamente tem duas opções:

  • examine seu script para ver a que outros locais ele pode estar escrevendo, isso depende muito do que está fazendo e, sem mais informações, é difícil aconselhar sobre como fazer isso.
  • analise seu sistema de arquivos para ver onde o espaço livre está sendo usado.

Para o segundo ponto, a ferramenta du é muito útil, ele permite ver quais arquivos / diretórios estão ocupando espaço. Aqui está como eu normalmente acho que os arquivos estão consumindo uma grande quantidade de espaço.

Comece na raiz do seu sistema de arquivos (ou em um subdiretório se você sabe aproximadamente onde o espaço está sendo usado). Execute sudo du -sxh * | sort -h . Isso levará um tempo dependendo do tamanho do diretório que ele está analisando (mas para 1G ele não deve demorar muito). As opções significam -s : resumo de cada arquivo / diretório listado. -x : não cruze os limites do sistema de arquivos, para que você não consiga usar outros discos. E -h para imprimir tamanhos legíveis para humanos. O | sort -h irá ordená-los em ordem de tamanho.

Depois de encontrar os diretórios que estão usando a maior parte do espaço, ou aumentar a quantidade de espaço usado, você pode criar um cd para eles e executar novamente o comando du. Repita isso até encontrar onde seu espaço está indo.

Note que, no seu caso, você está procurando um crescimento em tamanho, mas será um crescimento pequeno, em vez de tamanhos absolutos.

    
por 12.09.2016 / 18:37