多くの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が実際に正常に実行されるという観察結果は、どういうわけか失われます。
出力例:
コメントに基づいて、更新スクリプトの重要なソースを追加しました。
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秒間隔で大幅に変化する可能性がありますが、取得する値は1つだけです。ある間隔で平均データを提供するSNMPデータの取得を実際に検討する必要があります。さらに、パイプ全体はsnmpget呼び出しよりも高価で遅いようです。ギャップの主な理由である可能性があります。