“ echo 3> / proc / sys / vm / drop_caches”-拒绝权限为root


26

我目前在缓存方面遇到一些问题。现在太多了,所以我想清除它。我用Google搜索,发现了这个小命令:sync && echo 3 > /proc/sys/vm/drop_caches
我以root用户身份通过​​SSH登录(不使用sudo)。这些是我所做的尝试:

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

它是运行Debian的远程计算机。据我所知,该计算机中有一些vCore,它使用Virtuozzo进行虚拟化。
我真的只想清除缓存(因此我只能使用SSH访问它)
我也尝试将其注册为cronjob。但这也失败了!


1
您是以root用户身份运行还是使用sudo
terdon

2
我以root身份运行。但是sudo也失败了。
BrainStone 2014年

也不起作用。已经尝试过了。同样的错误信息。
BrainStone 2014年

有关此问题,请参阅SLM的A ,可能会有帮助。
Risto Salminen 2014年

这是极不可能的,但您永远不知道,它/proc/sys/vm/drop_caches确实存在吗?
terdon

Answers:


27

我通过SSH以root身份登录...这是运行Debian的远程计算机。

它实际上是一台远程计算机还是一个远程系统?如果这是某个地方的VPS分,则(至少某些形式的)操作系统虚拟化(例如openVZ)将不允许从容器内部进行。您不需要运行机器,而只需运行切片。


2
好像没有办法 ???
BrainStone 2014年

1
可能不是,因为如果有其他可行的方法,那么不允许这样做是没有意义的。
goldilocks 2014年

2
@BrainStone-我使用的是OpenVZ,这是不可能的!
slm

36

sudo 必须涵盖整个重定向,以便可以由root完全执行:

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

5
这实际上对我
有用

在OpenVZ中不起作用
shilovk 2015年

1
或者,您可以改用tee:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid 2015年

1
@mchid,请考虑添加您的评论作为答案。它还在Azure VM上为我工作。
艾里克·希尔茨

它已经是根了,请参阅行首的#号。sudo的问题值得注意,但这是另一个问题。
Alexei Martianov '18

13

这是操作系统级虚拟化下的正常行为。这只能由对硬件节点具有root访问权限的人执行。

例如,使用OpenVZ时,您没有自己的内核实例,因此只能执行此类命令。

它们都共享同一个页面缓存,因此要删除仅您实例的缓存,内核必须检查该页面是否属于您,以及其他实例是否也没有使用该页面。

使用KVMXen之类的另一种虚拟化技术可能会起作用。


1
因此,我可以/应该/必须与托管人联系以为我清除缓存吗?以及如何找出我的系统正在使用的“虚拟化技术”?
BrainStone 2014年

是的,您可能不会遇到这种情况...
混乱

如果这是正确的,我不知道。我在aws和Xen上运行了一些虚拟机,并且能够drop_caches。

2
操作系统虚拟化(OpenVZ,LXC)和平台虚拟化(QEMU,Xen)之间的区别在于,两者相比都有优势和劣势。
goldilocks 2014年

1
@bersch Xen对VM使用自己的内核。OpenVZ没有。您可以将OpenVZ视为一个更好的“ chroot”。
Nils 2014年

8

当您需要以root身份回显时,可以使用echo管道传输来sudo tee允许所需的适当权限。

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

使用tee --help查看更多选项。


0

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

该命令为我工作,而无需/usr/bin/echo回答。它给了错误sh: 1: /usr/bin/echo: not found。因此仅使用“回声”


-1

当我尝试使用sudo时,我遇到了同样的问题:

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

我的解决方案是暂时切换到root。令人讨厌的是,必须在您的系统上启用该权限:

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

-2

在OpenStack中使用类似的VM设置,并且可以正常运行(运行Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.