溜まったthreadpool search queueのクリア方法と溜めない方法について


(Sunggyu Kei Rhie) #1

いつもお世話になっております。

普段300-500/secで推移しているsearch rateが、
1000+/secで瞬間的に増えることがあり、
thread pool のsearch queueが上限に達してしまうことがありました。

queueの上限を増やすことで対応もしましたが、
それはそれで増やした上限にも達してしまい、
CPUへの負荷が高くなってしまうことが起きてます。

急激に増えるsearchクエリの数は物の作りとして調整できますが、
一回溜まってしまったqueueはなかなか数的に減ってくれません。

その中ではクライアント側でのタイムアウト設定などで既に意味のないクエリもあると思うので、
queueが溜まった時に一気にクリアできる方法があれば、
ダウンタイムなしで運用できると思いますが方法はありますでしょうか?

nodeのrolling restart的なやり方だとqueueは減らないので、
今は瞬間的にすべてのnodeを落として消してます。

もしqueueのクリアができる方法がありましたら、ご教授お願いします。

また、
そもそも溜めない方法として、(もちろん短時間に大量のクエリを投げない、というのと)
thread poolのsizeの設定周りのチューニングによってある程度防げることは可能でしょうか?
CPUへの負荷もあるので、あんまりデフォルトから弄りたくないというのもありますが。

お手数ですが、
ご存知の方いらっしゃればご教授お願い致します。


(Jun Ohtani) #2

残念ながら、queueのクリアの方法はありません。
また、queueのサイズを大きくしても、検索処理自体が回っていないので意味がないかと。

そもそも溜めない方法=処理性能を上げる=台数を増やしたり、検索式などの改善をしたりになるかと思います。


(Sunggyu Kei Rhie) #3

ご返信ありがとうございます。

queueのクリアはないですね。。。消化させるか、node全落としでクリアするかですね。

現在は「処理性能を上げる」というところで解決していて、
CPUの数を増やして対応しました。

今後はクエリ自体の改善をやってみようと思います。


(system) #4