LINEで送る
Pocket

EC2で運用している分析基盤サーバー(Digdag + Embulk)をECS/Fargateに移行しました

上記、会社のDigdagサーバーをECS/Fargateに移行してから、どうもパフォーマンスが悪く、BigQueryのシンク時にエラーが多発することが見受けられました。悪い時で10分に一回出ており、以前プラグインのバージョンアップをして解決できたと思いきや変わってなかったということと、モニタリングしていると急にCPU使用率が下がっていることも確認でき、シンク速度も5時間から約7時間ほどに減速していることもわかりました。

  • Failed to add subtasks because of task limit

また、DigdagでもFailure出しているのにも関わらず、task limitのエラーが起きており、Slackに通知されなく気づかない事象が起こりました。今回Digdagのチューニングやエラー対応ついてブログしたいと思います。


Digdag起動方法を変更

https://qiita.com/toyama0919/items/26033d8dce37cb2d3a40

https://docs.oracle.com/cd/F25597_01/document/products/jrockit/jrdocs/refman/optionX.html

https://tnoda-clojure.tumblr.com/post/51495039433/jvm-%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A%E3%81%A7-clojure-%E3%81%AE%E8%B5%B7%E5%8B%95%E3%82%92-30-%E9%AB%98%E9%80%9F%E5%8C%96

前回までは単にdigdag serverで --max-task-threads のオプションのみ実行するだけの起動をしていましたが、DigdagはJavaで動作していることもあり、JavaのJVMのチューニングが可能です。なのでJVMのオプションを加えるだけでDigdagの高速化などが行なえます。今回は上記のように設定してみました。

しかし –max-task-threads` って並列実行数制御できるからこれでパフォーマンス良くなると思いきや、CPU使用率を制御できるだけだから暴走を防ぐということかな。

Javaの機能とは無関係なのか…!


Failed to add subtasks because of task limitについて

こちらは毎度@hiroysaotoさんにフォローしていただきましたが、digdag起動時に利用する設定ファイル/server.propertiesに以下を追加することで回避できます。

    • Increasing default value of active task limit 

    https://github.com/treasure-data/digdag/issues/508

    Currently, an attempt of a workflow can’t have more than 1000 active tasks. 

    ちなみに1000以上のタスクは含められないそうだ…ここらへんは運用しているとシンクするテーブル数が増えるのでしゃーない感じかな。


    結果

    全プロジェクトのシンクスピードが向上されました!CPU使用率もちゃんと使われているので頑張ってますな。


    まとめ

    Digdagのパフォーマンスが悪くなったらCPU使用量を確認して、下がっていればエラーが出やすいのと、JVMのオプションを利用してチューニングするのがベストだと勉強になりました。それとエラー対応についてDigdagはOSSなのでコード追えばわかったはずだった….今後は意識しよう。

    とりあえず一旦様子見します!

    LINEで送る
    Pocket

    カテゴリー: digdagembulk

    adachin

    1989年生まれのLancers SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守やMENTAで未経験者にインフラをコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、ECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

    0件のコメント

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください