มีคำสั่งเหมือนเวลาหรือเปล่า แต่สำหรับการใช้หน่วยความจำ


34

มีคำสั่งใดtimeบ้าง แต่รายงานสถิติมากกว่านี้ มันจะดีมากถ้าฉันสามารถทำสิ่งที่ชอบ:

$ statistics some_command
time:
    real    0m3.002s
    user    0m0.000s
    sys     0m0.000s
memory:
    min     41K
    peak    2.5M
    mean    1.1M
. . .

ถ้ามันสามารถก้าวต่อไปได้ ตอนนี้สำหรับการแก้จุดบกพร่องฉันก็จ้องมองอย่างตั้งใจที่top(จริงglances) หรือโรยงบทั้งหมดผ่านรหัสของฉัน

หากมีบางสิ่งที่ฉันสามารถส่งคำสั่งไปได้

แก้ไข

ฉันอาจได้พบวิธีแก้ไข: perfในแพ็คเกจlinux-toolsและlinux-tools-commonบน Ubuntu 12.04

$ perf stat ./someprocess
Performance counter stats for './someprocess':

      12007.384578 task-clock                #    0.996 CPUs utilized          
             1,092 context-switches          #    0.000 M/sec                  
                16 CPU-migrations            #    0.000 M/sec                  
           295,102 page-faults               #    0.025 M/sec                  
    40,553,682,299 cycles                    #    3.377 GHz                     [83.33%]
    18,400,458,723 stalled-cycles-frontend   #   45.37% frontend cycles idle    [83.35%]
     8,356,832,355 stalled-cycles-backend    #   20.61% backend  cycles idle    [66.64%]
    56,930,684,595 instructions              #    1.40  insns per cycle        
                                             #    0.32  stalled cycles per insn [83.34%]
     9,083,443,825 branches                  #  756.488 M/sec                   [83.35%]
         3,431,737 branch-misses             #    0.04% of all branches         [83.33%]

      12.051963969 seconds time elapsed

( หน้าที่ช่วยได้ )


3
ไม่มีสถิติหน่วยความจำในperfผลลัพธ์ของคุณ
BatchyX

"เหมือนเวลา แต่สำหรับความทรงจำ" ไม่สมเหตุสมผล สิ่งที่ว่าคุณต้องการที่จะรู้หรือไม่? หน่วยความจำไม่ใช่การวัด
Der Hochstapler

1
คุณต้องการตรวจสอบแอปพลิเคชันที่คุณกำลังทำอยู่หรือไม่? ถ้าเป็นเช่นนั้นในภาษาอะไร?
dset0x

คำตอบ:


28

zshมีtimeคำสั่งในตัวที่ทรงพลังกว่าbashและzshเวอร์ชันสามารถรายงานสถิติหน่วยความจำได้

แม้ว่าคุณจะไม่ได้ใช้เป็นประจำzshทุกวันคุณก็สามารถเรียกใช้ได้เมื่อคุณต้องการรวบรวมสถิติประเภทเหล่านี้

ตั้งค่าTIMEFMTตัวแปรสภาวะแวดล้อมเพื่อระบุเอาต์พุตที่คุณต้องการ นี่คือสิ่งที่ฉันมีใน.zshrcไฟล์ของฉัน(อาจจะแฟนซีเกินไป แต่ฉันชอบมัน):

TIMEFMT='%J   %U  user %S system %P cpu %*E total'$'\n'\
'avg shared (code):         %X KB'$'\n'\
'avg unshared (data/stack): %D KB'$'\n'\
'total (sum):               %K KB'$'\n'\
'max memory:                %M MB'$'\n'\
'page faults from disk:     %F'$'\n'\
'other page faults:         %R'

ตัวอย่างผลลัพธ์:

% time ls
[... the output of ls, followed by:]
ls -G   0.00s  user 0.00s system 91% cpu 0.004 total
avg shared (code):         0 KB
avg unshared (data/stack): 0 KB
total (sum):               0 KB
max memory:                668 MB
page faults from disk:     0
other page faults:         337

คำตอบของคุณช่วยฉันได้มาก แต่ฉันมีคำถาม: 'หน่วยความจำสูงสุด' เป็น MB หรือไม่ ผมเชื่อว่ามัน KB หรือแม้กระทั่งบี
แอนเดรส

ดีใจที่มันช่วย @Andres ในการทดสอบของฉัน 'หน่วยความจำสูงสุด' มีหน่วยเป็น MB แต่คุณสามารถทดสอบด้วยตัวเองโดยการรวบรวมgist.github.com/mmorearty/fa34c0f29abe454fd14bและเรียกใช้เป็น zsh ด้วยเช่นtime malloc-bytes 10000000กัน นั่นจะ malloc 10 เมกะไบต์ดังนั้นให้ลองแล้วดูว่า zsh รายงานอะไร
Mike Morearty

ตามเอกสาร zsh %Mคือหน่วยความจำสูงสุดหน่วยเป็นเมกะไบต์
gerrard00

%Mรายงานเป็นกิโลไบต์
Antti Haapala

16

เวลาของ GNUสามารถรายงานข้อมูลได้มากกว่ารุ่นที่สร้างไว้ใน Bash ใช้command timeแทนtimeการเรียกใช้และดูหน้าคนหรือข้อมูลเพื่อดูรายละเอียด


2
หรือโทร/usr/bin/time -v ./my_command.sh
ostrokach

3

จากคำตอบของ Richard คุณสามารถสร้างนามแฝงเพื่อใช้เวลา GNU และให้ข้อมูลหน่วยความจำเฉลี่ยและสูงสุด:

alias time="$(which time) -f '\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'"

หรือปรับสภาพแวดล้อมของคุณ:

export TIME='\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'

แต่โปรดทราบว่านี่จะใช้งานได้เฉพาะกับ/usr/bin/timeที่มักจะไม่ได้เรียกตามค่าเริ่มต้น

จากหน้าคน:

K ค่าเฉลี่ยการใช้หน่วยความจำทั้งหมด (ข้อมูล + สแต็ค + ข้อความ) ในหน่วยกิโลไบต์

M ขนาดชุดที่อยู่อาศัยสูงสุดของกระบวนการในช่วงอายุการใช้งานหน่วยเป็นกิโลไบต์

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