วิธีการตีความผลลัพธ์จากคำสั่ง 'บน' Linux?


27

หลังจากการสนทนาได้ทำที่นี่เกี่ยวกับการPHP-FPMใช้หน่วยความจำฉันพบปัญหาในการอ่านหน่วยความจำในtopคำสั่ง นี่คือภาพหน้าจอของฉันเพียงแค่หลังจากที่เริ่มต้นtop PHP-FPMทุกอย่างเป็นปกติ: ประมาณ 20 PHP-FPMกระบวนการใช้หน่วยความจำ 5.5MB (รวม 0.3% จากทั้งหมด)

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือเซิร์ฟเวอร์เก่าที่ถูกต้องก่อนรีสตาร์ทPHP-FPM(หนึ่งวันหลังจากการรีสตาร์ทครั้งก่อน) ที่นี่เรายังมีประมาณ 25 PHP-FPMด้วยการใช้หน่วยความจำสองเท่า (10MB ระบุ 0.5% จากทั้งหมด) ดังนั้นหน่วยความจำทั้งหมดที่ใช้ควรเป็น 600-700 MB ทำไมจึงมีการใช้หน่วยความจำ 1.6GB

ป้อนคำอธิบายรูปภาพที่นี่



@ephemient ไม่มันไม่ใช่อย่างนี้ ฉันตรวจสอบทุกสิ่งเหล่านี้แล้ว นี่คือสิ่งที่เชื่อมต่อกับ PHP-FPM และหน่วยความจำจะถูกปลดปล่อยโดยการรีสตาร์ท PHP-FPM เท่านั้น อย่างไรก็ตามค่าของ Mem และบัฟเฟอร์ / แคชfreeนั้นเหมือนกัน
Googlebot

6
ดูเหมือนว่าคุณกำลังใช้งาน Virtuozzo "VM" การเดิมพันทั้งหมดจะปิดไปจนถึงการบัญชีหน่วยความจำดำเนินการกับสิ่งเหล่านั้น
womble


เรียน womble และ ephemient: ฉันขโมยคำตอบของคุณทั้งคู่! cackles
เวสลีย์

คำตอบ:


34

TL; DR 1

เซิร์ฟเวอร์ของคุณอยู่ในคอนเทนเนอร์ virtuozzo / openvz / virtualization-du-jourบางประเภท การพยายามทำความเข้าใจเกี่ยวกับการใช้หน่วยความจำกำลังเอียงไปที่กังหันลม

TL; DR 2

Linux กิน RAM ของคุณ! แต่ก็ไม่เป็นไรมันทำเพื่อทุกคน


เรื่องยาว

มาทำลายมันกันเถอะ!

ในMem:ส่วนที่เรามี:

  • $n total: จำนวนแรมจริงในเครื่องของคุณ
  • $n used: ลีนุกซ์ใช้หน่วยความจำเท่าไร, ไม่ใช่แค่เพียงผลรวมของกระบวนการ.
  • $n free: Linux ไม่ได้ใช้ RAM เท่าใด สิ่งนี้ไม่ได้คำนึงถึงว่าหน่วยความจำที่แคชและบัฟเฟอร์มีความสำคัญว่า "ฟรี"
  • $n buffers: พื้นที่บัฟเฟอร์คือที่เก็บบล็อกของดิสก์ I / O ที่ถูกอ่านหรือรอการเขียนอยู่ บัฟเฟอร์คือการเป็นตัวแทน RAM ของดิสก์บล็อกเดียว

ในSwap:ส่วนที่เรามี:

  • $n total: อธิบายตนเอง จำนวนเนื้อที่ดิสก์ที่สามารถสลับหน้าได้
  • $n used: อธิบายตนเอง จำนวนพื้นที่ดิสก์ที่ใช้สลับ
  • $n free: Herp Derp
  • $n cache: เกี่ยวข้องอย่างใกล้ชิดกับบัฟเฟอร์ด้านบน มันเป็นส่วนหนึ่งของแคชของหน้าและตัวมันเองไม่มีที่ว่างบนดิสก์ทางกายภาพ ไม่ต้องกังวลกับรายละเอียดของการสนทนานี้

free -mส่วนที่น่าสนใจมาเมื่อคุณเรียกใช้ คุณจะเห็นสามบรรทัดและตัวเลขทั้งหมดจะมีความสัมพันธ์กับด้านบน ฉันจะให้พีซีของฉันเป็นตัวอย่าง:

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

แถว Mem แสดง RAM ทั้งหมดในหน่วยเมกะไบต์ ( $n totalด้านบน) จำนวนการใช้งาน ( $n usedด้านบน) จำนวนฟรี ( $n freeด้านบน) จำนวนการแชร์ (ไม่สนใจ) และตอนนี้มาเป็นส่วนที่ดี! buffersและcachedคอลัมน์ในfree -mความสัมพันธ์กับการคาดการณ์และ$n buffers $n cacheแต่จะดูที่แถวที่สองที่จะเริ่มต้นด้วยfree -m -/+ buffers/cache:คณิตศาสตร์แสดงให้เห็นว่าจำนวนเงินที่ใช้จริง ๆ (ทั้งหมด) - ((ใช้แล้วบัฟเฟอร์) - แคช) ฟรีคือ (ทั้งหมด) - (theNewUsed)

ทั้งหมดนี้หมายความว่าอย่างไร หมายความว่าLinux กิน RAM ของคุณ! เรื่องสั้นคือเคอร์เนลลินุกซ์กลืน RAM ในขณะที่พร้อมใช้งานสำหรับการแคชดิสก์ ไม่มีอะไรที่คุณสามารถทำได้เกี่ยวกับเรื่องนี้จนกว่าคุณจะรู้สึกว่าพยายามรวบรวมเคอร์เนลที่กำหนดเอง เคล็ดลับ Pro:อย่า

RAM มีอยู่จริงและมีอิสระสำหรับกระบวนการที่จะใช้ในความตั้งใจของพวกเขา ว่าสิ่งที่หมายโดยแถวใน-/+ buffers/cache: free -mอย่างไรก็ตามคุณอยู่ในคอนเทนเนอร์ virtualization ที่ไม่ใช่ไฮเปอร์ visor ซึ่งทำให้ทุกอย่างดูน่ารำคาญ คุณไม่สามารถนำสต็อกของหน่วยความจำของคุณไปด้วยความแม่นยำของไบต์ได้ อย่างไรก็ตามคุณไม่เห็นพฤติกรรมใด ๆ ที่ผิดปกติอย่างมาก

ใจเย็นไว้และเดินหน้าต่อไป. และรับเซิร์ฟเวอร์ทางกายภาพ (เว้นแต่ว่าคุณชอบสถิติหน่วยความจำที่มีลักษณะเหมือน Kreskin คือ SysAdmin ของคุณ)


จำนวนเงินที่ใช้ไม่เป็น ((ใช้บัฟเฟอร์) - แคช) หรือไม่
mac

1

ด้านบนไม่ใช่วิธีที่ดีที่สุดในการตรวจสอบการใช้หน่วยความจำ อย่างไรก็ตามเนื่องจากคำถามของฉันถูกทำเครื่องหมายว่าซ้ำกับคำถามนี้ฉันจะโพสต์ความละเอียดที่นี่

ฉันอ่านฟอรัมที่ ps_mem.py จะตรวจสอบการใช้งานหน่วยความจำสำหรับคุณ

พื้นที่เก็บข้อมูล: https://github.com/pixelb/ps_mem/

ดาวน์โหลด:

pip install ps_mem

การใช้งาน:

ps_mem

เอาท์พุท:

# 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
=================================
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.