2012-01-03 29 views

Trả lời

111

Để lọc đầu ra top theo tên quy trình, bạn có thể sử dụng pgrep để nhận danh sách PID bằng tên quá trình, sau đó chuyển chúng sang -p tùy chọn top. Ví dụ:

top -p $(pgrep -d',' http) 

Lưu ý: tùy chọn -d',' delimits PID bằng dấu phẩy, đó là những gì được mong đợi bởi top -p. Lưu ý 2: top sẽ trả về thông báo lỗi nếu không có quy trình chạy khớp với tên bạn chỉ định trong pgrep.

Để ghi kết quả top vào một tệp, hãy sử dụng tùy chọn -n 1 (chỉ một lần lặp) và chuyển hướng đầu ra tới tệp nhật ký của bạn.

top -p $(pgrep -d',' http) -n 1 >> your_log_file 

Để làm điều đó mỗi giây, có lẽ một vòng lặp while với một sleep sẽ làm gì?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done 

Để đánh dấu thời gian mỗi mục, bạn có thể thêm đầu ra của date. Ví dụ.

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done 
+0

Cảm ơn Shawn, cách đăng nhập ngày & giờ trong mỗi 1 giây. Vì vậy, nó sẽ giúp tôi cách ly vào thời điểm nào và lượng CPU được sử dụng theo quy trình cụ thể. – BalaB

+0

@bala xem các cập nhật trong câu trả lời. –

+0

Thanh lịch và rất hữu ích. Cảm ơn! –

5

lựa chọn khác là:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • Các tùy chọn -d cho phép để thiết lập tần số được sử dụng bởi hàng đầu để làm mới dữ liệu .
  • Tùy chọn -b có nghĩa là giao diện truyền thống ở trên cùng là không được sử dụng. Thay vào đó, nó sẽ gửi mọi thứ đến đầu ra tiêu chuẩn và sau đó bạn có thể sử dụng một đường ống (|) hoặc một chuyển hướng (>).
  • Tùy chọn -n thông báo về số lần lặp lại sẽ thực thi.

Sau đó bạn có thể gõ:

cat log.txt | grep USER_OF_PROCESS 

Bạn sẽ thấy thời gian thực hiện quá trình này và cũng% CPU, bộ nhớ và tất cả những gì.

2
#You can run following script as ./cpurecorder.sh pid filename 
#It will generate output file with memory usage and cpu utilisation. 
#You can log other variable by searching man for ps. 

`enter code here`filepath=/home/rtcsadm    # modify as desired 
interval=20       # reports per minute 
timelimit=6000      # how long to run, in seconds 

mydate=`date "+%H:%M:%S"`   # the timestamp 
freq=$((60/$interval))    # for sleep function 

while [ "$SECONDS" -le "$timelimit" ] ; do 
    ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt 
    sleep 3 
    mydate=`date "+%H:%M:%S"` 
done 
Các vấn đề liên quan