Quy trình nào đang sử dụng tất cả IO đĩa của tôi


120

Nếu tôi sử dụng "top", 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.

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

Nhưng làm cách nào để biết quá 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 đó là sự thật cho Linux quá, vì quá trình sử dụng chỉ sửa đổi các trang trong bộ nhớ cache trang ...;)
Damon

Chỉ là câu hỏi tôi có và câu trả lời tôi đang tìm kiếm nhưng loại câu hỏi này không phù hợp hơn với SuperUser sao?
Zeta Hai

Và đây là lý do tại sao Linux là thua kém Solaris và MacOS bởi vì họ có dtrace xây dựng trong đó làm cho điều này trivially đơn giản để tìm hiểu: - /
Thorbjørn Ravn Andersen

Câu trả lời:


162

Bạn đang tìm kiếm iotop(giả sử bạn có kernel> 2,6.20 và Python 2,5). Nếu không, bạn đang tìm cách kết nối vào hệ thống tệp. Tôi khuyên bạn nên trước đây.


8
iotopdường như đang hiển thị băng thông I / O hơn là số lượng IOPS được các quy trình sử dụng. Điều này không phải là siêu liên quan. Một quá trình thực hiện nhiều ghi + đồng bộ nhỏ sẽ tiêu tốn nhiều dung lượng IO của đĩa hơn một quá trình ghi một loạt dữ liệu lớn liền kề với tốc độ cao.
Arnaud Le Blanc

Đối với các bản ghi nhỏ, tất cả những gì tôi thấy là [jdb2/nvme0n1p1]trong iotop, nhưng tôi đã may mắn với việc bật / proc / sys / vm / block_dump và so sánh đầu ra với một hệ thống ổn định / khỏe mạnh lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/… Nó đã giúp tìm một bộ chứa docker liên tục tạo ra các yêu cầu kubectl, làm cạn kiệt các khoản tín dụng bùng nổ của tập EBS với các mục nhập /home/spinnaker/.kube/cache/discovery/.../serverresources.json. Một khi bạn thu hẹp mọi thứ thành tên người dùng / quy trình như thế nào đó cũng iotop -atku systemd-network | grep kubectlcó thể hữu ích
Greg Bray

16

Để tìm hiểu các tiến trình ở trạng thái 'D' (đang chờ phản hồi đĩa) hiện đang chạy:

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

hoặc là

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ể thấy từ kết quả, jdb2 / dm-0-8 (quy trình tạp chí 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: Sự cố IO Wait-IO của Linux


11

atop cũng hoạt động tốt và cài đặt dễ dàng ngay cả trên các hệ thống CentOS 5.x cũ hơn 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.


4

TL; DR

Nếu bạn có thể sử dụng iotop, hãy làm như vậy. Nếu không, điều này có thể hữu ích.


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

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

Điều này phải hiển thị các giá trị > 1.0 wa cho ít nhất một lõi - nếu không có thời gian chờ đĩa, đơn giản là không có tải IO và không cần phải xem xét thêm. Tải trọng đáng kể 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 quá trình. Đảo ngược thứ tự sắp xếp để các quy trình 'R' (đang chạy) được hiển thị ở trên cùng. Nếu bạn có thể phát hiện các quy trình 'D' (đang chờ đĩa), bạn có một chỉ báo về thủ phạm của bạn có thể là gì.


3

Đối với Người dùng KDE, bạn có thể sử dụng lệnh gọi hàng đầu 'ctrl-esc' lên một màn hình hoạt động của hệ thống và có các biểu đồ hoạt động I / O với id và tên quy trình.

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 cho IO đọc và ghi.


2

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


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

2

iotop với cờ -a:

-a, --accumulated     show accumulated I/O instead of bandwidth
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.