Làm cách nào để biết liệu một tiến trình có bị ràng buộc bởi CPU, Bộ nhớ hoặc Đĩa không?


42

Làm cách nào để biết liệu một tiến trình có bị ràng buộc với CPU, Bộ nhớ hoặc Đĩa không?


Nếu bạn đang sử dụng GUI gnome, bạn có thể thêm applet System Monitor vào bảng điều khiển của mình. Trong cài đặt, bạn có thể đặt các chu kỳ bị mất thành IO-Wait để hiển thị dưới dạng màu trắng và đặt biểu đồ Đọc / Ghi đĩa, CPU và Đĩa. Tôi thường thay đổi màu biểu đồ mặc định để dễ phân biệt bộ nhớ người dùng / hệ điều hành và đọc / ghi đĩa. Đây không phải là một giải pháp thực sự, nhưng thật tiện lợi khi có bên cạnh tất cả các công cụ được đề cập trong các câu trả lời.
Jeremy

1
@ luis-alvarado Tôi không đồng ý rằng câu hỏi này không hữu ích, mặc dù tôi cho rằng câu hỏi này có thể phù hợp hơn với StackOverflow hoặc tương tự. Tôi đến đây để tìm kiếm một giải pháp.
xiên

Vấn đề với câu hỏi như đã hỏi là nó không tính đến môi trường thực thi. Phương pháp nào hiệu quả nhất trong việc khám phá nút thắt thành phần máy chủ của công việc / quy trình được liên kết chặt chẽ với thời gian chạy, môi trường thực thi, hệ điều hành máy chủ, phần cứng, v.v. của công việc và công cụ nào có sẵn cho mỗi thành phần để kiểm tra nó. Một số thời gian chạy (ví dụ: thời gian chạy Erlang hoặc JVM của IBM) có các công cụ chuyên sâu cho việc này hơn là bao trùm toàn bộ môi trường, một số khác hoàn toàn thiếu công cụ và khiến bạn đưa ra những phỏng đoán dựa trên bất cứ điều gì htop / iotop / v.v. có thể chỉ cho bạn
zxq9

Câu trả lời:


19

Điều đó đòi hỏi một số voodoo. Nó phụ thuộc. Thí dụ:

  • Nếu có đủ bộ nhớ và đĩa không quá bận, nó có thể bị giới hạn bởi CPU. Nhìn vào mức độ sử dụng CPU và nếu nó giáp với 100% thì CPU bị ràng buộc. Nếu nó không có một nút cổ chai nhân tạo trong việc thực hiện. Ví dụ, trên CPU lõi kép, một quy trình xử lý đơn sẽ không vượt quá mức sử dụng CPU 50%.

  • Nếu CPU và bộ nhớ khả dụng, nhưng các ổ đĩa rất bận hoặc độ trễ IO có vẻ cao, có khả năng IO của nó bị ràng buộc. Xem nếu thêm nhiều đĩa (RAID?) Giúp.

  • Không có cái nào ở trên? Kiểm tra bộ nhớ có sẵn.

  • Đủ bộ nhớ? Có thể có một nút cổ chai nhân tạo trong chính quá trình, tức là có thể ai đó quên xóa giấc ngủ (1)? Naah nó không dễ dàng thường. ;)

Có một lý do tại sao chúng tôi có cả một phòng thí nghiệm cho các kỹ sư hiệu suất ở hầu hết các công ty xử lý các sản phẩm nhạy cảm hiệu suất!

Sử dụng các công cụ như sar, vmstat, i điều chỉnh, oprofile, lockstat, dtrace, các công cụ giám sát hoàn hảo cụ thể của sản phẩm, v.v., để gỡ lỗi các vấn đề hoàn hảo.


2
Có một công cụ liên kết tất cả những điều này với nhau?
ssanj

thường là không, nhưng nếu dtrace có sẵn trên hệ thống của bạn (Solaris / FreeBSD / Mac OS X?) thì bạn có thể đi xa chỉ bằng cách sử dụng nó.
Sudhanshu

Tôi chỉ nhớ có Systemtap trên linux (tương tự như dtrace), ngoại trừ tôi không chắc về sự trưởng thành của công cụ.
Sudhanshu

vmstat là hữu ích.
James

12

kiểm tra iotop, có thể hữu ích


iotop không được cài đặt theo mặc định trong redhat
Mona Jalal

9

Một công cụ có thể hữu ích để kiểm tra thời gian thực một số thống kê quy trình (bộ nhớ, sử dụng cpu, I / O, v.v.) là htop . Nó không thay thế các công cụ chuyên dụng hơn được đặt tên bởi Sudhanshu, nhưng có thể là một khởi đầu tốt.


4

Cũng như các công cụ khác được đề cập, chạy ps l PID, chèn id tiến trình có liên quan hoặc xem các cột STATE và WCHAN ở trên cùng hoặc htop.

Nếu nó ở trạng thái D (cho đĩa), thì nó đang thực hiện tệp IO. Điều này có thể là do nó đọc rất nhiều tệp hoặc vì nó sử dụng nhiều bộ nhớ và trao đổi. Cột WCHAN sẽ cho bạn biết chức năng hạt nhân bên trong; googling cho họ hoặc hỏi ở đây có thể cung cấp cho bạn một số chỉ dẫn về ý nghĩa của chúng.

Nếu nó ở trạng thái R (chạy), thì nó đang sử dụng CPU trong không gian người dùng, nói cách khác, đó là CPU bị ràng buộc tại thời điểm đó.

Nếu nó ở trạng thái S (ngủ), thì nó nằm trong một cuộc gọi hệ thống ngắt, điều đó có nghĩa là nó thực sự đang ngủ hoặc nó đang làm gì đó như chờ lưu lượng truy cập mạng hoặc khóa. Một lần nữa, nhìn vào wchan cụ thể sẽ cho bạn biết nhiều hơn.

Xem thêm "Kênh chờ" của một quá trình là gì?


2

Chạy topvà nhìn vào dòng sử dụng cpu. Một% người dùng cao chỉ ra rằng nó bị ràng buộc cpu. % Chờ đợi cao chỉ ra rằng nó bị ràng buộc IO.

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.