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 -n
sẽ 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:
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.
cron
chụp STDERR ở bất cứ đâu không? Trên FreeBSD tôi thường chạy những thứ này periodic every5
và tôi có một /var/log/periodic.every5
lỗ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 cricket
bả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.