tsalakh ain sus noam Huyah ol guf

勉強会のメモ。その他備忘録。参考にさせて頂いたサイトや資料はリンクさせて頂いていますが不都合があればご連絡ください。

【技術メモ】Wildflyのスレッド監視

Wildflyのアクティブスレッド数監視はどこをみればよいか、のメモ。

ただし、調べた感じと、キーワードと、現場証拠からの推測。

結論

jolokiaで言うと、ここと思われる。

http://xx.xx.xx.xx:xxxx/jolokia_XXX/read/org.xnio:type=Xnio,provider=%22nio%22,worker=%22default%22/WorkerQueueSize

根拠

Wildflyでは、Web/ServletコンテナとしてUndertowを採用している。(Undertowは、Tomcat同等の機能。)

Undertowがリクエストを処理する時のアーキテクチャは、

  • 「I/Oスレッド」でリクエストを受け付ける(リスナーのイメージ)
  • 「タスクスレッド」で処理を実行する(いわゆるスレッド)

それぞれ、/subsystem=ioの「Workers」でパラメータ設定

  • Io threads:リクエストを受け付けるスレッド数、デフォルトはCPU数x2
  • Task max threads:タスクスレッドの最大数、デフォルトはCPU数x16

(参考リンク)

www.slideshare.net

実装箇所

IO Subsystemのこのあたりの設定の実装がどこかというと、XNIO API(org.xnio)の中。

(参考リンク)

IO Worker configuration for Undertow | JBoss Developer

MBeanパス

JConsoleでそれっぽい値を探すと、org.xnioを辿った先にスレッドの設定値がある

  • MaxWorkerPoolSize:タスクスレッドの最大値(デフォルト値と一致してる。)
  • WorkerQueueSize:キューに入っている数(サイト動かすと値が上下する。)

と思われる。

検証

ウラトリのためにコード追ってみたけど、追いきれず。。。

org.xnio.Options

http://grepcode.com/file/repo1.maven.org/maven2/org.jboss.xnio/xnio-api/3.4.0.Beta1/org/xnio/Options.java#Options.0WORKER_TASK_MAX_THREADS

515    public static final Option<Integer> WORKER_TASK_MAX_THREADS = Option.simple(Options.class, "WORKER_TASK_MAX_THREADS", Integer.class);

org.xnio.XnioWorker

http://grepcode.com/file/repo1.maven.org/maven2/org.jboss.xnio/xnio-api/3.4.0.Beta1/org/xnio/XnioWorker.java#XnioWorker.TaskPool

116        final int threadCount = optionMap.get(Options.WORKER_TASK_MAX_THREADS, 16);
117        taskPool = new TaskPool(
118            threadCount, // ignore core threads setting, always fill to max
119            threadCount,
120            optionMap.get(Options.WORKER_TASK_KEEPALIVE, 60000), TimeUnit.MILLISECONDS,
121            taskQueue,
122            new WorkerThreadFactory(threadGroup, optionMap, markThreadAsDaemon),
123            new ThreadPoolExecutor.AbortPolicy());

865    protected final int More ...getWorkerQueueSize() {
866        return taskQueue.size();
867    }

追記(2017-06-08)

この人が、WorkerQueueSizeを見ろ、と言ってる

Monitoring Undertow thread pools