web-dev-qa-db-ja.com

rrdgraphの生成は高いIO負荷で失敗します

多くのcronジョブを実行する4コアCPU実動システムがあり、一定のprocキューがあり、通常の負荷は約1.5です。

夜間は、postgresでIO集中的な処理を行います。負荷/メモリ使用量を示すグラフを生成します(rrd-updates.sh)これは高値で「失敗」することがありますIO負荷状況。ほぼ毎晩発生していますが、すべての高値IO状況ではありません。

私の「通常の」解決策は、Postgresのものをニースしてイオン化し、グラフ生成の優先順位を上げることです。ただし、これはまだ失敗します。グラフの生成は、群れを使用して半スレッドプルーフです。私は実行時間をログに記録しますが、グラフの生成では、高IOロード中に最大5分であり、最大4分間グラフが欠落しているようです。
時間枠はpostgresアクティビティと正確に一致しています(これは日中にも発生することがありますが、それほど頻繁ではありません)リアルタイムprio(C1 N6graph_cronとC2N3 postgres)までのイオン化、postgresよりもはるかに上(- 5 graph_cron vs 10 postgres)は問題を解決しませんでした。

データが収集されていないと仮定すると、追加の問題は、ionice/Niceがまだ機能していないことです。
90%のIOwaitと100の負荷があっても、(少なくともテストでは)5秒以上の遅延なしにデータ生成コマンドを無料で使用できました。

悲しいことに、私はこれをテストで正確に再現することができませんでした(仮想化された開発システムしかありません)

バージョン:

カーネル2.6.32-5-686-bigmem
Debian Squeeze rrdtool 1.4.3ハードウェア:SAS 15K RPM HDD、ハードウェアRAID1のLVM付き
マウントオプション:ext3with 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

RrdcacheのgithubにOetiker氏からの何らかの関連性のあるBUGがあるようです:
https://github.com/oetiker/rrdtool-1.x/issues/326

これは実際には私の問題(同時書き込み)である可能性がありますが、cronjobが失敗しないことを説明していません。仮定では、私は実際に2つの同時書き込みを持っていますflock -nは終了コード1を返します(manページごと、テストで確認済み)出力が記載された電子メールも受信せず、cronjobが実際に正常に実行されるという観察結果は、どういうわけか失われます。

出力例: cpu load graph with missing lines

コメントに基づいて、更新スクリプトの重要なソースを追加しました。

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

何が恋しいですか、どこでさらに確認できますか?

覚えておいてください:生産的なシステムなので、開発者、スタックトレース、または同様のものが利用可能またはインストール可能ではありません。

8
Dennis Nolte

グラフを更新できないのはrrdtoolではなく、現時点ではデータを測定できないと思います。ちなみに、CPUとメモリの統計を測定する方法は、すぐに結果が得られるため、間違っています。 CPUとメモリの負荷は60秒間隔で大幅に変化する可能性がありますが、取得する値は1つだけです。ある間隔で平均データを提供するSNMPデータの取得を実際に検討する必要があります。さらに、パイプ全体はsnmpget呼び出しよりも高価で遅いようです。ギャップの主な理由である可能性があります。

2
drookie