linux – rrdgraph生成在高IO负载下失败

前端之家收集整理的这篇文章主要介绍了linux – rrdgraph生成在高IO负载下失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个4核cpu生产系统,它可以执行大量的cronjobs,具有恒定的proc队列和通常的~1.5的负载.

在夜间我们用postgres做一些IO密集型的东西.
我们生成一个显示负载/内存使用情况的图表(rrd-updates.sh)
在高IO负载情况下,这有时会“失败”.
它几乎每天晚上都会发生,但不会出现在每个高IO情况下.

我的“正常”解决方案是使用postgres的东西,并增加图形生成的prio.
然而,这仍然失败.
图表生成是针对flock的半线程证明.
我记录执行时间,并且对于图形生成,在高IO负载期间它最多可达5分钟,似乎导致最多4分钟的图形缺失.
时间框架与postgres活动完全匹配(这有时也会在白天发生,但不是经常发生)
Ionicing到实时prio(C1 N6 graph_cron vs C2 N3 postgres),在postgres上方的切割方式(-5 graph_cron vs 10 postgres)并没有解决问题.

假设没有收集数据,另外的问题是ionice / nice在某种程度上仍然无法正常工作.
即使有90%的IOwait和100的负载,i仍然能够使用数据生成命令,而不会超过5秒的延迟(至少在测试时).

可悲的是,我无法在测试中完全重现这一点(只有一个虚拟的开发系统)

版本:

内核2.6.32-5-686-bigmem
Debian Squeeze
rrdtool 1.4.3
硬件:带硬件RAID1 LVM的SAS 15K RPM硬盘
mount选项:ext3 with rw,errors = remount-ro
调度程序:CFQ
crontab中:

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

似乎有一个somhow可能与来自Oetiker先生在github上为rrdcache有关的BUG:
https://github.com/oetiker/rrdtool-1.x/issues/326

这实际上可能是我的问题(并发写入),但它没有解释cronjob没有失败.
在asumption中我实际上有2个并发写入flock -n将返回退出代码1(每个手册页,在测试中确认)
因为我没有收到关于输出的电子邮件,并且观察到cronjob确实在其他时间运行正常我不知何故丢失了.

输出示例:

根据评论,我添加了更新脚本的重要来源.

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}')

我想念什么或在哪里可以进一步检查?

记住:生产系统所以没有开发,没有堆栈跟踪或类似的可用或可安装.

解决方法

我想这不是rrdtool无法更新图形,而是此时无法测量数据.顺便说一句,你测量cpu和内存统计数据的方法错误的,因为它可以为你提供即时结果. cpu和内存负载可能会在60秒间隔内发生剧烈变化,但您只需要一个值.您应该考虑使用SNMP数据,它会在一定时间间隔内提供平均数据.此外,整个管道看起来更加昂贵,而且很慢.可能是差距的主要原因.

猜你在找的Linux相关文章