Theo dõi sử dụng CPU và bộ nhớ cho mỗi quá trình


163

Tôi nghi ngờ rằng một trong những ứng dụng của tôi ăn nhiều chu kỳ CPU hơn tôi muốn. Vấn đề là - nó xảy ra theo đợt và chỉ cần nhìn vào trình quản lý tác vụ sẽ không giúp tôi vì nó chỉ hiển thị việc sử dụng ngay lập tức.

Có cách nào (trên Windows) để theo dõi lịch sử sử dụng CPU & Bộ nhớ cho một số quy trình. Ví dụ: tôi sẽ bắt đầu theo dõi "firefox" và sau một giờ nữa sẽ thấy biểu đồ sử dụng CPU & bộ nhớ của nó trong giờ đó.

Tôi đang tìm kiếm một công cụ làm sẵn hoặc một cách lập trình để đạt được điều này.

Câu trả lời:


167

Chỉ cần gõ perfmonvào Start > Runvà nhấn enter. Khi cửa sổ Hiệu suất được mở, hãy nhấp vào dấu + để thêm bộ đếm mới vào biểu đồ. Các bộ đếm là các khía cạnh khác nhau về cách PC của bạn hoạt động và được nhóm theo sự tương tự thành các nhóm được gọi là "Đối tượng hiệu suất".

Đối với câu hỏi của bạn, bạn có thể chọn các đối tượng hiệu suất "Quá trình", "Bộ nhớ" và "Bộ xử lý". Sau đó bạn có thể thấy các quầy này trong thời gian thực

Bạn cũng có thể chỉ định tiện ích để lưu dữ liệu hiệu suất để kiểm tra sau này. Để thực hiện việc này, chọn "Nhật ký hiệu suất và cảnh báo" trong bảng điều khiển bên trái. (Nó nằm ngay dưới bảng điều khiển System Monitor cung cấp cho chúng ta các bộ đếm được đề cập ở trên. Nếu không có, hãy nhấp vào "Tệp"> "Thêm / xóa snap-in", nhấp vào Thêm và chọn "Nhật ký hiệu suất và cảnh báo" trong danh sách ".) Từ" Nhật ký hiệu suất và cảnh báo ", tạo cấu hình giám sát mới trong" Nhật ký bộ đếm ". Sau đó, bạn có thể thêm bộ đếm, chỉ định tốc độ lấy mẫu, định dạng nhật ký (văn bản nhị phân hoặc văn bản thuần) và vị trí nhật ký.


1
Khoảng thời gian lý tưởng để lấy một mẫu dữ liệu trong nhật ký truy cập là gì?
Steph Rose

8
MS rõ ràng đã thay đổi UI thành PerformanceMonitor kể từ khi bạn viết bài này. Bất cứ ý tưởng làm thế nào bạn làm điều này trong Windows 2008 R2?
Martin Brown

5
@MartinBrown - Tìm thấy cái này . Nó là tuyệt vời.
JNF

2
có ai biết làm phần thứ hai để lưu nhật ký trên vista không? Dường như không có "Nhật ký hiệu suất và cảnh báo" ở bất cứ đâu
Xitcod13

11
Nhấp chuột phải vào Bộ thu thập dữ liệu-> Người dùng xác định. Chọn Mới-> Bộ thu thập dữ liệu. Đặt tên cho nó và chọn Tạo thủ công. Nhấn tiếp. Chọn Bộ đếm hiệu suất. Nhấn tiếp. Thêm các bộ đếm hiệu suất và nhập khoảng thời gian mẫu. Sau đó, bên dưới Bộ thu thập dữ liệu, bạn nhấp chuột phải vào bộ của mình và nhấp vào "Bắt đầu". Sau một thời gian, bạn nhấp chuột phải vào bộ của bạn và nhấp vào "Dừng". Sau đó, bạn có thể tìm thấy báo cáo trong Báo cáo-> Xác định người dùng-> Bộ của bạn. Nhấp chuột phải vào biểu đồ và chọn Lưu dữ liệu dưới dạng.
Gremio

43

Process Explorer có thể hiển thị tổng thời gian CPU được thực hiện bởi một quy trình, cũng như biểu đồ lịch sử trên mỗi quy trình.


3
Vì vậy, làm thế nào bạn sẽ sử dụng nó để tìm một quá trình ngẫu nhiên bắt đầu sử dụng nhiều bộ nhớ hoặc sức mạnh bộ xử lý trong một đợt ngắn. Bạn có thể giải thích?
Xitcod13

Nhấp chuột phải vào các tiêu đề cột, chọn Chọn Cột, sau đó kiểm tra "Lịch sử CPU" trong "Hiệu suất quá trình"
Laurent

bạn có thể đặt lại về không?
Simon_Weaver

Tôi có thể đăng nhập vào một tệp tiêu thụ bộ nhớ của một PID nhất định không?
Royi

Chỉ muốn chỉ ra cho những người dùng khác: biểu đồ CPU cho mỗi quy trình chỉ bắt đầu ghi sau khi bạn mở lần đầu tiên, ngay cả khi Process Explorer đã mở, vì vậy phương pháp này hầu như vô dụng để ghi lại một sự kiện lẻ tẻ và cố gắng cô lập nó đến một quá trình duy nhất. Tôi sẽ chỉ ra rằng nếu bạn nhấp vào biểu đồ CPU hệ thống toàn cầu (bắt đầu ghi khi mở Process Explorer) và di chuột qua bất kỳ điểm nào, nó sẽ hiển thị quá trình sử dụng CPU nhiều nhất tại thời điểm đó.
SUM1

19

Sử dụng perfmon.exe, tôi đã thử sử dụng bộ đếm "Private Byte" trong bộ đếm "Process" để theo dõi việc sử dụng bộ nhớ và nó hoạt động tốt.


1
Đây là câu trả lời chính xác. Bạn cũng có thể lấy thông tin CPU trong Quá trình. Nhấp vào Process, sau đó chọn ứng dụng của bạn (Firefox trong ví dụ của bạn) trong các trường hợp của đối tượng được chọn.
Chris McCowan

11

có lẽ bạn có thể sử dụng cái này Nó sẽ làm việc cho bạn và sẽ báo cáo thời gian xử lý cho quy trình được chỉ định.

@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends:  typeperf
: Usage:  foo.cmd <processname>

set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)

:end
echo Process seems to have terminated.

7

Tôi đồng ý, perfmon.exe cho phép bạn thêm bộ đếm (nhấp chuột phải vào bảng bên phải) cho bất kỳ quy trình nào bạn muốn theo dõi.

Đối tượng hiệu suất: Kiểm tra quy trình "Chọn phiên bản từ danh sách" và chọn firefox.


1
Cảm ơn. Làm cách nào để xem lịch sử sử dụng cpu trong khoảng thời gian được xác định trước, như một giờ?
Eli Bendersky

6

WMI là Công cụ quản lý Windows và được tích hợp trong tất cả các phiên bản Windows gần đây. Nó cho phép bạn theo dõi lập trình những thứ như sử dụng CPU, I / O đĩa và sử dụng bộ nhớ.

Perfmon.exe là giao diện người dùng GUI cho giao diện này và có thể theo dõi quá trình, ghi thông tin vào nhật ký và cho phép bạn phân tích nhật ký sau khi thực tế. Đây không phải là chương trình thanh lịch nhất thế giới, nhưng nó hoàn thành công việc.


5
Về mặt kỹ thuật perfmon là một giao diện cho API Bộ đếm Hiệu suất Windows cơ bản có trước WMI trong nhiều năm. WMI cũng hiển thị API bộ đếm hiệu suất trong không gian tên của nó.
Rob Walker

2

Process Lasso được thiết kế nhiều hơn để tự động hóa quá trình và tối ưu hóa lớp ưu tiên, không phải đồ thị. Điều đó nói rằng, nó không phục vụ cho mỗi quá trình lịch sử sử dụng CPU (vẽ như một dòng trắng trên biểu đồ) nhưng nó KHÔNG cung cấp lịch sử sử dụng bộ nhớ cho mỗi quá trình.

TUYÊN BỐ TỪ CHỐI: Tôi là tác giả của Process Lasso, nhưng không thực sự chứng thực nó ở đây - vì có những giải pháp tốt hơn (perfmon là tốt nhất).

Điều tốt nhất từng có là Windows Vista + Resource and Performance Monitor. Nó có thể theo dõi việc sử dụng CPU, Bộ nhớ, Mạng và truy cập Đĩa theo các quy trình theo thời gian. Nó là một tiện ích thông tin hệ thống tổng thể tuyệt vời nên được tạo ra từ lâu. Trừ khi tôi nhầm, nó có thể theo dõi việc sử dụng CPU và bộ nhớ theo quy trình theo thời gian (trong số những thứ khác được liệt kê).


2

Bạn cũng có thể thử sử dụng tập lệnh C # / Perl / Java để lấy dữ liệu sử dụng bằng Lệnh WMI và dưới đây là các bước cho nó.

Chúng ta cần thực thi 2 WMI Chọn Truy vấn và áp dụng công thức sử dụng CPU%

1. Để lấy lại tổng số quá trình logic

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Để truy xuất các giá trị của PercentProcessorTime, TimeStamp_Sys100NS (công thức sử dụng CPU đã được áp dụng, lấy phần trăm sử dụng thực tế) và WorksetPrivate (RAM) tối thiểu 2 lần với khoảng thời gian ngủ là 1 giây

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. Áp dụng công thức sử dụng CPU%

CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

p2 đã chỉ ra PercentProcessorTime được truy xuất lần thứ hai và p1 chỉ ra PercentProcessorTime được truy xuất lần đầu tiên, t2 và t1 dành cho TimeStamp_Sys100NS.

Một mã Perl mẫu cho điều này có thể được tìm thấy trong liên kết http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-USE-perl-via-wmi/

Logic này áp dụng cho tất cả các ngôn ngữ lập trình hỗ trợ các truy vấn WMI


WMI và Powershell?
PreguntonCojoneroCabrón

2

Mặc dù tôi chưa thử nó, ProcDump có vẻ như là một giải pháp tốt hơn.

Mô tả từ trang web:

ProcDump là một tiện ích dòng lệnh với mục đích chính là giám sát một ứng dụng cho CPU tăng đột biến và tạo ra các sự cố trong quá trình tăng đột biến mà quản trị viên hoặc nhà phát triển có thể sử dụng để xác định nguyên nhân của sự tăng đột biến. ProcDump cũng bao gồm giám sát cửa sổ treo (sử dụng cùng một định nghĩa về treo cửa sổ mà Windows và Trình quản lý tác vụ sử dụng), giám sát ngoại lệ chưa được xử lý và có thể tạo các kết xuất dựa trên các giá trị của bộ đếm hiệu suất hệ thống. Nó cũng có thể phục vụ như một tiện ích kết xuất quy trình chung mà bạn có thể nhúng vào các tập lệnh khác.


1

Hmm, tôi thấy rằng Process Explorer có thể làm điều đó, mặc dù đồ thị của nó không quá thuận tiện. Vẫn đang tìm cách thay thế / tốt hơn để làm điều đó.




1

Trong Windows 10, Trình quản lý tác vụ có thể hiển thị cho bạn số giờ CPU tích lũy. Chỉ cần đi tới tab "Lịch sử ứng dụng" và "Xóa lịch sử sử dụng". Bây giờ hãy để mọi thứ chạy trong một hoặc hai giờ:

Thời gian CPU tích lũy Windows 10

Điều này KHÔNG làm là chia nhỏ việc sử dụng trong các trình duyệt theo tab. Các tab không hoạt động thường xuyên sẽ làm rất nhiều việc, với mỗi tab mở sử dụng năng lượng và làm chậm PC của bạn.


1

Có một yêu cầu để có được trạng thái và sử dụng cpu / bộ nhớ của một số máy chủ windows cụ thể. Tôi đã sử dụng kịch bản dưới đây:

Đây là một ví dụ về Dịch vụ Tìm kiếm Windows.

  $cpu = Get-WmiObject win32_processor
  $search = get-service "WSearch"
  if ($search.Status -eq 'Running')
  {
  $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'"
  $searchid = $searchmem.ProcessID
  $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  Start-Sleep -Seconds 1
  $searchcpu2 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime
  $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS
  $searchcpu = [Math]::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1)
  $searchmem = [Math]::Round($searchcpu1.WorkingSetPrivate / 1mb,1)
  Write-Host 'Service is' $search.Status', Memory consumed: '$searchmem' MB, CPU Usage: '$searchcpu' %'
  }

  else
  {
  Write-Host Service is $search.Status -BackgroundColor Red
  }

0

Tôi sử dụng taskinfo cho biểu đồ lịch sử của tốc độ CPU / RAM / IO. http://www.iarsn.com/taskinfo.html

Nhưng sự bùng nổ của sự không phản hồi, nghe có vẻ giống như thời gian bị gián đoạn do ổ đĩa HD / SS không ổn định.

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.