メモリの問題: Raspberry Pi [閉じる]

メモリの問題: Raspberry Pi [閉じる]

私はNUTサーバーを使用してUPSを監視する必要があるプロジェクトに取り組んでいます。監視とデータのロギングにはminibian OS(JESSIE)を使用してください。 ETON UPSを監視するために、1秒ごとにデータを照会するシェルスクリプトを作成しました。私は8Gb SDカードを使ってOSとデータログを保存しているので、これをルート(2Gb)ドライブとデータログ(4Gb)ドライブに分割しました。

UPS監視スクリプトはCrontabによってバックグラウンドプロセスとして起動されます。 UPS Monitorスクリプトに含まれる機能は次のとおりです。

  • 1秒ごとにUPSデータをインポートする
  • 毎日新しいフォルダを作成
  • ログファイル.csvのタイムスタンプ
  • 1日を過ぎたフォルダを検索して圧縮し、フォルダを削除します。

質問:

私のOSには約800Mbしか必要ないので、2GBのルートスペースで十分だと思います。しかし、3日間のテストを実行したとき、ルートパーティションは3日で100Mb以上を消費しました。この場合、私のルートパーティションは30日以内に入力されます。

シェルスクリプトを実行すると、過度のメモリ消費が発生する理由がわかりません。

Raspberry Pi OS(シェルスクリプトなし)とUPS Monitor(シェルスクリプトあり)のメモリ使用量。

テスト実行時間:3日

UPSモニタリングメモリテスト:起動

UPSモニタリングメモリ:テスト開始

UPSモニターメモリーテスト:停止

UPS監視メモリ:テストが停止しました

Raspberry PI OSメモリテスト:はじめに

ここに画像の説明を入力してください。

Raspberry PI OSメモリテスト:停止

ここに画像の説明を入力してください。

スクリプトメモリ使用量

スクリプトのメモリ使用量を見つけるためにオンラインでいくつかのリンクを見つけましたが、まったく意味がありません。

メモリ使用量

データロギングスクリプト

#!/bin/bash
gpio -g mode 16 out
gpio -g mode 21 out
gpio -g write 16 0
gpio -g mode 24 in

LOG_PATH='/media/ntfs/logs/'
LOG_HEADER=`date +%H:%M:%S`
LOG_DIR_NAME=`date +%d_%m_%Y`
LOG_FOLDER=`find /media/ntfs/logs -type d -mtime +0`

timeCounter=0
switchRead=0
#  Browse log directory
cd -- $LOG_PATH
LOG_NAME=$LOG_HEADER

while :
do
    switchRead=`gpio -g read 24`
    LOG_DIR_NAME=`date +%d_%m_%Y`
    LOG_DIR=$LOG_PATH$LOG_DIR_NAME
    echo "$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/\(.*\):\(.*\)/[\1]="\2"/'))"

    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

ありがとう

ベストアンサー1

メモリ使用量ではなく、ディスク使用量/保存スペースを言っているようです。メモリ(RAM)は通常、プログラムがデータを処理するために使用される高速揮発性メモリの一種です(電源が切れるとデータも失われます)。 SDカードに物理的に保存され、電源が切れても失われないディスク使用量について話しています。残りの部分では、ディスク使用量について言及していると仮定します。

データファイルに加えて、プログラムは実行中に複数の場所でディスクを使用できます。プログラムが何をしているのかを正確に知らないと、余分なスペースを使用するために何をしているのかを正確に知ることは困難です。ただし、見つける必要があるいくつかの一般的なエントリは、ログ、キャッシュ、および一時ファイルです。

通常、ログファイルはに書き込まれ/var/log、キャッシュファイルはに書き込まれ、一時ファイルはまたはに書き込まれ/var/cacheます。これらの位置は拡大し続ける可能性があるため、細心の注意を払う必要があります。/tmp/var/tmp

実際には2つのオプションがあります。

  • スクリプトが作成中の他の場所を確認するには、スクリプトを見てください。これは、実行している作業によって大きく異なり、追加情報なしでこれを行う方法を提案することは困難です。
  • ファイルシステムを分析して、空き容量がどのように使用されているかを確認してください。

第二に、このツールはdu非常に便利です。これにより、どのファイル/ディレクトリがスペースを占有しているかを確認できます。以下は、一般的に多くのスペースを占めるファイルを見つける方法です。

ファイルシステムのルート(またはスペースが使用されるおおよその場所がわかっている場合はサブディレクトリ)から始めます。ランニングsudo du -sxh * | sort -h。分析するディレクトリのサイズによっては時間がかかります(ただし、1Gの場合は時間がかかりません)。オプションの意味-s:リストされている各ファイル/ディレクトリの要約。-x処置: 他のディスクを使用しないように、ファイルシステムの境界を越えないでください。-h人が読めるサイズで印刷します。| sort -hサイズ順に並べ替えます。

ほとんどのスペースを使用しているディレクトリを見つけるか、使用されているスペースの量が増えると、そのディレクトリに移動してduコマンドを再実行できます。スペースがどこに行くかを見つけるまでこれを繰り返します。

あなたの場合は、サイズを増やしたいのですが、これは絶対的なサイズではなく小さな増加です。

おすすめ記事