Использование conky RAM - не показывает большой файл на RAM-диске (tmpfs)

Мой файл conkyrc содержит следующее:

${color grey}RAM Usage:$color $mem/ $memmax - $memperc% ${membar 4}

Это показывает числовые значения использования ОЗУ и столбец, например "1.01GiB/ 7.79GiB - 13% xx___________".

Я установил виртуальный диск и скопировал в него большой файл. df -h возвращает следующее:

tmpfs              3,0G    1,1G  2,0G  36% /mnt/ramdisk

Почему с файлом 1,1G в ОЗУ conky по-прежнему сообщает об использовании ОЗУ как 1,02Gib? Где хранится большой файл, если не в оперативной памяти?

2 ответа

Решение

Ниже приведена информация об использовании RAM-диска, например, сколько памяти выделено для конкретного виртуального диска. Его можно легко интегрировать в conkyrc:

mkdir -pv /mnt/ramdisk/.ramdisk

DF_RESULTS_FILE=/mnt/ramdisk/.ramdisk/df_ramdisk_results.txt
df -h | grep -e /mnt/ramdisk > $DF_RESULTS_FILE 

DF_RESULTS_STRING=$(cat $DF_RESULTS_FILE)
DF_RESULTS_details=($DF_RESULTS_STRING)

printf "RAM Disk Usage: %s /%s\n" ${DF_RESULTS_details[2]} ${DF_RESULTS_details[1]}

Следующее удовлетворяет все мои потребности, так как оно на самом деле сообщает о всех случаях tmpfs крепление:

#!/bin/bash
# rdu2.sh  -  ramdisk usage statusline statistics (version 2.2)

mkdir -pv /mnt/ramdisk/.ramdisk

# Change to /mnt/ramdisk for a specific drive
# or change it to something else or any other information
DF_MONITORED=tmpfs
DF_RESULTS_DIR=/mnt/ramdisk/.ramdisk
DF_RESULTS_FILE=$DF_RESULTS_DIR/rdu2.2_generic_results.txt

#the following lines are for people who haven't thought about doing "ps -A | grep rdu2"
#SCRIPT_PID=$(echo $$)
#printf "%d" $SCRIPT_PID > $DF_RESULTS_DIR/temp_script_pid.txt

printf "rdu2 executing to... [%s]\n" $DF_RESULTS_FILE 

printf "[%s]" $DF_RESULTS_FILE > $DF_RESULTS_FILE

while [ 1 ]
do
# Adding raw numbers and  translating to human-readable
# Display to screen and write to a file
    df | grep -e $DF_MONITORED > $DF_RESULTS_DIR/temp_df_tmpfs.tsv

    TOTAL_MEM_STRING=$(awk '{s+=$2} END {printf "%.0f", s}' $DF_RESULTS_DIR/temp_df_tmpfs.tsv  | awk 'function human(x) { s=" KiB MiB GiB TiB EiB PiB YiB ZiB"; while (x>=1024 && length(s)>1) { x/=1024; s=substr(s,5) }; s=substr(s,1,4); return sprintf( "%.2f%s", x, s) } { gsub(/^[0-9]+/, human($1)); print }')
    TOTAL_MEM_STRING_details=($TOTAL_MEM_STRING)
    USED_MEM_STRING=$(awk '{s+=$3} END {printf "%.0f", s}' $DF_RESULTS_DIR/temp_df_tmpfs.tsv  | awk 'function human(x) { s=" KiB MiB GiB TiB EiB PiB YiB ZiB"; while (x>=1024 && length(s)>1) { x/=1024; s=substr(s,5) }; s=substr(s,1,4); return sprintf( "%.2f%s", x, s) } { gsub(/^[0-9]+/, human($1)); print }')
    USED_MEM_STRING_details=($USED_MEM_STRING)

    printf "%8s%s%8s\r" "$USED_MEM_STRING" " /" "$TOTAL_MEM_STRING"
    printf "%8s%s%8s" "$USED_MEM_STRING" " /" "$TOTAL_MEM_STRING" > $DF_RESULTS_FILE

# Typical format for a conkyrc: 
# # ramdisk usage
# # NOTE: the ${tail logfile lines} is internal to conky; do not confuse with bash's tail command line program
# ${color grey}tpmfs Usage rdu2:$color ${tail /mnt/ramdisk/.ramdisk/rdu2.2_generic_results.txt 1}

    sleep 1.32s
done

Вызывается при загрузке и упоминается в conky, последний скрипт способствует созданию следующего текста:

tmpfs Usage (rdu2): 96.14 MiB /3,42 GiB

Значения обновляются "вживую" при копировании большого файла на виртуальный диск.

Наиболее вероятное объяснение состоит в том, что conky не считает эту память "использованной" памятью.

То, что "используется" и что такое "доступная" память, не является простым черно-белым в Linux или любой современной ОС. Например, системный кеш (включая кеш жесткого диска) "используется" в том смысле, что ему выделена память, но "свободен" в том смысле, что он занимает только доступную в противном случае оперативную память и, естественно, будет уменьшаться по мере уменьшения RAM становится доступным для него.

tmpfs - это виртуальная файловая система, которая во многих отношениях ведет себя как системный кеш, поскольку в ней есть файлы, отображаемые в ОЗУ, которые занимают память, которая в противном случае была бы "свободной", за исключением того, что они не являются дубликатами файлов, которые также существуют на постоянном диске. на основе хранения. С tmpfs, если перестает быть достаточно свободной оперативной памяти, чтобы хранить их в памяти, вместо этого они заменяют эти файлы на раздел подкачки.

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

Другие вопросы по тегам