
Ich habe einen Streitpunkt auf meinem Linux-Server. Einer von mehreren Prozessen greift auf eine einzelne Datei zu und sperrt die Datei zu einem zufälligen Zeitpunkt für einen längeren Zeitraum (> 60 Sekunden), was wiederum dazu führt, dass andere Dinge fehlschlagen.
Gibt es eine Möglichkeit, zu erkennenWie langeine Datei wurde gesperrt und durch welchen Vorgang?
Antwort1
Ich denke, was Sie suchen, ist die Datei /proc/locks
. Es zeigt die aktuellen Dateisperren im System. Dies zeigt nichtwie lange eine Datei gesperrt ist, aber es zeigtdurch welchen Prozess. Vielleicht könnte man in dieser Datei erkennen, wann die Sperre registriert ist und die verstrichene Zeit messen. Ein Beispiel ist dieses:
cat /proc/locks
1: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741824 1073741824
2: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741826 1073742335
3: POSIX ADVISORY WRITE 3058 08:06:10752740 0 0
4: POSIX ADVISORY WRITE 3058 08:06:10752739 0 0
5: POSIX ADVISORY WRITE 2421 08:06:10752766 0 EOF
6: POSIX ADVISORY WRITE 2421 08:06:11142048 0 EOF
7: POSIX ADVISORY WRITE 2421 08:06:9964366 1073741824 1073742335
8: POSIX ADVISORY WRITE 2421 08:06:11142040 0 EOF
Wo sich die Spalten befinden:
- Erste: sperren #.
- Zweite: Sperrtyp (POSIX, wenn die Sperre mit erstellt wurde
fcntl
undFLOCK
wenn mit erstellt wurdeflock
). - Dritte: Sperrmodus (EMPFEHLEND oder OBLIGATORISCH)
- Viertens: Sperrtyp (SCHREIBEN oder LESEN), entsprechend gemeinsam genutzten oder exklusiven Sperren.
- Fünfte: PID des Prozesses mit der Sperre.
- Sechste: Drei durch 1 getrennte Zahlen
:
, die die gesperrte Datei identifizieren. - Siebte: Startbyte der Sperre.
- Achte:Endbyte der Sperre
Antwort2
Sie können das Alter einer Sperrdatei einfach anhand des Zeitstempels ihrer Erstellung ermitteln. Ähnlich verhält es sich, wenn Sie „cat logfile.name“ eingeben. Der einzige Inhalt dieser Datei ist häufig die Prozess-ID, die die Datei erstellt hat.