การตั้งค่า / proc / sys / vm / drop_caches เพื่อล้างแคช


79

ในฐานะที่เป็นส่วนหนึ่งของการทำแคชเวลาเย็นฉันกำลังพยายามเพิ่มแคชระบบปฏิบัติการ เอกสาร kernel (ดึงมกราคม 2019)พูดว่า:

drop_caches

Writing to this will cause the kernel to drop clean caches, as well as
reclaimable slab objects like dentries and inodes.  Once dropped, their
memory becomes free.

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
    echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
    echo 3 > /proc/sys/vm/drop_caches

This is a non-destructive operation and will not free any dirty objects.
To increase the number of objects freed by this operation, the user may run
`sync' prior to writing to /proc/sys/vm/drop_caches.  This will minimize the
number of dirty objects on the system and create more candidates to be
dropped.

This file is not a means to control the growth of the various kernel caches
(inodes, dentries, pagecache, etc...)  These objects are automatically
reclaimed by the kernel when memory is needed elsewhere on the system.

Use of this file can cause performance problems.  Since it discards cached
objects, it may cost a significant amount of I/O and CPU to recreate the
dropped objects, especially if they were under heavy use.  Because of this,
use outside of a testing or debugging environment is not recommended.

You may see informational messages in your kernel log when this file is
used:

    cat (1234): drop_caches: 3

These are informational only.  They do not mean that anything is wrong
with your system.  To disable them, echo 4 (bit 3) into drop_caches.

ฉันร่างเล็กน้อยเกี่ยวกับรายละเอียด วิ่ง

echo 3 > /proc/sys/vm/drop_caches

ปลดปล่อย pagecache, dentries และ inodes ตกลง.

ดังนั้นหากฉันต้องการให้ระบบเริ่มการแคชตามปกติอีกครั้งฉันต้องรีเซ็ตเป็น 0 ก่อนหรือไม่ ปัจจุบันระบบของฉันมีการตั้งค่าเป็น 0 ซึ่งฉันถือว่าเป็นค่าเริ่มต้น หรือจะรีเซ็ตด้วยตัวเอง? ฉันเห็นความเป็นไปได้อย่างน้อยสองอย่างที่นี่และฉันไม่แน่ใจว่าอันไหนเป็นจริง:

  1. echo 3 > /proc/sys/vm/drop_cachesปลดปล่อย pagecache, dentries และ inodes จากนั้นระบบจะเริ่มการแคชอีกครั้งทันที ฉันไม่แน่ใจว่าสิ่งที่ฉันคาดหวังว่ามูลค่าใน/proc/sys/vm/drop_cachesการทำถ้าเป็นกรณีนี้ กลับไปที่ 0 เกือบจะทันทีหรือไม่

  2. หาก/proc/sys/vm/drop_cachesตั้งค่าเป็น 3 ระบบจะไม่ทำการแคชหน่วยความจำจนกว่าจะถูกรีเซ็ตเป็น 0

กรณีใดเป็นความจริง


22
วิธีใช้กับ sudo:echo 3 | sudo tee /proc/sys/vm/drop_caches
Volker Siegel

วัวศักดิ์สิทธิ์! @VolkerSiegel ฉันได้ทำการขัดจังหวะ Interwebs หลายชั่วโมงและพบความคิดเห็นของคุณแบบสุ่ม พยายามและทำงานได้อย่างสมบูรณ์แบบ! ขอขอบคุณที่เพิ่มเคล็ดลับเล็กน้อยนี้ ฉันไม่ต้องการจี้คำถามนี้ แต่ถ้ามันไม่เหมาะสมฉันอยากจะขอคำอธิบาย เมื่อฉันใช้ sshpass กับฉันได้รับข้อผิดพลาด:sudo -i && echo 3 > /proc/sys/vm/drop_caches stdin: is not a ttyใช้วิธีการ "sudo" ของคุณทำงาน ทำไม?
harperville

2
@harperville ถามคำถาม; นี่เป็นปัญหาที่ไม่เกี่ยวข้องอย่างแน่นอน
Faheem Mitha

1
@arperville ใช่ - นั่นเป็นคำถามที่ดีมาก - ด้วยคำตอบที่น่าสนใจอย่าถามมันต่างหาก! จากนั้นแจ้งให้เราทราบที่นี่ หรือคุณต้องการให้ฉันถามคำถามตัวเองแล้วตอบคำถาม?
Volker Siegel

คำตอบ:


106

ไม่เหนียวเหนอะคุณเพียงแค่เขียนไปที่ไฟล์เพื่อให้มันลดแคชและจากนั้นมันก็จะเริ่มทำการแคชอีกครั้งทันที

โดยทั่วไปเมื่อคุณเขียนไปยังไฟล์นั้นคุณไม่ได้เปลี่ยนการตั้งค่าจริงๆคุณกำลังออกคำสั่งไปยังเคอร์เนล เคอร์เนลทำหน้าที่กับคำสั่งนั้น (โดยปล่อยแคช) จากนั้นจะดำเนินการเหมือนเดิม


2
โอเคขอบคุณ. ค่าเปลี่ยนกลับเป็น 0 ทันทีหรือไม่
Faheem Mitha

33
@FaheemMitha ไม่ค่าที่คุณสามารถอ่านได้คือสิ่งที่คุณใส่ครั้งสุดท้าย แต่ไม่ได้ใช้ทุกที่เฉพาะการกระทำการเขียนเท่านั้น fs/drop_caches.cรหัสที่มาอยู่ใน
Gilles

มีประโยชน์เฉพาะสำหรับ JVM โดยทำสิ่งนี้หรือไม่?
JE Carter II

3
ไม่มีประโยชน์สำหรับแอปพลิเคชันตรงกันข้ามไฟล์จะโหลดช้าลงเนื่องจากไม่มี inodes ที่แคช นอกจากนี้คุณยังมีหน่วยความจำไม่พอ: หากแอพต้องการหน่วยความจำมันจะนำมันออกมาจากแคชของระบบปฏิบัติการ ดูlinuxatemyram.com
dr0i

@TomH บน "เฉพาะการกระทำของการเขียนเรื่อง" นี่คือsyncคำสั่งหรือไม่
kaizenCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.