2009-01-28 25 views
88

Nếu tôi sử dụng "trên cùng", tôi có thể xem CPU nào đang bận và quá trình nào đang sử dụng tất cả CPU của tôi.Quy trình nào đang sử dụng tất cả đĩa của tôi IO

Nếu tôi sử dụng "iostat -x", tôi có thể xem ổ đĩa nào đang bận.

Nhưng làm cách nào để xem quy trình nào đang sử dụng tất cả thông lượng của ổ đĩa?

+2

Vâng, về mặt kỹ thuật cũng đúng đối với Linux, vì người dùng chỉ xử lý các trang trong bộ đệm trang ...;) – Damon

+0

Chỉ câu hỏi tôi có và câu trả lời tôi đang tìm nhưng không phù hợp với câu hỏi này tốt hơn ở SuperUser? –

+0

Và đây là lý do tại sao Linux kém hơn so với Solaris và MacOS vì chúng có dtrace được xây dựng để làm cho việc tìm kiếm này đơn giản: -/ –

Trả lời

134

Bạn đang tìm kiếm iotop (giả sử bạn có hạt nhân> 2.6.20 và Python 2.5). Không có điều đó, bạn đang tìm kiếm vào hooking vào hệ thống tập tin. Tôi đề nghị trước đây.

+0

http://articles.slicehost.com/2010/11/12/using-iotop-to-check-io-and-swap –

+1

'iotop' dường như hiển thị băng thông I/O thay vì số IOPS được tiêu thụ bởi quy trình. Đây không phải là siêu liên quan. Một quá trình thực hiện rất nhiều ghi nhỏ + đồng bộ sẽ tiêu thụ nhiều dung lượng IO của đĩa hơn là một quá trình viết một loạt dữ liệu liền kề lớn ở tốc độ cao. – arnaud576875

0

Bạn đã xem lsof (liệt kê các tệp đang mở) chưa?

+2

chỉ hiển thị các xử lý mở, chứ không phải MB/s cho mỗi tệp. iotop làm điều đó. – oligofren

9

Để tìm hiểu xem những tiến trình trong trạng thái 'D' (chờ đợi phản ứng đĩa) hiện đang chạy:

while true; do date; ps aux | awk '{if($8=="D") print $0;}'; sleep 1; done

hoặc

watch -n1 -d "ps axu | awk '{if (\$8==\"D\") {print \$0}}'"

Wed Aug 29 13:00:46 CLT 2012 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:00:47 CLT 2012 
Wed Aug 29 13:00:48 CLT 2012 
Wed Aug 29 13:00:49 CLT 2012 
Wed Aug 29 13:00:50 CLT 2012 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:00:51 CLT 2012 
Wed Aug 29 13:00:52 CLT 2012 
Wed Aug 29 13:00:53 CLT 2012 
Wed Aug 29 13:00:55 CLT 2012 
Wed Aug 29 13:00:56 CLT 2012 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:00:57 CLT 2012 
root  302 0.0 0.0  0  0 ?  D May28 3:07 \_ [kdmflush] 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:00:58 CLT 2012 
root  302 0.0 0.0  0  0 ?  D May28 3:07 \_ [kdmflush] 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:00:59 CLT 2012 
root  302 0.0 0.0  0  0 ?  D May28 3:07 \_ [kdmflush] 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:01:00 CLT 2012 
root  302 0.0 0.0  0  0 ?  D May28 3:07 \_ [kdmflush] 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:01:01 CLT 2012 
root  302 0.0 0.0  0  0 ?  D May28 3:07 \_ [kdmflush] 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 
Wed Aug 29 13:01:02 CLT 2012 
Wed Aug 29 13:01:03 CLT 2012 
root  321 0.0 0.0  0  0 ?  D May28 4:25 \_ [jbd2/dm-0-8] 

Như bạn có thể nhìn thấy từ kết quả, jdb2/dm-0-8 (quá trình ghi nhật ký ext4) và kdmflush liên tục chặn Linux của bạn.

Để biết thêm chi tiết URL này có thể hữu ích: Linux Wait-IO Problem

+1

không hoạt động đối với tôi RHEL5.5 Bash 3.2.25 (1) -release –

1

cho Người dùng KDE, bạn có thể sử dụng 'ctrl-esc' đầu gọi lên một màn hình hệ thống actrivity và có tôi hoạt động/O bảng xếp hạng với id quá trình và tên.

Tôi không có quyền tải lên hình ảnh, do 'trạng thái người dùng mới' nhưng bạn có thể xem hình ảnh bên dưới. Nó có một cột để đọc và ghi IO.

6

atop cũng hoạt động tốt và cài đặt một cách dễ dàng ngay cả trên hệ thống CentOS 5.x cũ mà không thể chạy iotop. Nhấn d để hiển thị chi tiết đĩa, ? để được trợ giúp.

ATOP - mybox       2014/09/08 15:26:00       ------       10s elapsed 
PRC | sys 0.33s | user 1.08s |    | #proc 161 | #zombie 0 | clones 31 |    | #exit   16 | 
CPU | sys 4% | user  11% | irq  0% | idle 306% | wait  79% |    | steal  1% | guest  0% | 
cpu | sys 2% | user  8% | irq  0% | idle  11% | cpu000 w 78% |    | steal  0% | guest  0% | 
cpu | sys 1% | user  1% | irq  0% | idle  98% | cpu001 w 0% |    | steal  0% | guest  0% | 
cpu | sys 1% | user  1% | irq  0% | idle  99% | cpu003 w 0% |    | steal  0% | guest  0% | 
cpu | sys 0% | user  1% | irq  0% | idle  99% | cpu002 w 0% |    | steal  0% | guest  0% | 
CPL | avg1 2.09 | avg5 2.09 | avg15 2.09 |    | csw 54184 | intr 33581 |    | numcpu  4 | 
MEM | tot  8.0G | free 81.9M | cache 2.9G | dirty 0.8M | buff 174.7M | slab 305.0M |    |    | 
SWP | tot  2.0G | free 2.0G |    |    |    |    | vmcom 8.4G | vmlim 6.0G | 
LVM | Group00-root | busy  85% | read  0 | write 30658 | KiB/w  4 | MBr/s 0.00 | MBw/s 11.98 | avio 0.28 ms | 
DSK |   xvdb | busy  85% | read  0 | write 23706 | KiB/w  5 | MBr/s 0.00 | MBw/s 11.97 | avio 0.36 ms | 
NET | transport | tcpi 2705 | tcpo 2008 | udpi  36 | udpo  43 | tcpao  14 | tcppo  45 | tcprs  1 | 
NET | network  | ipi  2788 | ipo  2072 | ipfrw  0 | deliv 2768 |    | icmpi  7 | icmpo  20 | 
NET | eth0 ---- | pcki 2344 | pcko 1623 | si 1455 Kbps | so 781 Kbps | erri  0 | erro  0 | drpo  0 | 
NET | lo  ---- | pcki  423 | pcko  423 | si 88 Kbps | so 88 Kbps | erri   0 | erro  0 | drpo  0 | 
NET | eth1 ---- | pcki 22 | pcko  26 | si 3 Kbps | so 5 Kbps | erri  0 | erro  0 | drpo  0 | 

    PID     RDDSK     WRDSK     WCANCL     DSK     CMD  1/1 
9862      0K     53124K      0K     98%     java 
    358      0K      636K      0K      1%     jbd2/dm-0-8 
13893      0K      192K      72K      0%     java 
1699      0K      60K      0K      0%     syslogd 
4668      0K      24K      0K      0%     zabbix_agentd 

Điều này cho thấy rõ ràng java pid 9862 là thủ phạm.

2

TL; DR

Nếu bạn có thể sử dụng iotop, hãy làm như vậy. Khác điều này có thể giúp đỡ.


Sử dụng top, sau đó sử dụng các phím tắt:

d 1 = set refresh time from 3 to 1 second 

1 = show stats for each cpu, not cumulated 

này có để hiển thị các giá trị > 1.0 wa cho ít nhất một lõi - nếu không có diskwaits, đơn giản là không tải IO và không cần phải nhìn xa hơn. Tải trọng quan trọng thường bắt đầu > 15.0 wa.

x  = highlight current sort column 
<and> = change sort column 
R  = reverse sort order 

Chọn 'S', cột trạng thái quy trình.Đảo ngược thứ tự sắp xếp để các quy trình 'R' (chạy) được hiển thị trên đầu trang. Nếu bạn có thể phát hiện các quá trình 'D' (đang chờ đĩa), bạn có một chỉ báo cho biết thủ phạm của bạn có thể là gì.