Điều đó có nghĩa chính xác là gì khi một quy trình Thời gian trực tuyến đã dừng lại ở đầu?


11

Tôi sẽ xem xét lý do tại sao chúng tôi nhận được thông báo hoán đổi quan trọng và tôi sẽ tìm thấy một cái gì đó như:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
14683 user1     30  10 16.0g 772m  744 S  0.3  0.3 277:24.87 6.5g MATLAB
14576 user1     30  10 8125m 1.1g  736 S  0.3  0.4 261:16.73 4.1g MATLAB

trong đó cột TIME + được đóng băng cho các quy trình đó.

Câu hỏi của tôi là, ở trên, điều này có nghĩa là gì?

Theo tôi hiểu, thời gian dừng lại có nghĩa là đó là một quá trình không hoạt động / không được CPU xử lý. Tuy nhiên, ví dụ trên cho thấy việc sử dụng CPU 0,3%, vì vậy mặc dù thực tế là nó rất nhỏ, cột thời gian có nên tiếp tục tăng không?

Các quá trình này đã "kết thúc" chưa? Trong trường hợp nào, làm thế nào họ được làm sạch? Có phải người dùng đã bắt đầu họ cần phải thừa nhận chúng hoặc một cái gì đó để những tài nguyên đó được giải phóng?


1
Ở mức 0,3%, tức là 1 centi-giây cứ sau 3/4 giây. Bạn đã đợi đủ lâu chưa?
Stéphane Chazelas

1
Mặc khải tâm trí: tăng thời gian được tính bằng tỷ lệ phần trăm của việc sử dụng CPU? Ồ Vậy nếu là CPU 100%, điều đó sẽ bằng thời gian thực?
CptSupermrkt

5
TIME là thời gian tích lũy mà CPU (bất kỳ CPU) đã dành để chạy bất kỳ luồng nào trong quy trình kể từ khi nó được khởi động. Vì vậy, nó thậm chí có thể đi nhanh hơn thời gian thực nếu bạn có một số lõi CPU và quá trình này là đa luồng.
Stéphane Chazelas

Câu trả lời:


10

Nếu bạn điều hành một công việc giả mạo như sleep 120sau đó xem nó, htopbạn sẽ nhận thấy trạng thái của nó là S"SLEEP" và các quy trình TIMEvẫn duy trì ở mức 0: 00.00 trong suốt thời gian.

Đó là bởi vì quá trình đó đang tiêu tốn 0 thời gian CPU, đó là mục đích của TIMEcột. Nó theo dõi lượng thời gian CPU mà một quy trình đã cho đã sử dụng.

              ss # 1

Số lượng này có thể gây nhầm lẫn đôi khi nếu một quá trình có thể chạy trên nhiều lõi CPU, vì nó dường như có thể tiêu tốn nhiều thời gian hơn mức có sẵn. Tất cả những gì đang diễn ra là nếu bạn có số lõi X, thì thời gian của bạn có thể hiển thị là X * TIME.


4

Lý do bạn có thể có sự chênh lệch như vậy là vì cột TIME + không ảnh hưởng đến thời gian CPU được sử dụng bởi những đứa trẻ sinh ra đã chết của quy trình được liệt kê .. Vì vậy, tôi sẽ tưởng tượng các dòng bạn hiển thị cho biết một ứng dụng (có thể, nhanh chóng) sinh ra những đứa trẻ sắp chết gần như ngay lập tức ..

So, the CPU usage is due to spawned children which do not count in the TIME+ column. Bạn có thể thay đổi hàng đầu để thực hiện thời gian tích lũy thông qua công tắc 'S'.

Nhưng tôi nghĩ rằng bạn đang xem xét các chỉ số sai cho những gì bạn đang tìm cách điều tra.

strace -p <pid> là bạn của bạn ở đây, và sẽ cho phép bạn xem qua quy trình đang chạy và chính xác nó đang làm gì.

Strace có vô số lựa chọn. Một số tùy chọn đáng chú ý bao gồm -f, -ff, -i, v, v.v. Strace là một công cụ hữu ích nhất, vì vậy tốt nhất bạn nên tự man stracetìm kiếm các tùy chọn mà nó cung cấp cho bạn để khắc phục sự cố như thế này

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.