Tấm sử dụng 88Gb 128Gb có sẵn. Điều gì có thể gây ra điều này?


8

Chúng tôi chạy một debian 2.6.26-2-amd64 x86_64 GNU / Linux trên máy chủ có 128 Gb. Gần đây, bộ nhớ khả dụng của chúng tôi trở nên khá thấp. Nhìn vào / Proc / meminfo cho thấy Slab đang sử dụng 88Gb, được tính trong khóa học tắt bộ nhớ đã sử dụng.

  1. Đây co phải vân đê? Tôi nghi ngờ rằng bộ nhớ sẽ được giải phóng khi cần thiết, nhưng tôi không biết nếu điều đó có thể có tác dụng phụ không mong muốn.
  2. Tại sao Slab cần nhiều bộ nhớ như vậy? Có một nguyên nhân rõ ràng cho điều đó?
  3. chúng ta có thể tránh điều này xảy ra trong tương lai?
  4. Làm thế nào chúng ta có thể giải phóng bộ nhớ này?

cảm ơn bạn trước

> cat /proc/meminfo
MemTotal:     132304500 kB
MemFree:      26669388 kB
Buffers:        237504 kB
Cached:       11881136 kB
SwapCached:         48 kB
Active:        5244640 kB
Inactive:     11714308 kB
SwapTotal:     5751228 kB
SwapFree:      5750436 kB
Dirty:              24 kB
Writeback:           0 kB
AnonPages:     4840256 kB
Mapped:         163968 kB
Slab:         88314840 kB
SReclaimable: 88275644 kB
SUnreclaim:      39196 kB
PageTables:      80852 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:  71903476 kB
Committed_AS:  6818332 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    505724 kB
VmallocChunk: 34359231963 kB

Câu trả lời:


5

Bạn có chắc chắn đây là một vấn đề thực tế: RAM đã sử dụng không giống như ram không có sẵn (Xem ví dụ câu hỏi ServerFault này về bộ đệm / bộ đệm / bộ đệm ), phản xạ muốn có bộ nhớ được liệt kê là miễn phí thường là sai.

Slab không phải là một điều cụ thể, đó là một trong những cấp phát bộ nhớ trong kernel, đặc biệt là bản sàn cho phép kernel quản lý các đối tượng không có kích thước trang (như được chỉ ra ở nơi khác / Proc / slabinfo và slabtop sẽ cho bạn một số dấu hiệu về những gì nó hiện đang giữ). Một số nền tảng khác về tấm có thể được tìm thấy ở đây

Nếu bạn thấy SReclaimable bên dưới Slab, thì có ý kiến ​​cho rằng hầu như tất cả bộ nhớ được phân bổ bởi phiến có thể được lấy lại khi / nếu cần. Vì vậy, vâng, bộ nhớ sẽ được giải phóng khi cần thiết. Chi phí ngẫu nhiên của việc đòi lại đang trả một số chi phí kế toán hoãn lại trong chu kỳ cpu.

Tôi không chắc chắn nếu bản nói chính xác cần tất cả bộ nhớ đó, thì trong nhiều trường hợp, nó sẽ giữ lại các đối tượng được khởi tạo để sử dụng sau này (tiết kiệm khởi tạo), một số trong số đó là các bộ đệm khác nhau, hầu hết điều này có thể có ích (hiệu ứng Ie của cache hệ thống tập tin là rất lớn).

Nếu bạn muốn kiểm soát hành vi của vmm, hãy xem / Proc / sys / vm , đặc biệt là min_slab_ratio có thể được quan tâm. Bạn cũng có thể giới hạn các bộ đệm riêng lẻ thông qua / Proc / slabinfo (xem bài viết về nhà phát triển ibm để biết chi tiết). Mặc dù, trước khi bạn bắt đầu bật vmm và sàn: Tìm hiểu những gì bạn thực sự muốn thực hiện, và thực hiện một số nghiên cứu về vmm và làm thế nào nó có thể được điều chỉnh để phù hợp với khối lượng công việc của bạn. Hoàn toàn có thể phá vỡ hệ thống của bạn một cách tinh tế và ngoạn mục bằng cách chơi xung quanh với các nút điều chỉnh vmm.


cảm ơn bạn rất nhiều vì phản hồi sâu sắc và các liên kết
Joris Meys

1
Liên kết nhà phát triển IBM không hoạt động nữa.
Ikke

11

Sử dụng thông tin bộ đệm slabtop kernel kernel:

slabtop

Cũng xem "vmstat -m":

vmstat  -m

và nhìn / Proc / slabinfo:

cat /proc/slabinfo

Thả bộ nhớ cache vào bộ nhớ trống

sync; echo 3 > /proc/sys/vm/drop_caches

Thx cho các lệnh, chúng làm cho cuộc sống thực sự dễ dàng hơn một chút.
Joris Meys
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.