วิธีดูการใช้หน่วยความจำแบบสรุปของกลุ่มคำสั่ง (แทนกระบวนการ)


10

มีวิธีการจัดกลุ่มกระบวนการที่คล้ายกันเมื่อใช้เครื่องมือเช่น top / htop หรือไม่? บางครั้งฉันแค่อยากรู้ว่าสิ่งที่กินหน่วยความจำของฉันและบางโปรแกรม (เบราว์เซอร์ส่วนใหญ่) ใช้กระบวนการหลายกระบวนการซึ่งทำให้ยากต่อการอ่านจำนวน RAM ที่ใช้งานจริง

จนถึงตอนนี้ฉันก็มาพร้อมกับสิ่งที่:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

คำตอบ:


7

คุณสามารถใช้ps -Cเพื่อแสดงข้อมูลกระบวนการสำหรับชื่อคำสั่งเฉพาะเท่านั้น

เช่น

ps -C opera

จากนั้นคุณสามารถใช้psตัวเลือกอื่น ๆเพื่อดึงข้อมูลที่คุณต้องการ โดยเฉพาะอย่างยิ่งhหรือ--no-headersเพื่อระงับส่วนหัวของคอลัมน์และ-o pmemเพื่อแสดงเปอร์เซ็นต์ของหน่วยความจำที่ใช้โดยกระบวนการ

ps -C opera --no-headers -o pmem

นั่นจะให้เปอร์เซ็นต์การใช้หน่วยความจำหนึ่งหน่วยต่อหนึ่งบรรทัด

มีวิธีการมากมายสำหรับการรวมข้อมูลเช่นนั้นหนึ่งในวิธีที่ฉันใช้บ่อย ๆ คือการไพพ์ลงใน xargs เพื่อแปลงมันเป็นหนึ่งบรรทัดด้วยองค์ประกอบที่คั่นด้วยช่องว่างจากนั้นเป็น sed เพื่อแปลงช่องว่างเป็น+สัญลักษณ์แล้วbcดำเนินการ การคำนวณ วิธีการของคุณท่อเข้าไปในงานได้เป็นอย่างดีหรือเนื้อหาที่ดีกว่าpaste -sd+| xargs | sed

เมื่อรวมทั้งหมดเข้าด้วยกันคุณจะได้รับ:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

หรือ

ps -C opera --no-headers -o pmem | paste -sd+ | bc

กล่าวอีกนัยหนึ่งคุณสามารถใช้ps -Cแทน greps หลายตัวหากคุณต้องการข้อมูลเกี่ยวกับโปรแกรมที่กำลังรันอยู่

หมายเหตุ: คุณสามารถใช้หลาย-Cตัวเลือกในบรรทัดคำสั่งเดียวกันหากคุณต้องการข้อมูลเกี่ยวกับโปรแกรมมากกว่าหนึ่งครั้ง เช่น

ps -C iceweasel -C chromium -C opera

เย่คนแรกที่เข้าใจ / อ่านคำถามของฉัน!
korda

ปัญหาเดียวที่ฉันเห็นด้วยวิธีนี้คือบางโปรแกรมมีคำสั่งเดียวกัน แต่ฉันไม่ต้องการจัดกลุ่ม (ตัวอย่างเช่น java ... และเนื่องจากฉันเป็นผู้พัฒนา java ฉันมักจะมีโปรแกรมจาวาทำงานอยู่อย่างน้อยสองสามโปรแกรม) ผมคิดว่าไม่มีการแก้ปัญหาที่สมบูรณ์แบบ ...
Korda

มีทุกครั้งps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...ที่มองหาโปรแกรมจาวาที่ชื่อ foo
cas

0

คุณสามารถสร้างเชลล์สคริปต์

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

สิ่งนี้จะให้แอปพลิเคชั่นการใช้ mem สูงสุด


ฉันพยายามทำให้มันใช้งานได้และมันก็ไม่ได้ให้ผลลัพธ์ที่น่าสนใจ ตัวอย่างเช่นจะแสดงเพียงหนึ่งโปรแกรมเท่านั้นและไม่ใช่โปรแกรมที่ใช้หน่วยความจำมากที่สุด
korda

ใช่ไหม? คุณต้องการบางสิ่งเช่นด้านบนหรือไม่? ถ้าใช่คุณสามารถแก้ไขสคริปต์ด้วยความล่าช้า 2 หรือ 1 วินาทีและเรียกใช้สิ่งเดียวกันในบางขณะหรือเพื่อ สำหรับฉันมันแสดงแอปพลิเคชันการใช้งานหน่วยความจำสูงสุดในเวลาที่ฉันเรียกใช้สคริปต์นี้ ชนิดของสิ่งที่คุณพยายามเพียงเรียกใช้: ps af -o pmem, cmd | sort -r มันจะให้แอปพลิเคชั่นการใช้งาน mem ที่สูงที่สุด
RahulAN

มันไม่ทำงานสำหรับฉัน ฉันคิดว่าเหตุผลก็คือการเรียงลำดับรวมถึงพื้นที่สีขาวชั้นนำ
korda

คุณหมายความว่าคุณไม่ได้รับชื่อกระบวนการที่ถูกต้องหรือไม่?
RahulAN

ใช่เพราะ ps เพิ่มช่องว่างเพื่อเยื้องสิ่ง เมื่อกระบวนการหนึ่งมีการใช้งาน 2 หลักค่าการใช้งานหลักหนึ่งจะถูกเยื้องและจะเริ่มต้นด้วยพื้นที่นำ ฉันเดาว่าการเพิ่มสิ่งที่sed -e 's/^[[:space:]]*//'ควรแก้ไข สคริปต์ของคุณเพิ่มการใช้หน่วยความจำของกระบวนการด้วยคำสั่งเดียวกันหรือไม่
korda

0

จากด้านบนคุณสามารถใช้สิ่งต่อไปนี้:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

คุณอาจลอง:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

คำสั่งนี้จะให้กระบวนการ 5 อันดับแรกด้วยการใช้หน่วยความจำ

ฉันหวังว่าคุณจะพบว่าข้อมูลนี้มีประโยชน์!


0

นี้สามารถง่ายกับtermsql

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

ทราบว่าขณะนี้ยังไม่ได้อัปโหลดไปยังPyPIและยังสามารถติดตั้งทั้งระบบ ( setup.pyเป็นเล็ก ๆ น้อย ๆ เสีย) sudo pip install https://github.com/tobimensch/termsql/archive/master.zipเช่น

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