我正在docker容器(swarm(中使用Impala/HDFS进行一些查询测试。为了比较查询(不同的比例因子(,我想删除缓存。通常这很容易通过
$ sync
$ echo 1 > /proc/sys/vm/drop_caches
但我在主机系统上没有管理员权限。有没有另一种方法可以从容器内部删除缓存?是否可以选择创建另一个大表并在此表上执行查询,以便其数据覆盖缓存?
你不能从conatiner内部执行此操作。容器中的根用户与实际根用户位于不同的命名空间中,只有后者有权访问/proc。
您可以尝试将主机 proc 文件系统中的卷装载到容器中。这似乎对我有用:
$ docker run -ti --rm -v /proc/sys/vm/drop_caches:/drop_caches alpine
/ # free
total used free shared buffers cached
Mem: 2046644 808236 1238408 688 2248 118244
-/+ buffers/cache: 687744 1358900
Swap: 1048572 31448 1017124
/ # dd if=/dev/zero of=/dummy count=500 bs=1M
500+0 records in
500+0 records out
/ # free
total used free shared buffers cached
Mem: 2046644 1333892 712752 688 2268 630268
-/+ buffers/cache: 701356 1345288
Swap: 1048572 31448 1017124
/ # echo 3 > drop_caches
/ # free
total used free shared buffers cached
Mem: 2046644 790136 1256508 688 764 101552
-/+ buffers/cache: 687820 1358824
Swap: 1048572 31448 1017124
/ #
。但这是假设您控制容器的启动方式,这或多或少意味着您是管理员。
> 可以通过使用--privileged
标志在特权模式下启动容器来实现。