thế hệ rrdgraph thất bại khi tải IO cao


8

Chúng tôi có một hệ thống sản xuất CPU 4 lõi, có rất nhiều cronjobs, có hàng đợi Proc không đổi và tải thông thường ~ 1,5.

Trong thời gian ban đêm, chúng tôi làm một số công cụ chuyên sâu IO với postgres. Chúng tôi tạo một biểu đồ hiển thị mức sử dụng tải / bộ nhớ (rrd-updates.sh) Đôi khi "thất bại" này trong các tình huống tải IO cao. Nó đang xảy ra gần như mỗi đêm, nhưng không phải trên mọi tình huống IO cao.

Giải pháp "bình thường" của tôi sẽ là làm đẹp và ion hóa các công cụ postgres và tăng ưu tiên của việc tạo đồ thị. Tuy nhiên điều này vẫn thất bại. Việc tạo đồ thị là bán bằng chứng với đàn. Tôi ghi nhật ký thời gian thực hiện và đối với việc tạo biểu đồ, tối đa 5 phút trong khi tải IO cao, dường như dẫn đến một biểu đồ bị thiếu trong tối đa 4 phút.
Khung thời gian phù hợp chính xác với hoạt động của postgres (điều này đôi khi xảy ra vào ban ngày, mặc dù không thường xuyên) Ionicing to pro time realo ) không giải quyết được vấn đề.

Giả sử dữ liệu không được thu thập, vấn đề bổ sung là ionice / đẹp bằng cách nào đó vẫn không hoạt động.
Ngay cả với 90% IOwait và tải 100 i vẫn có thể sử dụng lệnh tạo dữ liệu miễn phí mà không bị trễ quá 5 giây (ít nhất là khi thử nghiệm).

Đáng buồn là tôi đã không thể tái tạo chính xác điều này trong thử nghiệm (chỉ có một hệ thống phát triển ảo hóa)

Phiên bản:

Kernel 2.6.32-5-686-bigmem
Debian Squeeze rrdtool 1.4.3 Phần cứng: Ổ cứng SAS 15K RPM với LVM trong phần cứng
Tùy chọn gắn kết RAID1 : ext3 với rw, lỗi = remount-ro
Bộ lập lịch: CFQ
crontab:

* * * * *               root    flock -n /var/lock/rrd-updates.sh nice -n-1 ionice -c1 -n7 /opt/bin/rrd-updates.sh

Dường như có một cách nào đó có thể liên quan đến BUG từ Mr Oetiker trên github cho rrdcache:
https://github.com/oetiker/rrdtool-1.x/issues/326

Đây thực sự có thể là vấn đề của tôi (viết đồng thời) nhưng nó không giải thích cronjob để không thất bại. Trong giả định tôi thực sự có 2 lần ghi đồng thời flock -nsẽ trả về mã thoát 1 (trên mỗi trang nam, được xác nhận trong thử nghiệm) Vì tôi không nhận được email có đầu ra và quan sát rằng cronjob thực sự chạy tốt trong suốt thời gian khác mất bằng cách nào đó

Ví dụ đầu ra: đồ thị tải cpu với các dòng bị thiếu

Dựa trên nhận xét tôi đã thêm nguồn quan trọng của tập lệnh cập nhật.

rrdtool update /var/rrd/cpu.rrd $(vmstat 5 2 | tail -n 1 | awk '{print "N:"$14":"$13}')
rrdtool update /var/rrd/mem.rrd $(free | grep Mem: | awk '{print "N:"$2":"$3":"$4}')
rrdtool update /var/rrd/mem_bfcach.rrd $(free | grep buffers/cache: | awk '{print "N:"$3+$4":"$3":"$4}')

Tôi bỏ lỡ điều gì hoặc tôi có thể kiểm tra thêm ở đâu?

Ghi nhớ: Hệ thống năng suất để không có dev, không có stacktrace hoặc tương tự có sẵn hoặc có thể cài đặt.


1
Cách trở lại khi MRTG được thay thế bởi RRDgraph. Một trong những thay đổi tuyệt vời từ cũ sang mới là RRDgraph thực sự chỉ tạo ra các hình ảnh khi có yêu cầu xem. Tàu điện ngầm cũ tạo ra toàn bộ biểu đồ mới cho mỗi điểm dữ liệu cứ sau năm phút. Vấn đề của bạn là về thu thập dữ liệu, không phải biểu đồ kết xuất.
ericx

@ericx cảm ơn bạn đã bình luận của bạn. Tôi đã thêm nguồn để tạo dữ liệu. Bạn vẫn nghĩ vấn đề là lệnh vmstat thay vì IOnice / đẹp bằng cách nào đó không hoạt động chính xác? Nếu vậy, tại sao bạn nghĩ như vậy?
Dennis Nolte

Bạn có cronchụp STDERR ở bất cứ đâu không? Trên FreeBSD tôi thường chạy những thứ này periodic every5và tôi có một /var/log/periodic.every5lỗi thường bắt gặp bất kỳ lỗi nào. Tôi cũng sẽ sắp xếp lại ba tập lệnh và có thể xoay thứ tự để xem liệu một tập lệnh cụ thể có bị treo hay không. Hầu hết trải nghiệm RRDTool của tôi là với việc cricketđăng nhập riêng. Các cricketbản ghi là tuyệt vời cho việc tìm kiếm rắc rối. Bạn có thực sự thu thập mỗi phút? (* * * * * thay vì * / 5 * * * *) Độ chi tiết của đồ thị là gì? RRD mặc định trong khoảng thời gian 5 phút.
ericx

đây là lệnh được sử dụng để tạo chúng ban đầu: tạo cpu.rrd --step 300 DS: sys: GAUGE: 70: U: U DS: user: GAUGE: 70: U: U RRA: AVERAGE: 0.01: 1: Vì vậy, điều này có nghĩa là bạn vừa tìm thấy một lỗi khác, cảm ơn bạn. tôi đã viết lại STDOUT và STDERR cho kịch bản đó để thử nghiệm, không có gì được ghi lại giúp tôi quay lại khi tôi thử lần đầu tiên. tôi sẽ thêm đầu ra vào ngày mai
Dennis Nolte

1
Về mặt hoàn tác "thất bại", màn hình của rrdtool dựa trên chu kỳ bỏ phiếu 5 phút. Nếu bạn không hoàn thành xử lý một chu kỳ trước khi chu kỳ tiếp theo bắt đầu và nếu việc thu thập dữ liệu và sản xuất đồ thị của bạn là một phần của cùng một hoạt động xử lý, thì bạn sẽ nhận được một điểm dữ liệu bị thiếu.
mc0e

Câu trả lời:


2

Tôi đoán đó không phải là rrdtool không thể cập nhật biểu đồ, mà là dữ liệu không thể đo được tại thời điểm này. Nhân tiện, phương pháp đo chỉ số CPU và bộ nhớ của bạn là sai, bởi vì nó mang lại cho bạn kết quả tức thì. Tải CPU và bộ nhớ có thể thay đổi mạnh mẽ trong khoảng thời gian 60 giây, nhưng bạn sẽ chỉ mất một giá trị. Bạn thực sự nên xem xét việc lấy dữ liệu SNMP, cung cấp dữ liệu trung bình trên một khoảng thời gian. Thêm vào đó, toàn bộ đường ống dường như đắt hơn và chậm hơn mà một cuộc gọi snmpget. Có thể là khoảng trống lý do chính.


chỉ cần theo dõi, nó là cái này Khi chúng tôi có thể di chuyển một số quy trình đói tài nguyên sang máy chủ khác, các biểu đồ sẽ được tạo tốt.
Dennis Nolte
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.