Intereting Posts

Проблема с памятью: малина Pi

Я работаю над одним проектом, который необходим для мониторинга ИБП с использованием сервера NUT. Для мониторинга и регистрации данных я использую мини-OS (JESSIE). Чтобы отслеживать ИБП ETON, я написал сценарий оболочки, который запрашивает данные каждую секунду. Поскольку я использую одну 8-гигабайтную SD-карту для хранения журнала OS и данных, я разделил его на файлы с правами root (2Gb) и datalog (4Gb).

Сценарий монитора ИБП запускается Crontab в качестве фонового процесса. Функция, включенная в сценарии ИБП Monitor, выглядит следующим образом:

  • Извлечение данных ИБП каждые 1 секунду
  • Создавать новую папку каждый день
  • Временная печать файлов журнала .csv
  • Искать папку старше 1 дня, сжать ее и удалить папку

Выпуск:

Я предположил, что 2 ГБ пространства для root будет достаточно, поскольку моя ОС занимает всего около 800 Мб. Но когда я запускаю тест в течение трех дней, корневой раздел потребляет более 100 МБ за три дня. В этом случае мой корневой раздел будет заполнен в течение 30 дней

Я не уверен, почему запуск сценария оболочки вызывает слишком много накладных расходов в памяти.

Вот использование памяти с помощью Raspberry Pi OS (без сценария оболочки) и монитора ИБП (со сценариями оболочки)

Время тестирования: 3 дня

Тест памяти монитора ИБП: СТАРТ

Память монитора ИБП: запуск теста

Тест памяти монитора ИБП: STOP

Память монитора ИБП: тестовый стоп

Тесты памяти малины PI OS: START

введите описание изображения здесь

Тест теста памяти малины PI OS: STOP

введите описание изображения здесь

Использование скриптов в памяти

Я нашел некоторые ссылки в Интернете, чтобы найти использование памяти по сценарию, но не в состоянии сделать из этого никакого смысла.

Использование памяти

Сценарий регистрации данных

#!/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 

спасибо

Похоже, вы говорите об использовании дискового пространства / памяти, а не об использовании памяти. Память (ram) является быстрой изменчивой (данные теряются при отключении питания), которые обычно используются программами для обработки данных. Вы говорите об использовании диска, который физически хранится на вашей SD-карте и не теряется при отключении питания. В остальном я предполагаю, что вы имели в виду использование диска.

Есть много мест, в которых ваша программа может использовать диск во время работы, кроме ваших файлов данных. Не зная точно, что делает ваша программа, трудно будет точно сказать, что он делает, чтобы использовать дополнительное пространство. Однако некоторые общие вещи для поиска – это журнал, кеш и временные файлы.

Файлы журнала обычно записываются в /var/log , файлы кеша в /var/cache и временные файлы на /tmp или /var/tmp . Это места, которые потенциально могут увеличиваться в размерах, и вы должны следить за ними.

У вас есть два варианта:

  • посмотрите на свой сценарий, чтобы узнать, в каких других местах он может писать, это сильно зависит от того, что он делает, и без дополнительной информации сложно дать советы о том, как это сделать.
  • проанализируйте свою файловую систему, чтобы узнать, где используется свободное пространство.

Во второй точке инструмент du очень удобен, он позволяет вам видеть, какие файлы / каталоги занимают место. Вот как я обычно нахожу файлы, которые потребляют большое количество пространства.

Начните в корне вашей файловой системы (или subdir, если вы знаете примерно, где используется пространство). Запустить sudo du -sxh * | sort -h sudo du -sxh * | sort -h . Это займет некоторое время в зависимости от размера каталога, который он анализирует (но для 1G он не должен занять слишком много времени). Параметры означают -s : сводка всех перечисленных файлов / каталогов. -x : не пересекайте границы файловой системы, поэтому вы не пользуетесь другими дисками. И -h для печати удобочитаемых размеров. | sort -h | sort -h сортирует их по размеру.

После того, как вы найдете каталоги, использующие большую часть пространства, или увеличьте количество используемого пространства, вы можете подключиться к ним и повторно запустить команду du. Повторяйте это, пока не найдете, где будет ваше пространство.

Обратите внимание, что в вашем случае вы ищете рост в размере, но это будет небольшой рост, а не абсолютные размеры.