"Echo 3> / proc / sys / vm / drop_caches" - Berechtigung als root verweigert

26

Ich habe derzeit einige Probleme mit dem Cache. Im Moment ist es etwas zu viel, deshalb wollte ich es klären. Ich googeln und fand diesen kleinen Befehl: sync && echo 3 > /proc/sys/vm/drop_caches.
Ich bin über SSH als root angemeldet (ohne sudo). Dies sind die Versuche, die ich gemacht habe:

root@server: ~ # ll /proc/sys/vm/drop_caches
-rw-r--r-- 1 root root 0 15. Jan 20:21 /proc/sys/vm/drop_caches

root@server: ~ # echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # sudo su -c "echo 3 > /proc/sys/vm/drop_caches"
bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # echo 3 | sudo tee /proc/sys/vm/drop_caches
tee: /proc/sys/vm/drop_caches: Permission denied
3

Es ist eine entfernte Maschine, auf der Debian läuft. Soweit ich weiß, enthält dieser Computer einige vCores und verwendet Virtuozzo für die Virtualisierung.
Ich möchte wirklich nur den Cache leeren (also kann ich nur mit SSH darauf zugreifen) .
Ich habe auch versucht, dies als Cronjob zu registrieren. Aber es scheitert einfach auch!

BrainStone
quelle
1
Führen Sie dies als root aus oder verwenden Sie sudo?
Terdon
2
Ich betreibe dies als root. Aber auch sudo scheitert.
BrainStone
Geht auch nicht. Schon ausprobiert. Gleiche Fehlermeldung.
BrainStone
Siehe das A des Slms zu dieser Frage , es könnte helfen.
Risto Salminen
Dies ist äußerst unwahrscheinlich, aber Sie wissen nie, /proc/sys/vm/drop_cachesexistiert tatsächlich?
Terdon

Antworten:

27

Ich bin als root über SSH angemeldet ... Es ist eine entfernte Maschine, auf der Debian läuft.

Handelt es sich tatsächlich um eine Remote-Maschine oder nur um ein Remote- System ? Wenn dies irgendwo ein VPS- Slice ist , lassen dies (zumindest einige Formen von) Betriebssystemvirtualisierung (z. B. openVZ) nicht innerhalb des Containers zu. Sie lassen die Maschine nicht laufen, Sie lassen nur Ihre Scheibe laufen.

Goldlöckchen
quelle
2
Es gibt wie keinen Weg ???
BrainStone
1
Wahrscheinlich nicht, da es nicht sinnvoll wäre, es nicht zuzulassen, wenn es alternative Methoden gäbe, die funktionieren würden.
Goldlöckchen
2
@BrainStone - Ich benutze OpenVZ, es ist nicht möglich!
SLM
36

sudo muss die Umleitung vollständig abdecken, damit sie vollständig von root ausgeführt werden kann:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
quelle
5
Das funktionierte tatsächlich für mich (mit der richtigen binären Position für Echo)
oder
in OpenVZ funktioniert nicht
shilovk
1
Alternativ können Sie stattdessen tee verwenden:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid
1
@mchid, füge deinen Kommentar als Antwort hinzu. Es hat auch bei Azure VM funktioniert.
Erik Shilts
Es ist bereits root, siehe # am Anfang der Zeile. Das Problem mit sudo ist bemerkenswert, aber für eine andere Frage.
Alexei Martianov
13

Dies ist ein normales Verhalten bei der Virtualisierung auf Betriebssystemebene. Dies kann nur von jemandem ausgeführt werden, der über Root-Zugriff auf den Hardware-Knoten verfügt.

Mit OpenVZ erhalten Sie beispielsweise keine eigene Kernel-Instanz und können daher keine Befehle wie diesen ausführen.

Alle verwenden den gleichen Seiten-Cache. Um also nur die Caches Ihrer Instanz zu löschen, muss der Kernel prüfen, ob die Seite Ihnen gehört und ob die anderen Instanzen diese Seite auch nicht verwenden.

Mit einer anderen Virtualisierungstechnik wie KVM oder Xen könnte dies funktionieren.

Chaos
quelle
1
Also könnte / sollte / muss ich meinen Hoster kontaktieren, um den Cache für mich zu leeren? Und wie finde ich heraus, auf welcher "Virtualisierungstechnik" sich mein System befindet?
BrainStone
Ja, Sie können dies nicht umgehen ...
Chaos
Ich bin mir nicht sicher, ob das stimmt. Ich lasse einige vm bei aws und Xen laufen und ich bin in der Lage, Caches fallen zu lassen.
2
Der Unterschied besteht zwischen der Betriebssystemvirtualisierung (OpenVZ, LXC) und der Plattformvirtualisierung (QEMU, Xen), die beide Vor- und Nachteile haben.
Goldlöckchen
1
@bersch Xen verwendet einen eigenen Kernel für VMs. OpenVZ nicht. Sie können sich OpenVZ wie eine bessere "Chroot" vorstellen.
Nils
8

Sie können echopiped verwenden, sudo teeum die richtige Berechtigung zuzulassen, die erforderlich ist, wenn Sie als Root Echo benötigen.

echo 3 | sudo tee /proc/sys/vm/drop_caches

Verwenden Sie, tee --helpum weitere Optionen aufzulisten.

mchid
quelle
0

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

Dieser Befehl funktioniert bei mir ohne /usr/bin/echoin mchid zu antworten. Es gab Fehler sh: 1: /usr/bin/echo: not found. Also nur "Echo" verwendet

ascii_walker
quelle
-1

Ich hatte das gleiche Problem, als ich versuchte, sudo wie folgt zu verwenden:

sudo echo 1 > /proc/sys/vm/overcommit_memory

Meine Lösung bestand darin, vorübergehend auf root zu wechseln. Offensichtlich muss diese Berechtigung auf Ihrem System aktiviert sein:

sudo su -  #temporarily switch to root user
echo 1 > /proc/sys/vm/overcommit_memory
exit # Exit as root.  
thebiggestlebowski
quelle
-2

Verwenden Sie mit OpenStack eine ähnliche VM-Einstellung und das funktioniert (unter Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Secko
quelle