เนื่องจาก Google Chrome / Chromium วางไข่หลายกระบวนการจึงยากที่จะเห็นจำนวนหน่วยความจำทั้งหมดที่กระบวนการเหล่านี้ใช้ทั้งหมด
มีวิธีที่ง่ายหรือไม่ในการดูว่ามีหน่วยความจำรวมทั้งหมดที่กระบวนการเชื่อมต่อใช้อยู่หรือไม่
เนื่องจาก Google Chrome / Chromium วางไข่หลายกระบวนการจึงยากที่จะเห็นจำนวนหน่วยความจำทั้งหมดที่กระบวนการเหล่านี้ใช้ทั้งหมด
มีวิธีที่ง่ายหรือไม่ในการดูว่ามีหน่วยความจำรวมทั้งหมดที่กระบวนการเชื่อมต่อใช้อยู่หรือไม่
คำตอบ:
เนื่องจากgoogle kill chrome: // memoryในเดือนมีนาคม 2559 ตอนนี้ฉันใช้smem :
# detailed output, in kB apparently
smem -t -P chrom
# just the total PSS, with automatic unit:
smem -t -k -c pss -P chrom | tail -n 1
chrom
ด้วยเส้นทางแบบเต็มเช่น/opt/google/chrome
หรือ/usr/lib64/chromium-browser
-P firefox
sudo smem
สำหรับสิ่งนั้น338.0M
เมื่อฉันเรียกใช้คำสั่งที่สองผมได้รับค่ากลับมาของ ต่ำเกินไป เมื่อฉันเรียกใช้การตรวจสอบระบบฉันจะเห็นว่ามีกระบวนการของโครเมียม 11 กระบวนการและแต่ละกระบวนการใช้ RAM ระหว่าง 70MB ถึง 400MB ไม่แน่ใจว่าการตรวจสอบระบบรายงานว่าไม่ถูกต้องหรือไม่
chrome
แทนเพียงchorm
เพราะถ้าคุณใช้ทั้งโครเมียมและโครเมียมคุณจะเห็นผลรวมทั้งคู่
smem
จากการแสดงผลของตัวเองโดยใช้สิ่งที่ต้องการเช่น[c]hrome
smem -tkP '[c]hrome'
มันทำงานได้โดยการจับคู่c
ด้านในของวงเล็บเหลี่ยมและไม่ใช่วงเล็บเหลี่ยม
ฉันแน่ใจว่ามันไม่ใช่ทางออกที่ดีที่สุด แต่ก็ยังใช้งานได้สำหรับฉัน:
#!/bin/sh
ps aux | grep "[/]opt/google/chrome/chrome" | awk '{print $5}' | awk '{sum += $1 } END { print sum }'
ps aux | grep "[/]opt/google/chrome/chrome" | awk '{print $6}' | awk '{sum += $1 } END { print sum }'
หมายเหตุ: เปลี่ยนเป็น[/]opt/google/chrome/chrome
สิ่งที่เหมาะสมสำหรับระบบของคุณเช่นหากคุณใช้ Mac OS X ( grep "chrome"
จะใช้งานได้)
awk
คำสั่ง? นั่นคือเหตุผลที่ไม่ได้เป็นเพียง... | awk '{sum += $6} END {print sum}'
?
ps aux | grep "/opt/google/chrome/chrome" | awk '{vsz += $5; rss += $6} END { print "vsz="vsz, "rss="rss }'
smem
ต่อคำตอบยอดนิยม แม้ว่า FWIW ฉันจะใช้มันเป็นสคริปต์หรือฟังก์ชั่นเนื่องจากมันซับซ้อนเกินไปสำหรับนามแฝง
ใช้สิ่งนี้:
perl -e '$a="x"x1000000000;sleep(10);print"done\n"'
ใช้ RAM 1.8GB ขึ้นไป ดังนั้นคุณคาดว่าจะใช้งานได้:
perl -e '$a="x"x1000000000;fork;fork;fork;fork;sleep(10);print"done\n"'
จะใช้เวลามากถึง 16 เท่า แต่มันไม่ได้
นี่เป็นเพราะการคัดลอก -on-write ที่ชาญฉลาดของ Linux kernel: เนื่องจากเนื้อหาของ '$ a' ไม่เปลี่ยนแปลงดังนั้นหน่วยความจำ '$ a' จึงสามารถแชร์ได้ แต่จะยังคงแชร์อยู่จนกว่าจะเปลี่ยน '$ a' เมื่อสิ่งนั้นเกิดขึ้นส่วนที่เปลี่ยนแปลงจะถูกคัดลอกและเริ่มรับแรม
ไม่ว่าคุณจะสามารถวัดจำนวนหน่วยความจำที่คัดลอกเมื่อเขียนเกินความมุ่งมั่นฉันไม่ทราบ แต่อย่างน้อยนี่ก็อธิบายการนับเกินกำลังของคุณ
เพียงคำนวณผลรวมของกระบวนการอย่างรวดเร็ว
บนMac :
chrome://system/
และเลือกรายงานทั้งหมดในmem_usagepython
, CMD + V, Enterและ voila! "ง่าย" ... 🤓😅
PS - นินจาทางลัด & 80s / 90s ผู้เล่นเกมต่อสู้ไม่ควรมีปัญหากับวิธีนี้🤖🕹💾
ฉันพบวิธีแก้ปัญหาด้วยเสียงเรียกเข้าและ awk เปิด chrome: // ระบบขยาย mem_usage คัดลอกไปยังกลุ่มและเรียกใช้ regexp:
:%s/\D*\(\d*\).MB.*/\1
ซึ่งจะทิ้งเฉพาะตัวเลขก่อน MB บันทึกไฟล์และดำเนินการ
cat file | awk '{sum += $1} END {print sum}'
ฉันไม่สามารถแปลง vim regexp code เป็น sed ได้
มีUSSซึ่งมีให้บริการข้ามแพลตฟอร์ม
USS (Unique Set Size) คือหน่วยความจำที่ไม่ซ้ำกับกระบวนการและจะเป็นอิสระหากกระบวนการถูกยกเลิกในตอนนี้
psutil> 4.0 Python library สามารถเข้าถึงได้
นี่ฉันจะใช้มัน
sudo python3 -c "import psutil;print(sum(p.memory_full_info().uss for p in psutil.Process(pid=292).children())/1024/1024);"
โดยที่ pid = 292 เป็น PID ของกระบวนการภายนอกส่วนใหญ่จากการตรวจสอบกิจกรรม
ฉันรู้ว่า chrome / chromium มีตัวจัดการงาน แต่มันไม่ได้ให้หน่วยความจำทั้งหมดที่ใช้ ปรากฎว่าลิงก์ "สถิติสำหรับผู้สนใจ" ในตัวจัดการงานนำไปสู่ chrome: // memory-redirect / ซึ่งแสดงรายการหน่วยความจำทั้งหมดที่ใช้ มันจะเป็นการดีถ้ามีการตรวจสอบความถูกต้องภายนอกของตัวเลขเหล่านี้รวมถึงวิธีการรับข้อมูลในบรรทัดคำสั่งเพื่อให้สามารถทำได้มากกว่านี้ แต่นี่น่าจะเป็นวิธีที่ดีที่สุดที่มีอยู่