Chạy Ubuntu trên kernel 2.6.31-302 x86-64. Vấn đề chung là tôi có bộ nhớ trong danh mục 'được lưu trong bộ nhớ cache' liên tục tăng và sẽ không được giải phóng hoặc sử dụng ngay cả khi ứng dụng của chúng tôi cần.
Vì vậy, đây là những gì tôi nhận được từ lệnh 'miễn phí'. Không ai trong số này nhìn ra ngoài bình thường thoạt nhìn.
# free
total used free shared buffers cached
Mem: 7358492 5750320 1608172 0 7848 1443820
-/+ buffers/cache: 4298652 3059840
Swap: 0 0 0
Điều đầu tiên ai đó sẽ nói là "Đừng lo lắng, linux sẽ tự động quản lý bộ nhớ đó." Vâng, tôi biết làm thế nào trình quản lý bộ nhớ được cho là làm việc; Vấn đề là nó không làm đúng. 1,4 GB "được lưu trong bộ nhớ cache" ở đây dường như được bảo lưu và không sử dụng được.
Kiến thức về Linux của tôi cho tôi biết rằng 3 GB là "miễn phí"; nhưng hành vi của hệ thống nói khác. Khi bộ nhớ trống thực tế 1.6 GB được sử dụng hết trong thời gian sử dụng tối đa, ngay khi có nhiều bộ nhớ hơn (và 'miễn phí' trong cột đầu tiên tiếp cận 0), kẻ giết người OOM được gọi, các quy trình bị giết và các vấn đề bắt đầu nảy sinh ngay cả khi 'miễn phí' trong hàng - / + bộ đệm / bộ đệm vẫn có khoảng 1,4 GB 'miễn phí'.
Tôi đã điều chỉnh các giá trị oom_adj trên các quy trình chính để nó không khiến hệ thống phải quỳ xuống, nhưng ngay cả khi đó các quy trình quan trọng sẽ bị giết và chúng tôi không bao giờ muốn đạt đến điểm đó. Đặc biệt là về mặt lý thuyết, 1,4 GB vẫn là "miễn phí" nếu nó chỉ xóa bộ nhớ cache của đĩa.
Có ai có bất cứ ý tưởng những gì đang xảy ra ở đây? Internet tràn ngập những câu hỏi ngớ ngẩn về lệnh 'miễn phí' của Linux và "tại sao tôi không có bộ nhớ trống" và tôi không thể tìm thấy bất cứ điều gì về vấn đề này vì điều đó.
Điều đầu tiên xuất hiện trong đầu tôi là hoán đổi bị tắt. Chúng tôi có một sysadmin kiên quyết về nó; Tôi sẵn sàng giải thích nếu chúng được sao lưu. Điều này có thể gây ra vấn đề?
Đây là miễn phí sau khi chạy echo 3 > /proc/sys/vm/drop_caches
:
# free
total used free shared buffers cached
Mem: 7358492 5731688 1626804 0 524 1406000
-/+ buffers/cache: 4325164 3033328
Swap: 0 0 0
Như bạn có thể thấy, một số lượng bộ nhớ cache rất nhỏ thực sự được giải phóng, nhưng khoảng 1,4 GB dường như bị "kẹt". Vấn đề khác là giá trị này dường như tăng theo thời gian. Trên một máy chủ khác, 2.0 GB bị kẹt.
Tôi thực sự muốn bộ nhớ này trở lại ... bất kỳ trợ giúp sẽ được đánh giá cao nhất.
Đây là cat /proc/meminfo
nếu nó có giá trị bất cứ điều gì:
# cat /proc/meminfo
MemTotal: 7358492 kB
MemFree: 1472180 kB
Buffers: 5328 kB
Cached: 1435456 kB
SwapCached: 0 kB
Active: 5524644 kB
Inactive: 41380 kB
Active(anon): 5492108 kB
Inactive(anon): 0 kB
Active(file): 32536 kB
Inactive(file): 41380 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 320 kB
Writeback: 0 kB
AnonPages: 4125252 kB
Mapped: 42536 kB
Slab: 29432 kB
SReclaimable: 13872 kB
SUnreclaim: 15560 kB
PageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3679244 kB
Committed_AS: 7223012 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7696 kB
VmallocChunk: 34359729675 kB
DirectMap4k: 7340032 kB
DirectMap2M: 0 kB