Sử dụng bộ nhớ cao nhưng không có quá trình sử dụng nó


17

Tôi chạy free -mtrên máy ảo debian chạy trên Hyper-V:

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

Vì vậy, trong số 10 GB bộ nhớ của tôi, 8,5 GB đang được sử dụng và chỉ 1500 MB là miễn phí (không bao gồm bộ đệm).

Nhưng tôi đấu tranh để tìm những gì đang sử dụng bộ nhớ. Đầu ra của ps aux | awk '{sum+=$6} END {print sum / 1024}', được cho là để thêm vào việc sử dụng RSS là:

1005.2

Nói cách khác, các quy trình của tôi chỉ sử dụng 1GB bộ nhớ nhưng toàn bộ hệ thống (không bao gồm bộ đệm) sử dụng 8,5GB.

Điều gì có thể được sử dụng 7.5GB khác?

ps: Tôi có một máy chủ khác có cấu hình tương tự hiển thị mem sử dụng 1200 (mem miễn phí = 8,8 GB) và tổng lượng sử dụng RSS trong ps là 900, gần với những gì tôi mong đợi ...


BIÊN TẬP

cat /proc/meminfo trên máy 1 (bộ nhớ thấp):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo trên máy 2 (sử dụng bộ nhớ thông thường):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB

Câu trả lời:


15

Tôi hiểu rằng bạn đang sử dụng Hyper-V, nhưng các khái niệm tương tự nhau. Có lẽ điều này sẽ đặt bạn đi đúng hướng.

Vấn đề của bạn có thể là do bong bóng bộ nhớ ảo, một kỹ thuật mà nhà ảo thuật sử dụng để tối ưu hóa bộ nhớ. Xem liên kết này để biết mô tả

Tôi đã quan sát các triệu chứng chính xác của bạn với các máy ảo của tôi trong vSphere. Một máy 4G không có gì chạy trên nó sẽ báo cáo 30M được sử dụng bởi bộ đệm, nhưng qua 3G "được sử dụng" trong dòng "- / + bộ đệm".

Đây là đầu ra mẫu từ lệnh thống kê của VMWare. Điều này cho thấy mức độ gần với 3G đang được giải quyết với số tiền "đã sử dụng" của tôi:

vmware-toolbox-cmd stat balloon
3264 MB

Trong trường hợp của tôi, phần nào rõ ràng, trình điều khiển khinh khí cầu của tôi đã sử dụng ~ 3G

Tôi không chắc lệnh tương tự trong Hyper-V là gì để lấy số liệu thống kê bóng của bạn, nhưng tôi chắc chắn bạn sẽ nhận được kết quả tương tự


Cảm ơn - bạn chắc chắn vào một cái gì đó. lsmod | grep hv_ hiển thị hv_balloon trên máy có bộ nhớ thấp nhưng không phải trên máy kia - vì vậy mô-đun bóng được tải trên cái này chứ không phải cái kia. Và hành vi trông rất giống mô tả này .
assylias

Không chắc chắn những gì tương đương với vmware-toolbox-cmdtrên Hyper V mặc dù.
assylias

@assylias Tôi biết, xin lỗi. Tôi nhìn bản thân mình trong khi viết câu trả lời này và trở nên trống rỗng. Tuy nhiên, nếu bạn viết một chương trình phân bổ nhanh nhiều bộ nhớ, điều đó có thể thuyết phục nhà ảo thuật rằng VM của bạn cần tài nguyên. Tương tự như trường hợp kiểm tra trục xuất bộ đệm đĩa, nhưng nguyên nhân gốc khác nhau.
Matt

Bạn có thể bỏ đặt tính năng ram động trong Hyper-V để giải quyết vấn đề này.
Ashish Negi

Tôi không thực sự thấy giải pháp ở đây tôi sợ.
Jamie Hutber

1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

Câu trả lời ngắn: kernel sử dụng bộ đệm / bộ nhớ đệm cho các tác vụ khác nhau, chẳng hạn như các tệp bộ đệm. Bộ nhớ này có sẵn cho các ứng dụng nếu cần thiết, vì vậy bạn đã đúng khi nói rằng bạn có 944 MB được sử dụng.


Theo liên kết đó, 944 MB là dung lượng bộ đệm
assylias

2
Không, 944 MB là dung lượng RAM thực sự được sử dụng bởi các ứng dụng và không có sẵn cho các ứng dụng khác. Đọc lại bài đăng đó: "Linux (giống như hầu hết các hệ điều hành hiện đại) sẽ luôn cố gắng sử dụng RAM miễn phí cho bộ nhớ đệm, vì vậy Mem: free sẽ luôn luôn ở mức rất thấp. Do đó, dòng - / + bộ đệm / bộ đệm: được hiển thị, vì nó hiển thị bao nhiêu bộ nhớ là miễn phí khi bỏ qua bộ nhớ cache, bộ nhớ cache sẽ được giải phóng tự động nếu bộ nhớ bị khan hiếm, vì vậy chúng không thực sự quan trọng. "
vik

có và - / + bộ đệm / bộ nhớ cache hiển thị 1,5 GB mem miễn phí ...
assylias

Vui lòng hiểu 1485 miễn phí trong bộ đệm - / + bộ đệm KHÔNG phải là dung lượng bộ nhớ khả dụng cho các ứng dụng trên hệ thống. Dung lượng bộ nhớ thực sự có sẵn cho các ứng dụng của bạn là: (10017 - (9485 - 8531)) = 9073. Điều này có hợp lý không?
vik

Tôi nghĩ bạn đã sai: dòng thứ hai loại trừ bộ đệm & bộ đệm và là việc sử dụng bộ nhớ thực tế của các ứng dụng (và đó là những gì liên kết của bạn nói ...).
assylias
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.