Используйте команду docker container prune
, она удалит все остановленные контейнеры. Вы можете прочитать больше об этой команде в официальных документах здесь: https://docs.docker.com/engine/reference/commandline/container_prune/ .
Аналогично, в Docker есть команды для docker network prune
, docker image prune
и docker volume prune
для обрезки сетей, изображений и томов.
Я использую docker system prune
большую часть времени, он очищает неиспользуемые контейнеры, а также сети и висящие изображения.
Если я хочу очистить тома с помощью системных компонентов, я использую docker system prune --volumes
. В этом случае также будут удалены неиспользуемые тома, поэтому будьте осторожны, вы можете потерять данные.
Ха, у меня есть ответ:
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
int fd;
fd = open(argv[1], O_RDONLY);
fdatasync(fd);
posix_fadvise(fd, 0,0,POSIX_FADV_DONTNEED);
close(fd);
return 0;
}
Если можно поместить данные тестирования в отдельную файловую систему, затем монтирующую, что файловая система заново для теста даст Вам пустые кэши.
При списке теста fileystem в/etc/fstab с "пользовательской" опцией затем, можно смонтировать его для теста, не будучи суперпользователем
Относительно использования O_DIRECT: это встревожило бы результаты в другом отношении. Ядро будет делать попытку к DMA данных файловой системы непосредственно в Ваше чтение () буфер, таким образом, это сможет быть вручено до Вашего приложения без любой дополнительной сделанной копии. Без O_DIRECT ядро DMAs данные файла в кэш страницы и копии это от кэша страницы до Вашего чтения () буфер.
Это прекрасно, если Ваше приложение действительно собирается использовать O_DIRECT в производстве. Если Вы выполните тесты производительности с O_DIRECT и затем удалите O_DIRECT для производства, то Ваш тест производительности будет нереалистичен.
Как суперпользователь можно сделать следующее:
Освободить pagecache:
Освободить dentries и inodes:
Освободить pagecache, dentries и inodes:
Эта операция не "потеряет" данных (кэши выписаны к диску, прежде чем их данные будут отброшены), однако, чтобы действительно удостовериться, что весь кэш убран, необходимо синхронизировать сначала. Например, все кэши должны быть очищены, если Вы работаете
sync; echo 3 > /proc/sys/vm/drop_caches
Как я сказал, только суперпользователь (корень) может сделать так.
Существует утилита командной строки, разработанная Эриком Вонгом, которая упрощает вызов posix_fadvise:
http://git.bogomips.org/cgit/pcu.git/tree/README
Это так же просто, как
$ pcu-fadvise -a dontneed filename-to-evict