Có bất kỳ lệnh nào như thời gian, nhưng để sử dụng bộ nhớ?


34

Có lệnh nào giống như time, nhưng báo cáo số liệu thống kê nhiều hơn? Sẽ thật tuyệt nếu tôi có thể làm một cái gì đó như:

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

Nếu nó có thể đi xa hơn nữa, điều đó sẽ rất tuyệt. Ngay bây giờ, để gỡ lỗi, cuối cùng tôi sẽ nhìn chăm chú vào top(thực sự glances), hoặc rắc tất cả các câu lệnh thông qua mã của tôi.

Nếu có thứ gì đó mà tôi có thể truyền lệnh, điều đó thật tuyệt vời.

CHỈNH SỬA

Tôi có thể đã tìm thấy một giải pháp: perftrong gói linux-toolslinux-tools-commontrên 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

( Trang này đã giúp. )


3
Không có số liệu thống kê bộ nhớ trong perfkết quả của bạn .
BatchyX

"Giống như thời gian nhưng đối với trí nhớ" không thực sự có ý nghĩa. Có gì chính xác bạn có muốn biết không? Bộ nhớ không phải là phép đo.
Der Hochstapler

1
Bạn đang muốn kiểm toán một ứng dụng mà bạn đang làm? Nếu vậy, bằng ngôn ngữ nào?
dset0x

Câu trả lời:


28

zshcó một timelệnh tích hợp mạnh hơn so với bashcó và zshphiên bản có thể báo cáo thống kê bộ nhớ.

Ngay cả khi bạn không thường xuyên sử dụng zshlàm vỏ hàng ngày của mình, bạn vẫn có thể chạy nó khi bạn cần thu thập các loại thống kê này.

Đặt TIMEFMTbiến môi trường để chỉ ra đầu ra bạn muốn. Đây là những gì tôi có trong .zshrctập tin của mình (có lẽ hơi lạ mắt, nhưng tôi thích nó):

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'

Đầu ra mẫu:

% 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

Câu trả lời của bạn đã giúp tôi rất nhiều nhưng tôi có một câu hỏi: 'Bộ nhớ tối đa' có tính bằng MB không? Tôi tin rằng đó là KB hoặc thậm chí B.
Andres

Rất vui vì nó đã giúp, @Andres. Trong các thử nghiệm của tôi, 'bộ nhớ tối đa' có trong MB, nhưng bạn có thể tự kiểm tra nó bằng cách biên dịch gist.github.com/mmorearty/fa34c0f29abe454fd14b và chạy nó trong zsh với ví dụ time malloc-bytes 10000000. Điều đó sẽ malloc 10 megabyte, vì vậy hãy thử nó và sau đó xem những gì zsh báo cáo.
Mike Morearty

Theo tài liệu zsh %M là bộ nhớ tối đa tính bằng megabyte.
gerrard00

%Mbáo cáo bằng kilobyte
Antti Haapala

16

Thời gian GNU có thể báo cáo nhiều thông tin hơn một chút so với phiên bản được tích hợp trong Bash; sử dụng command timethay vì chỉ timeđể gọi nó và xem trang hướng dẫn hoặc thông tin để biết chi tiết.


2
Hoặc gọi/usr/bin/time -v ./my_command.sh
Ostrokach

3

Dựa trên câu trả lời của Richard, bạn có thể tạo bí danh để sử dụng thời gian GNU và cung cấp thông tin bộ nhớ trung bình và tối đa:

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

hoặc điều chỉnh môi trường của bạn:

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

Nhưng hãy lưu ý rằng điều này chỉ hoạt động /usr/bin/timemà thường không được gọi theo mặc định.

Từ trang người đàn ông:

K Tổng số trung bình (dữ liệu + ngăn xếp + văn bản) sử dụng bộ nhớ của quá trình, tính bằng Kilobytes.

M Kích thước tập hợp cư dân tối đa của quá trình trong suốt vòng đời của nó, tính bằng Kilobytes.

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.