私は php-fpm と phpredis ドライバーで redis (2.6.8) を使用していますが、redis のレイテンシの問題で問題があります。特定の負荷がかかると、アプリケーションから redis への最初のリクエストに約 1 ~ 1.5 秒かかりredis-cli --latency
、同じレイテンシーを示します。
私はすでにレイテンシーガイドをチェックしました。
- Unix ソケットと同じホストで redis を使用します
- スローログに 5 ミリ秒以上のエントリがありません
- AOFは使用しません
- redisは、利用可能な16Gbのうち約3.5Gbのメモリを必要とします(多すぎないと思います)
- 私たちのシステムはスワップしていません
- ディスク I/O を実行しているプロセスが他にない
私は永続的な接続を使用しており、接続されているクライアントの数は 5 から 25 までさまざまです (60 から 80 に達することもあります)。
これがグラフです。
同時接続クライアント数が 20 以上になると問題が発生するようです。
問題がどこにあるかを理解するのを手伝ってもらえますか?
アップデート
問題を調査したところ、何らかの理由で redis が適切に動作するのに十分なプロセッサ時間がないように見えました。
ネットワーク スニファを使用して、php-fpm と redis 間の通信を徹底的にチェックしました。Redis は tcp 経由でリクエストを受け取りましたが、1.5 秒後にのみ応答を返しました。これは明らかに、問題が redis の内部にあり、特定の条件で非常に多くのリクエストを処理できないことを示しています (プロセッサがシステム全体で 50% しかロードされていないため、プロセッサが枯渇している可能性があります)。
この問題は、ほとんどアイドル状態だった他のサーバーに redis を移動することで解決されました。同じサーバーで動作するように Linux スケジューラーをいじるべきだったと思いますが、まだ実行していません。