Мой файл 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? Где хранится большой файл, если не в оперативной памяти?
Следующее обеспечивает информацию об использовании псевдодиска на быстрый взгляд, т.е. сколько памяти посвящает себя определенному электронному диску. Это может легко быть интегрировано в 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]}
Следующее выполняет все мои потребности, как оно сообщает на самом деле относительно всех экземпляров a 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
Зашедший начальная загрузка и ссылаемый в носатом, последний сценарий способствует созданию следующего текста:
tmpfs Usage (rdu2): 96.14 MiB /3,42 GiB
Значения обновляют 'живой' при копировании большого файла в электронный диск.
Наиболее вероятное объяснение является просто настолько носатым, не считает ту память как "используемую" память.
то, Что "используется" и что является "доступной" памятью, не является простым черным цветом и белым цветом в Linux или любой современной ОС. Например, системный кэш (включая кэш жесткого диска) "используется" в том смысле, что память выделяется ему, но "свободна" в том смысле, что это только поднимает в других отношениях доступную RAM и естественно уменьшится, поскольку меньше RAM становится доступным ему.
tmpfs является виртуальной файловой системой, которая ведет себя немного как системный кэш во многих отношениях, в котором ему отобразили файлы в RAM, поднимающей память, которая иначе была бы "свободна", кроме они не дубликаты файлов, которые также существуют на постоянной дисковой системе хранения. С tmpfs, если прекращает быть достаточно свободной RAM для хранения их в памяти, она выгрузит те файлы к разделу подкачки вместо этого.
Таким образом по той же причине имеет смысл иногда думать о кэш-памяти как свободной, в некотором отношении также имеет смысл думать о tmpfs памяти как свободной, потому что та память все еще доступна для использования другими приложениями.