it-swarm-vi.com

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?

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?

41
ssanj

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

  • Nếu có đủ bộ nhớ và ổ đĩa dường như không quá bận rộn, thì có thể bị ràng buộc 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 IO độ trễ có vẻ cao, có khả năng nó bị ràng buộc IO. 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, iostat, oprofile, lockstat, dtrace, sản phẩm theo dõi 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.

16
Sudhanshu

hãy xem iotop, có thể hữu ích

11
ithkuil

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.

9
JanC

Cũng như các công cụ khác được đề cập, hãy 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 ở trạng thái S (ngủ), nó nằm trong một cuộc gọi hệ thống bị gián đoạn, đ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ì?

4
poolie

Chạy top và xem 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 đó là IO bị ràng buộc.

2
psusi