問題タブ [high-load]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Full GC 後にソケット接続が遅くなった原因は何ですか?
クライアント サーバー アプリ、1 サーバー、約 10 クライアントがあります。これらは、カスタム クエリを使用して tcp ソケット経由で通信します。
システムは何ヶ月もスムーズに動作していましたが、ある時点で、毎日スケジュールされたサーバー FULL GC に約 50 秒かかった後、クライアントから送信されたクエリとサーバーから受信した応答の間の時間が長いことがわかりました。 > 10~20代。約 3 時間後にシステムが回復し、すべてが正常に動作するようになりました。
この問題を調査したところ、次のことがわかりました。
- クライアントとサーバーの両方でガベージ コレクションの問題がない
- サーバーでのクエリ処理時間はわずかでした。
- サーバーの負荷が高かった。
- ネットワーク帯域幅は飽和状態ではありませんでした。
- FULL GC 中に接続がリセットされませんでした (毎日の FULL GC はそれまで通常のイベントでした)。
- 最近、マシンと OS が Centos 6 (カーネル 2.6.32) から Centos 7 (カーネル 3.10.0) に変更されましたが、新しい構成は広範囲にテストされています。また、Oracle JDK のバージョンが 1.7.65 から 1.7.75 に変更されました。
サーバーでスレッド ダンプを取得しました。
はFilterInputStream.read()
次のとおりです。
in
私たちのコードの はですBufferedInputStream
。
問題は、フル GC の一時停止後にほとんどの接続が遅くなったのはなぜですか? スタックトレースが で終わるのはなぜFilterInputStream.read()
ですか? ソケット入力ストリームまたはソケット入力ストリームのどこかで終了するべきではありませんBufferedInputStream
か? この読み取りにより、サーバーの負荷が高くなる可能性はありますか?
読み取りに使用するコード:
どこ:
正常に動作しているクライアント接続からのスタック トレースを次に示します。
アップデート:
EJPの回答について:
EOS は関与しておらず、接続は確立されていましたが、非常に遅かったです。
EOS があったとしても、コードが EOS でどのように回転するかはわかりません。値
for
によって制限されconstructLength
ます。それでも、提案された改善は有効です。問題のあるスタックトレースは、から継承された
DataInputStream
( ) で行われた読み取りで終了します。上記のコードを参照してください。、ないは欠落しています。ここには a が呼び出されており、これには独自のメソッドが定義されています。しかし、スタック トレースは途中で停止し、到達していません。なんで?(_socketDIS.read()
FilterInputStream.read()
DataInputStream
BufferedInputStream
read()
FilterInputStream.read()
in.read()
BufferedInputStream
read()
BufferedInputStream.read()
php - php-cgi.exe プロセスにより、IIS 7.5 で CPU 使用率が高くなる
CPU 使用率がランダムに急増する Windows Server を使用しています。ProcessExplorer と Windows タスク マネージャーを見ると、多数の php-cgi.exe プロセスが同時に実行されているように見えます。それぞれCPUの約10〜15%を占めています。サーバーが応答しなくなるほど悪い場合もあります。
FastCGI 設定で、MaxInstancesを 4 に設定したので、4 つを超える php-cgi.exe プロセスが同時に実行されることはありません。したがって、インスタンスの数を 4 に制限する方法について、アドバイスまたは指示をお願いします。
追加メモ: instanceMaxRequestsも 10000 に設定し、 PHP_FCGI_MAX_REQUESTSも 10000 に設定しました。
activemq - ActiveMQ ブローカーの信頼性をどのように提供しますか?
キューの信頼性を提供する最善の方法は、マスター/スレーブ ブローカーのネットワーク (たとえば、ZooKeeper を使用したマスター/スレーブ) であると理解していますか? コンシューマーとプロデューサーのフェイルオーバー設定では、マスターのアドレスを設定し、マスターの 1 つがオフラインになると、ブローカー ネットワークの別のマスター/スレーブ ノードがこのマスターのメッセージをスレーブから取得し、メッセージを失うことはありません。壊れたマスターがオンラインになると、新しいコンシューマーとプロデューサーを取得し、いくつかのメッセージを取得します。私は正しい?
django - 高負荷時の最大リクエスト制限ブロックを備えた Gunicorn
次のシナリオを理解しようとしています。
- 前にnginxを使用したWebサイトがあります(SSLで提供、構成は以下を参照)
- Django アプリケーションへのリクエストは gunicorn によって処理されます (0.18、構成は以下を参照、supervisord によって管理されます)。
- ユーザーがウェブサイトをロードすると、10 個のリクエストが gunicorn によって処理されます (残りのリクエストは nginx によって提供される静的ファイルです) - このリクエストは長時間実行されるリクエストではありません
- gunicorn は、ワーカーが再生成されるまで、ワーカーごとに最大 1000 のリクエストを受け取るように構成されています
- 約 450 人が短時間 (1 ~ 2 分) でページを読み込むことができます。
- その後、gunicorn は何らかの方法でブロックし、それ以上の接続を処理しません。その結果
Gateway Timeout
、しばらくすると nginx が応答します。
ワーカーの再起動が実際には起こらないか、メカニズムが負荷によってブロックされていると思いますか? この問題を解決するために何が起こっているのかを知りたいです。
ここで何が起こっているのか誰でも説明できますか? どうもありがとう!
PS: 私は gunicorn 18.0 を使用することに縛られています。新しいバージョンは現在使用できません。
ここに私が使用する設定があります。
nginx:
gunicorn (supervisord 経由で開始):
logging - リアルタイムのログ解析
ログ ファイルをリアルタイムで解析するツールを作成したいと考えています。ログ ファイルは非常に高速に書き込むことができます (たとえば、1 秒あたり最大 10k 行)。各行を取得し、1 つの正規表現を実行して結果を DB に書き込むだけです。速度の関係で、ファイル全体を読み取るだけでは実行できなかったので、 のような代替を記述する必要がありますtail -f
。教えてください、どのように、どのテクノロジーを使用してこれを行うことができますか?
PS 下手な英語で申し訳ありません。
spring-cloud - 春のクラウド zuul 構成
Spring Cloudアプリケーションに対して負荷テストを行っています。同時ユーザー数が一定数に達すると、転送エラーが発生するようになりました
以下は、zuul からのログです。根本的な原因は「実行用のセマフォを取得できませんでした」
私の質問は、この転送エラーを回避するために zuul を構成する方法です。あなたの助けは非常に高く評価されています。