2011-01-28 38 views
8

Ứng dụng top ở đâu có dữ liệu trên Linux? Tôi sẽ quan tâm đến dữ liệu tải/pid CPU thời gian thực (tôi đã đọc tất cả tài liệu trong/proc/pid man page, nhưng thông tin không có ở đó).nơi đầu trang nhận dữ liệu thời gian thực

Pid là jboss. Tôi cần dữ liệu nhẹ (để được xuất dễ dàng).

+0

Tải là chỉ số trên toàn hệ thống, không phải là số liệu quy trình. Bạn có nghĩa là quá trình sử dụng CPU? –

+0

bạn có chắc chắn thông tin không có ở đó không? 'find/proc/1' chẳng hạn, có rất nhiều thứ, bạn đã trải qua tất cả? –

+0

Tôi đã đi qua tất cả :) – Mark

Trả lời

4

Như ghi nhận ở proc(5), trong file /proc/(pid)/stat bạn có các lĩnh vực:

utime %lu 

Lượng thời gian đó quá trình này đã được lên kế hoạch trong chế độ người dùng , đo bằng đồng hồ ve (chia cho sysconf (_SC_CLK_TCK) này bao gồm thời gian khách, guest_time (thời gian dành một CPU ảo, xem bên dưới), để các ứng dụng là không nhận thức được trường thời gian của khách làm không mất thời gian đó từ các tính toán của chúng.

stime %lu 

Lượng thời gian đó quá trình này đã được lên kế hoạch trong kernel mode , đo bằng đồng hồ bọ ve (chia bởi sysconf (_SC_CLK_TCK).

Để có được sử dụng CPU cho một quá trình cụ thể, sử dụng các trường đó, quá trình làm phong phú sẽ tổng hợp việc sử dụng CPU trên tất cả các chủ đề, cho một phân tích theo chủ đề, bạn có thể tìm thấy các chủ đề khác trong /proc/(pid)/task.

Nếu bạn muốn được thông báo khi C Thời gian PU vượt quá ngưỡng nào đó, bạn có thể sử dụng clock_getcpuclockid để xử lý đồng hồ thời gian cpu của nó, sau đó timer_create hoặc timerfd để được thông báo khi nó đạt đến một mức được chỉ định. Tuy nhiên, lưu ý rằng các bộ đếm thời gian cputime xử lý chéo là một tính năng tùy chọn trong đặc tả POSIX và có thể không được hỗ trợ (tôi chưa thử nghiệm).

+0

thực sự tôi tin "ps -Lp (pid) opcpu "tổng hợp tất cả các chủ đề, phải không? Thật không may ps chỉ cung cấp các ảnh chụp nhanh của tải cpu/thread đó (nó không thể được sử dụng trong giám sát thời gian thực), và tập hợp trong bash script tất cả 300 luồng trong jboss đó, bởi "cat" -ing tất cả các tập tin cụ thể cho điều đó trẻ em pids nó trông loại không đáng tin cậy. – Mark

+0

@Xander, sau khi kiểm tra, nó chỉ ra quá trình toplevel tổng hợp trên tất cả các chủ đề. Vì vậy, bạn chỉ có thể sử dụng tập tin stat để theo dõi. Tôi cũng đã thêm một số ghi chú trên clock_getcpuclockid, điều này cũng có thể hữu ích. – bdonlan

11

Nếu nghi ngờ, hãy sử dụng strace (1)!

open("/proc/2/stat", O_RDONLY) = 4 
open("/proc/2/statm", O_RDONLY) = 4 
open("/proc/3/stat", O_RDONLY) = 4 
open("/proc/3/statm", O_RDONLY) = 4 
+0

hi, cảm ơn cho gợi ý strace! Thật tuyệt vời. vấn đề duy nhất là sau một bãi strace tôi không thể có được nơi nó thực sự viết cho stdout tải CPU (vì phân tích các tập tin bạn đề nghị tôi could't tìm thấy những gì tôi đã tìm kiếm ...) – Mark

Các vấn đề liên quan