Làm thế nào để tìm (các) quá trình đang ăn cắp máy


8

Kịch bản: Đột nhiên, máy tính của tôi cảm thấy chậm chạp. Chuột di chuyển nhưng cửa sổ mất nhiều thời gian để mở, v.v. uptimecho biết tải là 7,69 và tăng.

Cách nhanh nhất để tìm ra quá trình nào là nguyên nhân của tải?

Bây giờ, "công cụ hàng đầu" và các công cụ tương tự không phải là câu trả lời vì chúng hiển thị mức sử dụng CPU hoặc bộ nhớ nhưng không phải cả hai cùng một lúc. Những gì tôi cần là một lệnh duy nhất mà tôi có thể gõ khi nó xảy ra - thứ gì đó sẽ tìm ra bất kỳ

Hệ thống đang cố gắng trao đổi 8GB RAM sang đĩa vì quá trình X ...

hoặc là

process X tìm kiếm tất cả trên đĩa

hoặc là

tiến trình X sử dụng 400% CPU "

Vì vậy, những gì tôi đang tìm kiếm là i bổ sung, htop / atop và các công cụ tương tự chạy thành một với đầu ra như thế này:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Tôi không muốn một công cụ cung cấp cho tôi một số con số mà tôi có thể phân tích nhưng một công cụ cho tôi biết chính xác quá trình nào gây ra tải hiện tại. Giả sử rằng người dùng trước bàn phím hầu như không biết cách viết "quy trình", nhưng người dùng nhanh chóng bị choáng ngợp khi nói đến "kích thước lưu trú", "bộ nhớ ảo" hoặc "vòng đời xử lý".

Đối số của tôi diễn ra như sau: Một người dùng nhận thấy một vấn đề. Có thể có hàng ngàn lý do ... tốt, gần như :-) Người dùng muốn biết nguồn gốc của vấn đề.

Các giải pháp hiện tại cung cấp cho tôi rất nhiều số và tôi cần biết những con số này có ý nghĩa gì. Những gì tôi đang tìm kiếm là một công cụ meta. 99% dữ liệu không liên quan đến vấn đề. Vì vậy, những gì công cụ nên làm là tìm kiếm các quy trình tích trữ một số tài nguyên và chỉ liệt kê những quy trình cùng với "quá trình này cần rất nhiều CPU, điều này tạo ra nhiều IRQ, quá trình này phân bổ rất nhiều RAM (và nó vẫn đang phát triển)".

Đây sẽ là một danh sách tương đối ngắn. Sẽ đơn giản hơn nhiều đối với người mới biết điều này để xác định thủ phạm từ danh sách này so với đầu ra của, htopcho tôi khoảng 5000 số nhưng yêu cầu tôi phải tự gấp các quy trình đa luồng (tôi có 50 dòng nói VIRT 2750Mnhưng Chỉ có 16 GB RAM - máy phải tự đổi chỗ cho đến chết nhưng tất nhiên, đây là sự giải thích sai về dữ liệu có thể xảy ra nhanh chóng).


Tôi không hiểu tại sao. Các triệu chứng mà bạn mô tả không phải là các thùng rác (sẽ không ảnh hưởng đến chuột). Chuột chậm chạp là CPU cổ điển ở công suất tối đa.
soandos

1
Đây chỉ là một ví dụ. Hãy dùng nó với một hạt muối. Hãy tưởng tượng một noob đang ngồi trước máy tính không biết gì. Làm thế nào anh ta có thể tìm ra một cách dễ dàng nhất những gì đang diễn ra (nghĩa là không mất nửa giờ để tìm hiểu xem đầu ra của topphương tiện là gì)
Aaron Digulla

Bạn đang tìm kiếm một linux tương đương với trình quản lý tác vụ với gui và mọi thứ, hoặc một cái gì khác?
soandos

Tôi tìm kiếm thứ gì đó mà tôi chạy và thông báo "Quá trình X đang ăn cắp máy".
Aaron Digulla

Câu trả lời:


2

Tôi phải mỉm cười với các câu trả lời vì mỗi người bảo bạn chạy công cụ X. Vấn đề duy nhất là nếu những gì bạn nhìn thấy không liên tục thì sẽ không có cách nào tương quan. Một công cụ như sar có thể giúp đỡ nếu bạn chạy nó với tần suất đủ cao, nhưng tôi khẳng định colll thậm chí còn tốt hơn.

Giống như sar , bạn chạy nó như một daemon bằng cách cài đặt RPM và thực hiện /etc/init.d/collectl start.

Bây giờ khi bạn thấy một cái gì đó chậm chạp, collectl -p /var/log/collectl/filename --topsẽ phát lại dữ liệu và hiển thị cho bạn các quy trình hàng đầu. Bạn cũng có thể chạy collectl --topvà nhìn thấy chúng trong thời gian thực. BTW - bất cứ điều gì bạn có thể làm trong thời gian thực, bạn cũng có thể phát lại.

Đối với tải CPU, điều gì sẽ xảy ra nếu bạn bị quá tải với các ngắt? collectl -sCsẽ không chỉ hiển thị tải trên các CPU riêng lẻ (hoặc sử dụng -sccho tải trung bình), nó sẽ hiển thị cách chúng sử dụng thời gian của chúng. Bao gồm -j( -scj) và bạn sẽ thấy số lượng ngắt / CPU. Sử dụng chữ hoa -Jvà bạn sẽ thấy CÁC LOẠI của từng ngắt / CPU.

Tất nhiên, nếu bạn thực sự thích vmstat, bạn luôn có thể phát lại dữ liệu thu thập với --vmstatvà nó sẽ hiển thị dữ liệu lịch sử ở định dạng vmstat.

Có nhiều công tắc hơn tôi có thời gian để liệt kê, nhưng bạn có thể kiểm tra nó tại SourceForge hoặc chỉ cần google nó.


Cảm ơn; đây không phải là chính xác những gì tôi đang tìm kiếm nhưng ít nhất nó là một điểm khởi đầu tốt.
Aaron Digulla

Công cụ tuyệt vời! Và trên Ubuntu (ít nhất là từ ngày 12.04), bạn chỉ cần cài đặt gói - nó tự động khởi động trình nền khi cài đặt và khởi động lại sau đó :)
nealmcb

6

"Top" hoạt động hợp lý tốt, miễn là bạn nhìn đúng số. Hãy xem:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Bây giờ, nếu hệ thống chậm vì CPU đã bị lấy hết, nó sẽ hiển thị dưới dạng cột "chúng tôi" và "sy" trên hàng "Cpu (s):" gần nhau 100%.

Nếu nó chậm do hoán đổi, "Mem:" "miễn phí" hiển thị các giá trị rất thấp và "Hoán đổi:" "đã sử dụng" các giá trị cao.

Nếu nó chậm do I / O nói chung, thì "Cpu (s):" "wa" cho biết rằng thời gian dành cho I / O chờ đợi.

Bây giờ, nếu bạn biết I / O chờ đợi là vấn đề, bạn có thể sử dụng các chương trình "iotop" để biết quy trình nào tạo ra hầu hết I / O.


+1 Nhưng tôi đang tìm kiếm một công cụ phân tích này cho tôi và in quy trình cùng với một số thông tin có gì sai. Tôi không muốn thu thập điều đó từ các số liệu "thô". Có gì không
Aaron Digulla

1
Tôi xin lỗi, nhưng bạn không thể giải quyết các vấn đề như chậm máy mà không hiểu ở mức độ cơ bản, sự khác biệt giữa các loại chậm khác nhau. Nếu những công cụ như vậy tồn tại, tôi không biết về chúng; rất có thể bạn cần một quản trị viên / nhân viên phục vụ có khả năng.
Zds

Sẽ thật tuyệt nếu một công cụ như vậy tồn tại bởi vì chắc chắn có thể xác định điều này một cách tự động: Nếu tôi có thể nói từ đầu ra top, thì máy tính cũng vậy. Đây không phải là nụ cười của Mona Lisa, nó chỉ đang nghiền nát một số con số để tìm ra những con số "xấu".
Aaron Digulla

2

Dựa trên mức sử dụng 400%, tôi sẽ cho rằng bạn có bộ xử lý lõi tứ. Tải trung bình của bạn gần gấp đôi công suất và một nửa số quy trình đang chờ CPU.

Đầu tiên, reniceshell của bạn về 0 hoặc -10 để có được một hệ thống nhạy hơn, sau đó sử dụng htopđể tìm (các) quá trình vi phạm và thực hiện theo stracequy trình nhất định. Các công cụ khác có thể hữu ích là:

  • vmsat
  • sar
  • iostat
  • pmap

1

Một con chuột chậm chạp cũng có thể là do tải quá gián đoạn hoặc bộ điều khiển USB rất bận (tôi cho rằng đó là chuột USB).


Bất kỳ công cụ nào cho tôi biết trình điều khiển / thành phần nào gây ra tải IRQ cao?
Aaron Digulla

1

vmstat có thể giúp bạn về mặt nói chung. Một ví dụ về sử dụng là:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Bạn cũng có thể chạy nó sau mỗi X giây - chỉ cần thêm số X sau lệnh.

Chỉnh sửa: Theo quan điểm của bình luận ... Viết phần sau vào một tệp và làm cho tệp đó có thể thực thi được. Nó sẽ cho bạn biết 3 quy trình hàng đầu trên máy.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Nếu bạn muốn biết bộ nhớ nào bị thay thế so với CPU, thì hãy đọc trang man trên cùng và thay đổi thứ tự hiển thị.


Tôi đang tìm kiếm một cái gì đó cao cấp hơn. Nó nên chạy vmstat và phân tích các số cho tôi, vì vậy tôi không cần phải biết "cs" nghĩa là gì và liệu một "cs" lớn là "tốt" hay "xấu".
Aaron Digulla
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.