サーバーで奇妙な問題が発生しました。 (Debian 8.9)PHPアプリケーションであるAPIがあります。別のサーバーにあるElasticsearchインスタンスを要求します。
2時間ごとにエラー500が発生しますが、このエラーは1〜2分続き、これ以上持続することはほとんどありません。
[2017-10-19 20:52:10] +2 hours
[2017-10-19 22:51:59] +2 hours
[2017-10-20 00:52:02] +2 hours
[2017-10-20 02:52:14] +2 hours
[2017-10-20 04:52:28] +2 hours
時には+4時間または+6時間になることもあります。
エラーの詳細は次のとおりです。
request.CRITICAL: Uncaught PHP Exception Elastica\Exception\Connection\HttpException:
"Operation timed out"
これは非常に明白です。 APIは、httpクライアントが指定したタイムアウトに達するまでelasticsearchインスタンスに接続しようとします。
この問題の原因は何ですか?これらの問題が発生した場合、どのようにデバッグしますか?
もちろん、後ですべてのURL参照を確認すると、すべてがうまく機能します。
答え1
カーネルでsomaxconnパラメータを増やすことをお勧めします。
次に追加/etc/sysctl.conf
:
net.core.somaxconn=512
次に、次を実行します。
sudo sysctl -p
また、次のような/etc/redis.conf
レイズでも:tcp-backlog
tcp-backlog 512
Redis設定ファイルで、次の操作を行います。
TCP Listen() バックログ。
1秒あたりの要求数が多い環境では、低速なクライアント接続の問題を回避するために、より高いバックログが必要です。 Linuxカーネルは自動的に/proc/sys/net/core/somaxconnの値に切り捨てられるので、望ましい効果を得るにはsomaxconnとtcp_max_syn_backlogの両方を増やす必要があります。