Bên cạnh bộ đệm, nhân Linux sử dụng lượng bộ nhớ đáng kể để làm gì?


7

Máy tính của tôi cảm thấy rất chậm chạp. Theo đó free, tôi chỉ còn lại ~ 200M RAM và hơn một gigabyte đã phải tráo đổi. Tôi biết rằng thật tốt nếu bộ nhớ được sử dụng cho bộ nhớ đệm nhưng điều này có vẻ như tôi thực sự thiếu RAM.

root@desktop:/proc free -h
               total       used        free      shared  buff/cache   available
Mem:           3.9G        3.4G        132M         44M        378M        213M
Swap:          8.0G        1.2G        6.7G

smem -tkbáo cáo rằng nhiều nhất là 2GiB (cột RSS) được sử dụng bởi các ứng dụng. smem -wkchiếm tất cả bộ nhớ được sử dụng. Rõ ràng kernel sử dụng 1.8GiB không dành cho bộ nhớ đệm:

root@desktop:/proc smem -wk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.9G      74.3M       1.8G 
userspace memory               1.8G     250.9M       1.6G 
free memory                  173.9M     173.9M          0 

Hành vi này có được mong đợi không, và nếu có, thì kernel cần bao nhiêu bộ nhớ?


3
Vui lòng gửi đầu ra của </proc/slabinfo awk '{print $1, $3*$4}' |sort -k2n(điều đó cung cấp phân tích cấp độ đầu tiên của việc sử dụng bộ nhớ kernel).
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


1

Bạn cũng có thể thử điều này:

Sử dụng sar để báo cáo về chuyển đổi ngữ cảnh và sử dụng irq theo thời gian. Sar là một công cụ giám sát hệ thống tuyệt vời nhưng chưa từng thấy. Chạy nó trong một ngày và sau đó sử dụng các báo cáo khác nhau để tìm kiếm sự kỳ lạ.

Các bước:

Cài đặt gói sysstat. Thiết lập công việc định kỳ (kiểm tra /etc/cron.d/xem có tồn tại tệp như vậy không) như thế này:

* * * * * root /usr/lib64/sa/sa1 -S XALL 10 6

Điều này sẽ tạo ra nhiều dữ liệu - khoảng 300 MB mỗi ngày. Nó sẽ chụp ảnh thống kê hệ thống cứ sau 6 giây . (Bạn có thể giảm tần suất xuống hai lần mỗi phút bằng cách thay đổi "10 6" thành "2 30")

Nếu bạn thay đổi tần suất chụp, bạn nên xóa tệp trong ngày /var/log/sa/sa$(date +%d)- nếu không các báo cáo có thể bị hỏng.

OK, sau khi bạn đã chiếm được dữ liệu của mình, hãy thử những điều này (Mẹo: luôn luôn chuyển qua less):

sar -q

Để có được mức trung bình tải và kích thước hàng đợi. Nếu những mức này thấp, thì hãy xem thời gian chờ IO:

sar -P ALL

Nếu bạn không thấy các bước nhảy trong% iowait hoặc các máng ở% không hoạt động, thì hãy kiểm tra các chuyển đổi ngữ cảnh:

saw -w

500 công tắc ngữ cảnh mỗi giây là khá bình thường trên một hệ thống hầu hết không hoạt động.

Bạn có thể giới hạn báo cáo sar bằng cách chỉ định tệp hoạt động, đưa ra thời gian bắt đầu và kết thúc ( -s <hh:mm:ss>-e <hh:mm:sss>tương ứng) và tùy chọn một khoảng thời gian với -i <secs>(phải lớn hơn độ phân giải chụp của bạn, được thiết lập bởi công việc định kỳ).

Thí dụ:

sar -f /var/log/sa/sa$(date +%d -d yesterday) -s 09:15:00 -e 12:15:00 -i 600

sẽ cung cấp cho bạn thông tin tóm tắt về CPU trong khoảng thời gian 10 phút kể từ ngày hôm qua trong khoảng từ 9:15 đến 12:15.

Có nhiều ... nhiều hơn nữa. Bạn có thể làm man sarđể có được thông tin đó.


0

Tôi không biết lý do tại sao bạn chỉnh sửa free -hlệnh đầu ra thiếu -/+ buffers/cachedòng - điều này rất quan trọng. Dù sao chúng ta có thể tiến hành.

Miễn là cột 'Miễn phí' (trên dòng Mem:)> 0, bạn không thực sự thiếu RAM vì đây là RAM hoàn toàn không được sử dụng . Và Linux nổi tiếng là sử dụng tất cả RAM mà nó có thể nhận được (như bộ nhớ cache, hy vọng sẽ có được perforamnce tốt hơn).

Phần trao đổi không nói lên toàn bộ sự thật: khá phổ biến khi có nhiều mã + dữ liệu được hoán đổi vào đĩa vì nó chỉ được chạy một lần và không được sử dụng trong một thời gian. Một phần khác mà Linux cho thấy sự tham lam của RAM đối với hiệu năng: nó nhanh chóng đưa ra những gì có thể không quan trọng (một lần nữa, hiệu năng khôn ngoan). Nó có thể điều chỉnh (sysctl vm.swappiness), nhưng hầu hết các distro mặc định là "đừng ngần ngại trao đổi".

Điều quan trọng để xác nhận giả thuyết của bạn (chậm vì thiếu RAM khả dụng) là nếu nó hiện đang hoán đổi vào hoặc ra đĩa. Hầu hết thời gian, nó khá dễ dàng để tương quan độ trơn với một đĩa nhấp nháy điên cuồng được dẫn trên máy tính của một người. Nếu không, chạy topvà xem xét sự thay đổi con số tiến hóa theo thời gian. Thậm chí dễ dàng hơn, vmstat 1sẽ trực tiếp in các số liệu IO trao đổi mỗi giây (hoán đổi si / so).


Không có bộ đệm / dòng bộ đệm. Tôi đã tự hỏi tại sao bản thân mình. My free đến từ Procps-ng 3.3.10.
Erik

Thật không công bằng khi chỉ gọi Linux tham lam về cách nó sử dụng trao đổi: việc nó hoán đổi nhanh như thế nào tùy thuộc vào cài đặt swappiness của bạn, tùy thuộc vào bạn. Hãy thử sysctl vm.swappiness=10và xem sự khác biệt.
orion

OK, nhưng hầu hết thời gian mặc định là "vui lòng trao đổi càng sớm càng tốt" và hiếm khi có lý do để làm khác (trừ khi bạn ở giải đấu đó trong đó mỗi ms có độ trễ). Tôi đã chỉnh sửa bình luận của mình để đề cập đến cấu hình swappinness.
zerodeux
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.