“Eco 3> / proc / sys / vm / drop_caches” - permissão negada como raiz

26

No momento, estou tendo alguns problemas com o cache. É um pouco demais agora, então eu queria esclarecer isso. Eu pesquisei e encontrei este pequeno comando: sync && echo 3 > /proc/sys/vm/drop_caches.
Estou logado como root no SSH (não usando o sudo). Estas são as tentativas que fiz:

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

É uma máquina remota executando o Debian. Até onde eu sei, existem alguns vCores nesta máquina e ela usa o Virtuozzo para a virtualização.
Eu realmente só quero limpar o cache (para que eu possa acessá-lo apenas usando SSH) .
Eu também tentei registrar isso como um cronjob. Mas simplesmente falha também!

BrainStone
fonte
11
Você está executando isso como root ou está usando sudo?
terdon
2
Estou executando isso como root. Mas o sudo também falha.
193 BrainStone #
Também não funciona. Já tentei. A mesma mensagem de erro.
193 BrainStone
Veja o slm's A nesta questão , pode ajudar.
Risto Salminen
Isso é extremamente improvável, mas você nunca sabe, /proc/sys/vm/drop_cachesrealmente existe?
terdon

Respostas:

27

Estou logado como root no SSH ... É uma máquina remota executando o Debian.

Na verdade, é uma máquina remota ou apenas um sistema remoto ? Se houver uma fatia do VPS em algum lugar, (pelo menos algumas formas de) virtualização do SO (por exemplo, openVZ) não permitirá isso dentro do contêiner. Você não opera a máquina, apenas executa sua fatia.

Cachinhos Dourados
fonte
2
Não é como nenhuma maneira ???
193 BrainStone
11
Provavelmente não, pois não faria muito sentido não permitir se houvesse métodos alternativos que funcionassem.
Goldilocks
2
@BrainStone - eu uso o OpenVZ, não é possível!
slm
36

sudo precisa cobrir todo o redirecionamento para que possa ser completamente executado pelo root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
fonte
5
isso realmente funcionou para mim (com a localização binário certo para eco)
ORM
O OpenVZ não funciona
shilovk 03/03
11
como alternativa, você poderia usar o tee:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid 23/12/2015
11
@ mchid, considere adicionar seu comentário como resposta. Também funcionou para mim na VM do Azure.
Erik Shilts
Já é raiz, veja # no início da linha. Vale a pena notar o problema com o sudo, mas para outra pergunta.
Alexei Martianov
13

Esse é um comportamento normal na virtualização no nível do SO. Isso só pode ser executado por alguém com acesso root ao nó do hardware.

Por exemplo , com o OpenVZ , você não obtém sua própria instância do kernel e, como tal, fica impedido de executar comandos como este.

Todos compartilham o mesmo cache de página; portanto, para eliminar caches apenas de sua instância, o kernel deve verificar se a página pertence a você e se as outras instâncias não estão usando essa página também.

Com outra técnica de virtualização como KVM ou Xen, isso pode estar funcionando.

caos
fonte
11
Para que eu deva / deva / precise entrar em contato com meu hoster para limpar o cache para mim? E como descubro em qual "técnica de virtualização" meu sistema está instalado?
precisa saber é o seguinte
Sim, você não pode contornar isso ...
caos
Não tenho certeza se isso está certo. Estou executando alguns vm em aws e Xen e sou capaz de drop_caches.
2
A diferença está entre a virtualização de SO (OpenVZ, LXC) e virtualização de plataforma (QEMU, Xen), ambas com vantagens e desvantagens em relação à outra.
Goldilocks
11
@bersch O Xen usa um próprio kernel para VMs. O OpenVZ não. Você pode pensar no OpenVZ como um "chroot" melhor.
Nils
8

Você pode usar o echocanalizado para sudo teepermitir a permissão adequada necessária quando precisar ecoar como root.

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

Use tee --helppara listar mais opções.

mchid
fonte
1

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

Este comando funciona para mim sem /usr/bin/echona resposta mchid. Estava dando erro sh: 1: /usr/bin/echo: not found. Tão usado apenas 'eco'

ascii_walker
fonte
-1

Eu tive o mesmo problema quando tentei usar o sudo assim:

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

Minha solução foi mudar temporariamente para o root. Obviamente, essa permissão deve ser ativada no seu sistema:

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

Usando uma configuração de VM parecida com o OpenStack e isso funciona (executando o Debian):

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