Làm cách nào để theo dõi tải đĩa cứng trên Linux?


101

Có một tiện ích dòng lệnh tốt để theo dõi tải đĩa cứng trên linux? Một cái gì đó giống như topnhưng sau đó giám sát hoạt động đĩa iso cpu sử dụng.

Cụ thể hơn, tôi nghi ngờ rằng đối với một số máy chủ (tải nặng) sau một số tối ưu hóa trên các phần khác nhau của chương trình chạy trên nó, ngay bây giờ nút cổ chai chỉ đơn giản là đăng nhập vào các tệp trên đĩa. Nhưng tôi thấy rất khó để đánh giá lưu lượng truy cập mà máy chủ có thể xử lý.

Công cụ lý tưởng của tôi sẽ là một cái gì đó in "Bạn đang sử dụng 35% băng thông đĩa của bạn ngay bây giờ". Có ý kiến ​​gì không?


1
Câu hỏi hoàn hảo, chính xác là những gì tôi đang tìm kiếm =)
rafa.ferreira

Có thể đọc sysfs trực tiếp, như /sys/block/sda/stat. Trường số 1 đưa ra tổng số lần đọc, trường số 5 là tổng số lần ghi, trường số 9 là số lượng hoạt động I / O đang diễn ra. Xem thêm trong kernel.org/doc/Documentation/iostats.txt Các giá trị không được ký dài và có thể bao bọc.
sastanin

Đây là một câu hỏi rất hay vì chúng tôi luôn chiến đấu với vấn đề này trên các máy chủ Plesk. Tuy nhiên, điều còn thiếu là how do you do it with SNMP?. Bạn có thể đăng nhập và kiểm tra nội dung, nhưng người ta thực sự cần dữ liệu lịch sử.
Eugene van der Merwe

Câu trả lời:


83

Bạn có thể có được một số đo khá tốt về điều này bằng cách sử dụng iostatcông cụ.

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

Việc sử dụng đĩa được liệt kê trong cột cuối cùng. Điều này được định nghĩa là

Phần trăm thời gian CPU trong đó các yêu cầu I / O được cấp cho thiết bị (sử dụng độ rộng băng tần cho thiết bị). Độ bão hòa thiết bị xảy ra khi giá trị này gần 100%.


3
Gói này nằm trong Debian, nếu có? apt-cache dumpđã không bật lên bất cứ điều gì cho iostat
hBy2Py

9
@Brian: Nó nằm trong gói sysstat (dù sao cũng thông qua ...)
Joe

Không thể tìm thấy điều này trên RHEL 6.5. Điều này có sẵn cho RHEL không?
Hazok

Có thể làm việc này mà không phải tiếp tục với một sự chậm trễ? Cố gắng chạy một trường hợp duy nhất để lấy dữ liệu từ cùng một số có lẽ vì nó không thể lấy mẫu ???
Wilf

@Hazok Đây là một phần của RPM sysstat trên RHEL 6.5.
TheGeneral

81

iotop là một phiên bản hàng đầu xem xét mỗi IO đang sử dụng bao nhiêu IO. Nó nằm trong kho ubfox tiêu chuẩn; Tôi không biết nếu nó ở RHEL hay Fedora, nhưng nó nên như vậy.

nhập mô tả hình ảnh ở đây

Đối với các nhân cũ hơn (ví dụ như CentOS 5.x hoặc RHEL 5.x) không hỗ trợ iotop, hãy sử dụng topio thay thế (tài liệu ở đây: http://yong321.freeshell.org/freeware/pio.html#linux . Nó dựa vào / Proc // io để thống kê io và cung cấp chức năng tương tự như iotop. Xem liên kết để biết thêm chi tiết.


1
Thật vậy, nó không được cài đặt theo mặc định trong Ubuntu, vì vậy người ta có thể phát hành: sudo apt-get install iotop để lấy nó
Moshe

1
iotop yêu cầu kernel cao hơn 2.6.20, không may loại trừ cả RedHat el4 và el5.
Dave Cheney

2
Kể từ RedHat 5.4, các bit cần thiết để làm cho iotop hoạt động đã được nhập lại. Thưởng thức!
Dave Cheney

Nó ở Fedora :).
jamie

13

Theo đề xuất của sastanin trong các bình luận, bạn có thể xử lý các giá trị trực tiếp được đưa ra trong /sys/block/sda/stathoặc /proc/diskstats. Điều này có thể hữu ích khi không có công cụ được đề cập nào khác có sẵn và bạn không thể cài đặt chúng dễ dàng.

Ví dụ (IIUC) một cái gì đó như thế này (trong bash) sẽ cho số lần đọc mỗi giây:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Xem https://www.kernel.org/doc/Documentation/iostats.txthttps://www.kernel.org/doc/Documentation/block/stat.txt để biết tài liệu.


7

Bạn nên xem trên đỉnh , kết hợp sức mạnh của iotop / top / iftop, tất cả ở một nơi và làm nổi bật các phần quan trọng trên hệ thống của bạn.


5

Tôi khuyên bạn nên xem công cụ nmon. Nó sẽ hiển thị cho bạn tải trực tiếp trên một số tham số hệ thống cũng như ghi dữ liệu vào một tệp để xem sau. Đây là một công cụ miễn phí có sẵn ở đây :


5

để tìm hiểu tổng băng thông của bạn là gì, bạn có thể sử dụng hdparm -T /dev/sdađể kiểm tra hiệu năng bộ đệm (fileio) hdparm -t /dev/sdađể kiểm tra hiệu năng đọc của thiết bị

ví dụ: máy tính xách tay của tôi nhận được 82 MB / giây từ đĩa SATA và 2GB / giây từ bộ đệm. Dekstop của tôi nhận được 12GB / giây từ bộ đệm và 500MB / giây từ mảng RAID RAID. Tôi nghi ngờ những con số cuối cùng có thể là gấp đôi trên phần cứng lớp máy chủ.

đặt readahead cao hơn 256, 4096 hoạt động tốt nhất với tôi

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

lần đọc 1GB ở các kích thước khối khác nhau và các lần đọc khác nhau


Chào mừng đến với SF. Bạn có thể sử dụng đánh dấu mã trong bài viết của mình bằng cách đặt backquote xung quanh chuỗi hoặc đoạn văn thụt lề.
ℝaphink

Hai điều - 1) --setrabây giờ -avà 2), các hdparm -{T,t}lệnh chỉ phát hành đĩa đọc, theo straceđó, là không phá hủy. (Từ chối trách nhiệm tiêu chuẩn về lời khuyên trên Internet được áp dụng)
i336_

4

Các công cụ tiêu chuẩn để hiển thị tải đĩa cứng là iostat.

Nó sẽ không cho bạn biết bạn đang sử dụng bao nhiêu băng thông đĩa tuổi, vì nó không biết ổ đĩa của bạn có bao nhiêu băng thông. Trong mọi trường hợp, đĩa của bạn chỉ có số liệu được trích dẫn của nhà sản xuất để truyền dữ liệu lớn liền kề.


3

Tôi nghĩ RRDtool nên làm những gì bạn muốn ở đây, nó sử dụng một daemon để kết xuất dữ liệu hệ thống và sau đó cho phép bạn xử lý nó theo cách bạn muốn. Tôi thường sử dụng nó để sản xuất đồ thị, vv để đo tải hệ thống.

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.