Làm thế nào để diễn giải đầu ra từ lệnh 'top' của Linux?


27

Sau một cuộc thảo luận được thực hiện TẠI ĐÂY về việc PHP-FPMtiêu thụ bộ nhớ, tôi chỉ thấy một vấn đề trong việc đọc bộ nhớ trong toplệnh. Đây là một ảnh chụp màn hình của tôi topngay sau khi khởi động lại PHP-FPM. Mọi thứ đều bình thường: khoảng 20 PHP-FPMquy trình, mỗi quy trình tiêu thụ bộ nhớ 5,5 MB (chiếm 0,3% tổng số).

nhập mô tả hình ảnh ở đây

Đây là máy chủ cũ ngay trước khi khởi động lại PHP-FPM(một ngày sau lần khởi động lại trước đó). Ở đây, chúng ta vẫn còn khoảng 25 PHP-FPMvới việc sử dụng bộ nhớ gấp đôi (10 MB chỉ 0,5% tổng số). Do đó, tổng bộ nhớ được sử dụng phải là 600-700 MB. Vậy thì, tại sao bộ nhớ 1.6GB đã được sử dụng?

nhập mô tả hình ảnh ở đây



@ephemient không có nó không phải là trường hợp ở đây. Tôi đã kiểm tra tất cả những thứ này. Đây là một cái gì đó được kết nối với PHP-FPM và bộ nhớ sẽ được giải phóng bằng cách chỉ khởi động lại PHP-FPM. Dù sao, các giá trị của Mem và bộ đệm / bộ đệm trong freelà giống hệt nhau.
Googlebot

6
Có vẻ như bạn đang chạy Virtuozzo "VM". Tất cả các cược được tắt cho đến khi kế toán bộ nhớ đi vào những điều đó.
womble


Kính gửi womble và ephemient: Tôi đã đánh cắp cả câu trả lời của bạn! cackles
Wesley

Câu trả lời:


34

TL; DR 1

Máy chủ của bạn nằm trong một số loại container virtuozzo / openvz / virtualization-du-jour . Cố gắng làm cho ý nghĩa của việc sử dụng bộ nhớ đang nghiêng về cối xay gió.

TL; DR 2

Linux đã ăn RAM của bạn! Nhưng không sao, nó làm điều đó với mọi người.


Câu chuyện dài

Hãy phá vỡ nó!

Trong Mem:phần chúng ta có:

  • $n total: dung lượng RAM vật lý trong máy của bạn
  • $n used: bao nhiêu bộ nhớ đang được Linux tiêu thụ, không chỉ là tổng của các quá trình.
  • $n free: Linux không được sử dụng bao nhiêu RAM. Điều này không tính đến việc bộ nhớ đệm và bộ nhớ đệm về bản chất là "miễn phí".
  • $n buffers: không gian bộ đệm là nơi các khối I / O của đĩa đã được đọc hoặc đang chờ ghi được lưu trữ. Một bộ đệm là một đại diện RAM của một khối đĩa đơn.

Trong Swap:phần chúng ta có:

  • $n total: Tự giải thích. Số lượng không gian đĩa có sẵn để trao đổi các trang đến.
  • $n used: Tự giải thích. Bao nhiêu không gian trao đổi đĩa được sử dụng.
  • $n free: HERP derp.
  • $n cache: Liên quan chặt chẽ đến bộ đệm ở trên. Nó thực sự là một phần của bộ đệm trang và bản thân nó không có dung lượng trên đĩa vật lý. Đừng lo lắng về các chi tiết cho cuộc trò chuyện này.

Phần thú vị đến khi bạn chạy free -m. Bạn sẽ thấy ba dòng và tất cả các số sẽ tương quan với đầu. Tôi sẽ lấy PC của mình làm ví dụ:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Hàng Mem hiển thị tổng RAM tính bằng megabyte ( $n totaltrên cùng), bao nhiêu được sử dụng ( $n usedtrên cùng), bao nhiêu là miễn phí ( $n freetrên cùng), bao nhiêu được chia sẻ (bỏ qua điều đó) và bây giờ là phần tốt! Các cột bufferscachedcác cột free -mtương quan với, dự đoán $n buffers$n cache. Nhưng hãy nhìn vào hàng thứ hai free -mbắt đầu bằng -/+ buffers/cache:. Toán học chỉ ra rằng số tiền được sử dụng là thực sự (tổng cộng) - ((bộ đệm đã sử dụng) -cached). Miễn phí là (tổng cộng) - (the NewUsed).

Tất cả điều này có nghĩa là gì? Nó có nghĩa là Linux đã ăn RAM của bạn! Câu chuyện ngắn là hạt nhân Linux ngấu nghiến RAM vì nó có sẵn để sử dụng cho bộ nhớ đệm đĩa. Không có gì bạn có thể làm về nó trừ khi bạn cảm thấy muốn biên dịch kernel tùy chỉnh. Mẹo chuyên nghiệp: Đừng.

RAM thực sự ở đó và miễn phí cho các quá trình sử dụng theo ý thích của họ. Đó là những gì có nghĩa là -/+ buffers/cache:hàng trong free -m. Tuy nhiên, bạn đang ở trong thùng chứa ảo hóa siêu thị giác, điều này khiến mọi thứ hơi khó hiểu. Tại thời điểm này, bạn chỉ đơn giản là không thể lấy bộ nhớ của mình với độ chính xác byte. Tuy nhiên, bạn không thấy bất kỳ hành vi nào quá bất thường.

Giữ bình tĩnh và tiếp tục. Ngoài ra, hãy lấy một máy chủ vật lý (trừ khi bạn thích thống kê bộ nhớ trông giống như Kreskin là SysAdmin của bạn).


Số tiền không được sử dụng là ((bộ đệm đã sử dụng) -cached)?
mac

1

Top không phải là cách tốt nhất để kiểm tra việc sử dụng bộ nhớ. Tuy nhiên, vì câu hỏi của tôi được đánh dấu là bản sao của câu hỏi này, tôi sẽ đăng giải quyết của mình ở đây.

Tôi đã đọc trên một diễn đàn rằng ps_mem.py sẽ kiểm tra việc sử dụng bộ nhớ cho bạn.

Kho lưu trữ: https://github.com/pixelb/ps_mem/

Tải về:

pip install ps_mem

Sử dụng:

ps_mem

Đầu ra:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
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.