“Echo 3> / proc / sys / vm / drop_caches” - Izin ditolak sebagai root

26

Saat ini saya mengalami beberapa masalah dengan cache. Agak terlalu banyak sekarang, jadi saya ingin membersihkannya. I googled dan menemukan perintah kecil ini: sync && echo 3 > /proc/sys/vm/drop_caches.
Saya masuk sebagai root melalui SSH (tidak menggunakan sudo). Ini adalah upaya yang saya lakukan:

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

Ini adalah mesin jarak jauh yang menjalankan Debian. Sejauh yang saya tahu ada beberapa vCores di mesin ini dan menggunakan Virtuozzo untuk virtualisasi.
Saya benar-benar hanya ingin menghapus cache (Jadi saya hanya dapat mengaksesnya menggunakan SSH) .
Saya juga mencoba mendaftarkan ini sebagai cronjob. Tapi itu gagal juga!

BrainStone
sumber
1
Apakah Anda menjalankan ini sebagai root atau Anda menggunakan sudo?
terdon
2
Saya menjalankan ini sebagai root. Tapi sudo juga gagal.
BrainStone
Juga tidak berfungsi. Sudah mencobanya. Pesan kesalahan yang sama.
BrainStone
Lihat A slm pada pertanyaan ini , mungkin membantu.
Risto Salminen
Ini sangat tidak mungkin, tetapi Anda tidak pernah tahu, apakah /proc/sys/vm/drop_cachesbenar - benar ada?
terdon

Jawaban:

27

Saya login sebagai root di SSH ... Ini adalah mesin remote yang menjalankan Debian.

Apakah ini sebenarnya mesin jarak jauh, atau hanya sistem jarak jauh ? Jika ini adalah potongan VPS di suatu tempat, (setidaknya beberapa bentuk) virtualisasi OS (mis. OpenVZ) tidak akan mengizinkan ini dari dalam wadah. Anda tidak menjalankan mesin, Anda hanya menjalankan slice Anda.

goldilocks
sumber
2
Tidak mungkin ada ???
BrainStone
1
Mungkin tidak, karena tidak akan ada gunanya tidak mengizinkannya jika ada metode alternatif yang berfungsi.
goldilocks
2
@BrainStone - Saya menggunakan OpenVZ, itu tidak mungkin!
slm
36

sudo harus mencakup seluruh pengalihan sehingga dapat sepenuhnya dieksekusi oleh root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
sumber
5
ini benar-benar bekerja untuk saya (dengan lokasi biner yang tepat untuk gema)
orm
di OpenVZ tidak bekerja
shilovk
1
sebagai alternatif, Anda dapat menggunakan tee sebagai gantinya:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid
1
@mchid, pertimbangkan untuk menambahkan komentar Anda sebagai jawaban. Ini juga bekerja untuk saya di Azure VM.
Erik Shilts
Sudah root, lihat # di awal baris. Masalah dengan sudo patut dicatat, tetapi untuk pertanyaan lain.
Alexei Martianov
13

Ini adalah perilaku normal di bawah virtualisasi tingkat OS. Ini hanya dapat dijalankan oleh seseorang dengan akses root ke simpul perangkat keras.

Misalnya dengan OpenVZ , Anda tidak mendapatkan instance kernel Anda sendiri dan karena itu, dilarang melakukan perintah seperti ini.

Semua berbagi cache halaman yang sama, jadi untuk menjatuhkan cache hanya instance Anda, kernel harus memeriksa apakah halaman itu milik Anda dan jika instans lain tidak menggunakan halaman ini juga.

Dengan teknik virtualisasi lain seperti KVM atau Xen ini mungkin berfungsi.

kekacauan
sumber
1
Jadi saya bisa / harus / harus menghubungi hoster saya untuk menghapus cache untuk saya? Dan bagaimana cara mengetahui "teknik virtualisasi" apa yang digunakan sistem saya?
BrainStone
Ya, Anda mungkin tidak menemukan ini ...
kekacauan
Saya tidak yakin jika ini benar. Saya menjalankan beberapa vm di aws dan Xen dan saya bisa drop_caches.
2
Perbedaannya adalah antara virtualisasi OS (OpenVZ, LXC) dan virtualisasi platform (QEMU, Xen), yang keduanya memiliki kelebihan dan kekurangan dibandingkan yang lain.
goldilocks
1
@bersch Xen menggunakan kernel sendiri untuk VM. OpenVZ tidak. Anda dapat menganggap OpenVZ seperti "chroot" yang lebih baik.
Nils
8

Anda dapat menggunakan echopiped untuk sudo teemengizinkan izin yang diperlukan saat Anda perlu menggema sebagai root.

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

Gunakan tee --helpuntuk membuat daftar opsi lainnya.

mchid
sumber
1

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

Perintah ini bekerja untuk saya tanpa /usr/bin/echojawaban mchid. Itu memberi kesalahan sh: 1: /usr/bin/echo: not found. Jadi hanya digunakan 'gema'

ascii_walker
sumber
-1

Saya memiliki masalah yang sama ketika saya mencoba menggunakan sudo seperti ini:

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

Solusi saya adalah untuk sementara beralih ke root. Dengan sungguh-sungguh, izin itu harus diaktifkan di sistem Anda:

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

Menggunakan pengaturan VM smilar dengan OpenStack dan ini berfungsi (menjalankan Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Secko
sumber