“Echo 3> / proc / sys / vm / drop_caches” - у дозволі відхилено як root


26

Наразі у мене є деякі проблеми з кешем. Зараз це занадто багато, тому я хотів це очистити. Я гугл і знайшов цю маленьку команду: 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. Наскільки я знаю, в цій машині є деякі vCores, і він використовує Virtuozzo для віртуалізації.
Я дуже просто хочу очистити кеш (тому я можу отримати доступ до нього лише за допомогою SSH) .
Я також спробував зареєструвати це як кронбук. Але це теж просто не вдається!


1
Ви запускаєте це як root або використовуєте sudo?
terdon

2
Я запускаю це як корінь. Але судо теж не вдається.
BrainStone

Не працює також. Вже спробував. Те саме повідомлення про помилку
BrainStone

Дивіться у цьому записі A на цьому , це може допомогти.
Рісто Салмінен

Це вкрай малоймовірно, але ти ніколи не знаєш, чи /proc/sys/vm/drop_cachesіснує насправді?
terdon

Відповіді:


27

Я увійшов як root через SSH ... Це віддалена машина, на якій працює Debian.

Це насправді віддалена машина чи просто віддалена система ? Якщо десь це фрагмент VPS , (принаймні деякі форми) віртуалізація ОС (наприклад, openVZ) не дозволить цього зсередини контейнера. Ви не запускаєте апарат, ви просто запускаєте фрагмент.


2
Немає ніякого способу ???
BrainStone

1
Можливо, ні, оскільки не було б сенсу не дозволяти цього, якби існували альтернативні методи.
золотинки

2
@BrainStone - я використовую OpenVZ, це неможливо!
slm

36

sudo має охоплювати ціле перенаправлення, щоб воно могло бути повністю виконане коренем:

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

5
це насправді спрацювало для мене (з правильним бінарним розташуванням для відлуння)
orm

у OpenVZ не працюють
шиловк

1
Ви також можете замість цього використати трійник:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid, розгляньте, як додати коментар як відповідь. Він також працював для мене на Azure VM.
Ерік Шильц

Це вже корінь, дивіться # на початку рядка. Випуск із судо варто відзначити, але для іншого питання.
Олексій Мартьянов

13

Це нормальна поведінка при віртуалізації на рівні ОС. Це може виконати лише хтось із кореневим доступом до апаратного вузла.

Наприклад, OpenVZ , ви не отримуєте власний екземпляр ядра і, як такий, обмежуєте виконувати такі команди.

Усі мають спільний кеш сторінок, тому, щоб скидати кеші лише вашого примірника, ядро ​​повинно перевірити, належить ли вам сторінка, і якщо інші екземпляри теж не використовують цю сторінку.

З іншою технікою віртуалізації, такою як KVM або Xen, це може працювати.


1
Тож я міг / повинен / повинен зв’язатися зі своїм хостером, щоб очистити кеш для мене? І як я дізнаюся, на якій «техніці віртуалізації» використовується моя система?
BrainStone

Так, ви можете не обійтись цим ...
хаос

Я не заперечую, чи правильно це. Я запускаю кілька VM в Aws і Xen, і я в змозі drop_caches.

2
Різниця полягає у віртуалізації ОС (OpenVZ, LXC) і віртуалізації платформи (QEMU, Xen), які мають переваги та недоліки порівняно з іншими.
золотинки

1
@bersch Xen використовує власне ядро ​​для VM. OpenVZ цього не робить. Ви можете думати про OpenVZ як кращий "chroot".
Нілс

8

Ви можете використовувати echopiped, щоб sudo teeдозволити належний дозвіл, необхідний, коли вам потрібно відлунювати як root.

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

Використовуйте tee --helpдля переліку додаткових варіантів.


1

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

Ця команда працює для мене без /usr/bin/echomchid відповіді. Це дало помилку sh: 1: /usr/bin/echo: not found. Тож використовується лише "відлуння"


-1

У мене була така ж проблема, коли я намагався використовувати судо так:

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

Використання усміхнених налаштувань VM з OpenStack, і це працює (працює під управлінням Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.