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?
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?
Câu trả lời:
Đ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.
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ì?