GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, die zwischengespeicherten Dateien aufzulisten?

Lösung 1:

Nun, es gibt eine einfache Möglichkeit, einen Blick in den Seiten-Cache des Kernels zu werfen, wenn Sie zufällig ftools haben - "fincore" gibt Ihnen einige zusammenfassende Informationen darüber, welche Seiten der Dateien der Inhalt des Caches sind.

Sie müssen eine Liste mit Dateinamen angeben, um zu überprüfen, ob sie im Seitencache vorhanden sind. Dies liegt daran, dass die in den Page-Cache-Tabellen des Kernels gespeicherten Informationen nur Datenblockreferenzen und keine Dateinamen enthalten. fincore würde die Datenblöcke einer bestimmten Datei durch Inode-Daten auflösen und nach entsprechenden Einträgen in den Seiten-Cache-Tabellen suchen.

Es gibt keinen effizienten Suchmechanismus, um das Gegenteil zu tun - um einen Dateinamen zu erhalten, der zu einem Datenblock gehört, müssten alle Inodes und indirekten Blöcke im Dateisystem gelesen werden. Wenn Sie über die im Seitencache gespeicherten Blöcke jeder einzelnen Datei Bescheid wissen müssen, müssten Sie fincore eine Liste aller Dateien in Ihrem Dateisystem/Ihren Dateisystemen bereitstellen . Aber das wird die Messung wahrscheinlich wieder verderben, da eine große Datenmenge gelesen werden würde, die die Verzeichnisse durchquert und alle Inodes und indirekten Blöcke erhält – sie in den Seiten-Cache legt und genau die Seiten-Cache-Daten entfernt, die Sie zu untersuchen versuchten.

Lösung 2:

Sie können das Dienstprogramm vmtouch verwenden, um zu sehen, ob sich eine benannte Datei oder ein Verzeichnis im Cache befindet. Sie können das Tool auch verwenden, um Elemente in den Cache zu zwingen oder sie im Cache zu sperren.

[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[     ] 0/5

           Files: 1
     Directories: 0
  Resident Pages: 0/5  0/20K  0%
         Elapsed: 0.000215 seconds

Jetzt kann ich es in den Cache "berühren".

[[email protected] ~]# vmtouch -vt /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
   Touched Pages: 5 (20K)
         Elapsed: 0.005313 seconds

Sehen Sie jetzt, wie viel zwischengespeichert wird...

[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
  Resident Pages: 5/5  20K/20K  100%
         Elapsed: 0.000241 seconds

Lösung 3:

Ich schreibe ein sehr einfaches Shell-Skript, um die zwischengespeicherten Dateien mithilfe von linux-fincore anzuzeigen. Da der Cache ein Teil des Speichers ist, findet mein Code die 10 wichtigsten RSZ-Verwendungen des Prozesses und die Verwendung von lsof, um die Dateien herauszufinden, die verarbeitet werden geöffnet, verwenden Sie schließlich linux-fincore, um herauszufinden, ob diese Dateien zwischengespeichert sind oder nicht.

Bitte korrigieren Sie mich, wenn ich falsch denke.

#!/bin/bash
#Author: Shanker
#Time: 2016/06/08

#set -e
#set -u
#you have to install linux-fincore
if [ ! -f /usr/local/bin/linux-fincore ]
then
    echo "You haven't installed linux-fincore yet"
    exit
fi

#find the top 10 processs' cache file
ps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids
#find all the processs' cache file
#ps -e -o pid>/tmp/cache.pids

if [ -f /tmp/cache.files ]
then
    echo "the cache.files is exist, removing now "
    rm -f /tmp/cache.files
fi

while read line
do
    lsof -p $line 2>/dev/null|awk '{print $9}' >>/tmp/cache.files 
done</tmp/cache.pids


if [ -f /tmp/cache.fincore ]
then
    echo "the cache.fincore is exist, removing now"

    rm -f /tmp/cache.fincore
fi

for i in `cat /tmp/cache.files`
do

    if [ -f $i ]
    then

        echo $i >>/tmp/cache.fincore
    fi
done

linux-fincore -s  `cat /tmp/cache.fincore`

rm -f /tmp/cache.{pids,files,fincore}

Lösung 4:

Sie können auch pcstat (Page Cache Stat)https://github.com/tobert/pcstat

verwenden

Hoffe es hilft jemandem.

Lösung 5:

Ich habe das folgende Skript geschrieben, das alle Dateien und ihren Cache-Status mit dem Befehl pcstat druckt. Es ist ein eigenständiges Skript für x86_64-Linux-Systeme. Es lädt bei Bedarf pcstat herunter .

Das erste Argument ist der Speicherort des Dateisystems, das analysiert werden soll, und das zweite Argument ist die Anzahl der Ergebnisse (Top N nach Anzahl der Seiten im Cache).

#!/bin/bash
#Exit if a variable is not set
set -o nounset
#Exit on first error
set -o errexit

if [ $# -eq 0 ]; then
echo "Usage: $0 <root-dir> [number-of-results]"
echo
echo "Example $0 /var 10"
echo "will show top 10 files in /var which are loaded in cache"
exit
fi

ROOT=$1
#Number of results to show
HOW_MANY=50
[ -n ${2-} ] && HOW_MANY=$2


SCRIPT_DIR="$( cd -P "$( dirname "$0" )" && pwd )"
if [ ! -x $SCRIPT_DIR/pcstat ]; then
(
cd $SCRIPT_DIR
rm -f pcstat
curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64
chmod +x pcstat
)
fi

FIND="find ${ROOT} -not ( -path /proc -prune ) -not ( -path /sys -prune ) -type f -size +0c -print0"
$FIND |  xargs -0 ${SCRIPT_DIR}/pcstat -terse -nohdr | sort --field-separator=, -r -n -k 6 | head -n ${HOW_MANY}

Linux
  1. [Linux]:So kopieren Sie Dateien/Verzeichnisse, ohne die bereits kopierten Dateien zu überschreiben!

  2. Linux – Wie leert man die Puffer und den Cache auf einem Linux-System?

  3. Werkzeug, um die Zeilen in einer Datei zu erhalten, die nicht in einer anderen sind?

  4. Die Dateien auflisten, auf die ein Programm zugreift?

  5. 7zip, Xz, Gzip, Tar usw. — Was sind die Unterschiede?

So bearbeiten Sie PDF-Dateien unter Linux auf die einfachste Art und Weise

6 Linux-Distributionen, die vom Look and Feel von macOS

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

nm :Befehl zum Auflisten der Symbole in Objektdateien.

Entfernen Sie Dateien, die in einer Textdatei aufgeführt sind

Suchen von Dateien, die den meisten Speicherplatz beanspruchen