"Echo 3> / proc / sys / vm / drop_caches" - Permiso denegado como root

26

Actualmente tengo algunos problemas con el caché. Es un poco demasiado ahora, así que quería aclararlo. Busqué en Google y encontré este pequeño comando: sync && echo 3 > /proc/sys/vm/drop_caches.
Estoy conectado como root sobre SSH (sin usar sudo). Estos son los intentos que hice:

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 una máquina remota que ejecuta Debian. Hasta donde sé, hay algunos vCores en esta máquina y utiliza Virtuozzo para la virtualización.
Realmente solo quiero borrar el caché (por lo que solo puedo acceder a él usando SSH) .
También intenté registrar esto como un cronjob. ¡Pero simplemente falla también!

BrainStone
fuente
1
¿Estás ejecutando esto como root o lo estás usando sudo?
terdon
2
Estoy ejecutando esto como root. Pero el sudo también falla.
BrainStone
Tampoco funciona. Ya lo probé. Mismo mensaje de error.
BrainStone
Vea la A de slm sobre esta pregunta , podría ayudar.
Risto Salminen
Esto es extremadamente improbable, pero nunca se sabe, ¿ /proc/sys/vm/drop_cachesexiste realmente?
terdon

Respuestas:

27

Estoy conectado como root sobre SSH ... Es una máquina remota que ejecuta Debian.

¿Es realmente una máquina remota o simplemente un sistema remoto ? Si se trata de un segmento VPS en alguna parte, (al menos algunas formas de) la virtualización del sistema operativo (por ejemplo, openVZ) no permitirá esto desde el contenedor. No ejecutas la máquina, solo ejecutas tu rebanada.

encerrada dorada
fuente
2
¿No hay manera de que no ?
BrainStone
1
Probablemente no, ya que no tendría mucho sentido no permitirlo si hubiera métodos alternativos que funcionaran.
Ricitos
2
@BrainStone: uso OpenVZ, ¡no es posible!
slm
36

sudo tiene que cubrir toda la redirección para que pueda ser ejecutada completamente por root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
fuente
55
esto realmente funcionó para mí (con la ubicación binaria correcta para echo)
orm
en OpenVZ no funciona
shilovk
1
alternativamente, podría usar tee en su lugar:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid
1
@mchid, considera agregar tu comentario como respuesta. También funcionó para mí en Azure VM.
Erik Shilts
Ya es root, vea # al comienzo de la línea. Vale la pena señalar un problema con sudo, pero para otra pregunta.
Alexei Martianov
13

Este es un comportamiento normal en la virtualización a nivel del sistema operativo. Esto solo puede ser ejecutado por alguien con acceso raíz al nodo de hardware.

Con, por ejemplo , OpenVZ , no obtienes tu propia instancia de kernel y, como tal, no puedes ejecutar comandos como este.

Todos comparten el mismo caché de página, por lo que para eliminar los cachés de solo su instancia, el kernel debe verificar si la página le pertenece y si las otras instancias no están usando esta página también.

Con otra técnica de virtualización como KVM o Xen, esto podría estar funcionando.

caos
fuente
1
Entonces, ¿podría / debería / debo contactar a mi proveedor de alojamiento para limpiar el caché por mí? ¿Y cómo averiguo en qué "técnica de virtualización" se encuentra mi sistema?
BrainStone
Sí, puede que no vengas por esto ...
caos
No estoy seguro si esto es correcto. Estoy ejecutando algunos vm en aws y Xen y puedo soltar_cachés.
2
La diferencia es entre la virtualización del sistema operativo (OpenVZ, LXC) y la virtualización de la plataforma (QEMU, Xen), las cuales tienen ventajas y desventajas frente a la otra.
GOLDILOCKS
1
@bersch Xen usa un núcleo propio para máquinas virtuales. OpenVZ no lo hace. Puedes pensar en OpenVZ como un mejor "chroot".
Nils
8

Puede usar echocanalizado para sudo teepermitir el permiso adecuado necesario cuando necesita hacer eco como root.

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

Use tee --helppara enumerar más opciones.

mchid
fuente
1

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

Este comando funciona para mí sin /usr/bin/echorespuesta mchid. Estaba dando error sh: 1: /usr/bin/echo: not found. Tan usado solo 'echo'

ascii_walker
fuente
-1

Tuve el mismo problema cuando intenté usar sudo así:

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

Mi solución fue cambiar temporalmente a root. Obviamente, ese permiso tiene que estar habilitado en su sistema:

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

Usando una configuración de VM similar con OpenStack y esto funciona (ejecutando Debian):

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