“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!


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.


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"

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.


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.


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'


-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.  

-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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.