Làm thế nào để bạn làm trống bộ đệm và bộ đệm trên hệ thống Linux?


315

Trước khi thực hiện một số công việc đo điểm chuẩn, làm thế nào để giải phóng bộ nhớ (RAM) mà Hạt nhân Linux đang tiêu thụ cho bộ đệm và bộ đệm của nó?


Lưu ý rằng điều này chủ yếu là hữu ích cho điểm chuẩn. Làm trống bộ đệm và bộ đệm làm giảm hiệu suất! Nếu bạn ở đây vì bạn nghĩ rằng giải phóng bộ đệm và bộ đệm là một điều tích cực, hãy đến và đọc Linux ăn RAM của tôi! . Truyện ngắn: bộ nhớ trống là bộ nhớ không sử dụng là bộ nhớ lãng phí .


1
Sự quan tâm trong câu hỏi mở và tự trả lời là gì? unix.stackexchange.com/questions/58553/... & unix.stackexchange.com/questions/17936/...
ngây thơ thế giới

1
@ thế giới vô tội - không bao giờ nhìn thấy những thứ này khi tôi đang tìm kiếm, vì vậy nó dường như là một lỗ hổng trong cơ sở kiến ​​thức trên trang web này và đã cố gắng điền vào.
slm

2
@ thế giới ngây thơ - khi nhìn vào 2 Q đó tôi nghĩ vẫn còn chỗ cho câu hỏi và trả lời này. Điều này hoạt động như một câu hỏi và trả lời kinh điển trên trang web. Đó là những gì khá cụ thể trong những gì họ đang giải quyết. Ngoài ra, phần này còn hiển thị thông tin về phân tích bộ đệm & bộ đệm và cả cách đặt tham số bằng sudo. Cả 2 câu hỏi còn lại đều không đề cập đến vấn đề này.
slm

Vui lòng đọc bài viết này linuxHRyram.com Nếu bạn hiểu rủi ro thì bạn có thể thực hiện miễn phí && sync && echo 3> / Proc / sys / vm / drop_caches && free

Câu trả lời:


491

Làm trống bộ đệm

Nếu bạn muốn làm trống nó, bạn có thể sử dụng chuỗi lệnh này.

# free && sync && echo 3 > /proc/sys/vm/drop_caches && free

             total       used       free     shared    buffers     cached
Mem:       1018916     980832      38084          0      46924     355764
-/+ buffers/cache:     578144     440772
Swap:      2064376        128    2064248
             total       used       free     shared    buffers     cached
Mem:       1018916     685008     333908          0        224     108252
-/+ buffers/cache:     576532     442384
Swap:      2064376        128    2064248

Bạn có thể báo hiệu Hạt nhân Linux bỏ các khía cạnh khác nhau của các mục được lưu trong bộ nhớ cache bằng cách thay đổi đối số số thành lệnh trên.

  • Để miễn phí pagecache:

    # echo 1 > /proc/sys/vm/drop_caches
    
  • Để miễn phí răng và inodes:

    # echo 2 > /proc/sys/vm/drop_caches
    
  • Để miễn phí pagecache, nha khoa và inodes:

    # echo 3 > /proc/sys/vm/drop_caches
    

Ở trên có nghĩa là được chạy như root. Nếu bạn đang cố gắng thực hiện chúng bằng cách sử dụng sudothì bạn sẽ cần thay đổi cú pháp một chút thành một cái gì đó như sau:

$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

LƯU Ý: Có phiên bản bí truyền hơn của lệnh trên nếu bạn tham gia vào đó:

$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh

Tại sao sự thay đổi trong cú pháp? Các /bin/echochương trình đang chạy như là người chủ, vì sudo, nhưng vỏ đó là chuyển hướng đầu ra tiếng vang đối với file gốc chỉ vẫn chạy như bạn. Shell hiện tại của bạn thực hiện chuyển hướng trước khi sudo bắt đầu.

Xem những gì trong bộ đệm và bộ đệm

Hãy xem linux-ftoolsnếu bạn muốn phân tích nội dung của bộ đệm & bộ đệm. Cụ thể nếu bạn muốn xem những tập tin nào đang được lưu trữ.

vợ chồng

Với công cụ này, bạn có thể thấy những tập tin nào đang được lưu trong bộ nhớ cho.

fincore [options] files...

  --pages=false      Do not print pages
  --summarize        When comparing multiple files, print a summary report
  --only-cached      Only print stats for files that are actually in cache.

Ví dụ /var/lib/mysql/blogindex:

root@xxxxxx:/var/lib/mysql/blogindex# fincore --pages=false --summarize --only-cached * 
stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365 
stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392 
stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached pages=1 , cached size=4096, cached perc=0.497512 
stats for CLUSTER_LOG_2010_05_24.MYI: file size=192512 , total pages=47 , cached pages=1 , cached size=4096, cached perc=2.127660 
stats for CLUSTER_LOG_2010_06_03.MYI: file size=345088 , total pages=84 , cached pages=43 , cached size=176128, cached perc=51.190476 
stats for CLUSTER_LOG_2010_06_04.MYD: file size=1478552 , total pages=360 , cached pages=97 , cached size=397312, cached perc=26.944444 
stats for CLUSTER_LOG_2010_06_04.MYI: file size=205824 , total pages=50 , cached pages=29 , cached size=118784, cached perc=58.000000 
stats for COMMENT_CONTENT_2010_06_03.MYI: file size=100051968 , total pages=24426 , cached pages=10253 , cached size=41996288, cached perc=41.975764 
stats for COMMENT_CONTENT_2010_06_04.MYD: file size=716369644 , total pages=174894 , cached pages=79821 , cached size=326946816, cached perc=45.639645 
stats for COMMENT_CONTENT_2010_06_04.MYI: file size=56832000 , total pages=13875 , cached pages=5365 , cached size=21975040, cached perc=38.666667 
stats for FEED_CONTENT_2010_06_03.MYI: file size=1001518080 , total pages=244511 , cached pages=98975 , cached size=405401600, cached perc=40.478751 
stats for FEED_CONTENT_2010_06_04.MYD: file size=9206385684 , total pages=2247652 , cached pages=1018661 , cached size=4172435456, cached perc=45.321117 
stats for FEED_CONTENT_2010_06_04.MYI: file size=638005248 , total pages=155763 , cached pages=52912 , cached size=216727552, cached perc=33.969556 
stats for FEED_CONTENT_2010_06_04.frm: file size=9840 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 
stats for PERMALINK_CONTENT_2010_06_03.MYI: file size=1035290624 , total pages=252756 , cached pages=108563 , cached size=444674048, cached perc=42.951700 
stats for PERMALINK_CONTENT_2010_06_04.MYD: file size=55619712720 , total pages=13579031 , cached pages=6590322 , cached size=26993958912, cached perc=48.533080 
stats for PERMALINK_CONTENT_2010_06_04.MYI: file size=659397632 , total pages=160985 , cached pages=54304 , cached size=222429184, cached perc=33.732335 
stats for PERMALINK_CONTENT_2010_06_04.frm: file size=10156 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 
---
total cached size: 32847278080

Với đầu ra ở trên, bạn có thể thấy rằng có một số tệp * .MYD, * .MYI và * .frm hiện đang được lưu trữ.

Trao đổi

Nếu bạn muốn xóa trao đổi của mình, bạn có thể sử dụng các lệnh sau.

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7298164     689328          0      30416     457936
-/+ buffers/cache:    6809812    1177680
Swap:      5963772     609452    5354320

Sau đó sử dụng lệnh này để vô hiệu hóa trao đổi:

$ swapoff -a

Bạn có thể xác nhận rằng nó hiện đang trống:

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7777912     209580          0      39332     489864
-/+ buffers/cache:    7248716     738776
Swap:            0          0          0

Và để kích hoạt lại nó:

$ swapon -a

Và bây giờ xác nhận lại với free:

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7785572     201920          0      41556     491508
-/+ buffers/cache:    7252508     734984
Swap:      5963772          0    5963772

13
chưa bao giờ nghe nói về linux-ftools sau nhiều năm, mặc dù tôi đã biết cách bỏ bộ đệm. bạn thực sự là một đạo sư Cám ơn vì đã chia sẻ!
johnshen64

5
Những điều bạn nói về đồng bộ hóa là sai: theo tài liệu linux, việc ghi vào drop_cache sẽ chỉ xóa nội dung sạch (đã được đồng bộ hóa). Ngoài ra, ngay cả khi nó làm giảm dữ liệu không được đồng bộ hóa, nói rằng việc gõ lệnh đồng bộ hóa ngay trước khi xóa bộ nhớ cache sẽ lưu dữ liệu của bạn là sai: không có thời gian nào khác giữa lệnh đồng bộ drop_cache ghi, vì vậy bất kỳ dữ liệu nào cũng có thể được thêm vào trong thời gian này. Không có gì nguyên tử ở đây.
Congelli501

3
Tôi đã nhận được thông tin đó ở đây: kernel.org/doc/Documentation/sysctl/vm.txt - "Đây là một hoạt động không phá hủy và sẽ không giải phóng bất kỳ đối tượng bẩn nào.". Nó cũng nói rằng đồng bộ hóa có thể được sử dụng để tăng kích thước bộ đệm bị giảm (đối với bộ đệm ghi lại).
Congelli501

26
Thích "sudo sysctl vm.drop_caches = 1" hơn "sudo sh -c 'echo 1> / Proc / sys / vm / drop_caches'"
Raúl Salinas-Monteagudo

8
@slm tôi thích sử dụng teeđể viết bằng root:echo 3 | sudo tee /proc/sys/vm/drop-caches
pqnet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.