Performance Testing Service (PTS) のストレステストが失敗した場合や、予期しない結果が返された場合、エラーはエラーメッセージ内の Java 例外、またはレスポンス内の HTTP ステータスコードのいずれかです。以下のセクションでは、両方のタイプを根本原因別にグループ化し、それぞれのソリューションを説明します。
エラーを見つけるには、エラーメッセージを正確に検索するか、関連する HTTP ステータスコードのセクションまでスクロールしてください。
接続エラー
これらのエラーは、PTS がバックエンドサーバーへの接続を確立または維持できないことを示します。まず、サーバーのヘルス状態と、PTS とターゲットエンドポイント間のネットワークパスを確認してください。
class java.net.ConnectException:null
原因:ターゲットサーバーへの TCP 接続が失敗したか、拒否されました。
ソリューション:バックエンドサーバーのヘルス状態を確認し、PTS とターゲット間にネットワークボトルネックが存在しないことを確認してください。
org.apache.http.ConnectionClosedException:Connection closed
原因:サーバーが接続を異常終了させました。
ソリューション:バックエンドサーバーのログで、突然の切断を引き起こす可能性のあるエラーやリソースの枯渇を確認してください。
org.apache.hc.core5.http.ConnectionClosedException:Connection is closed
原因:PTS が、サーバーによってすでに閉じられていた接続でリクエストを送信しました。
ソリューション:ゲートウェイレイヤーの帯域幅またはネットワークパスにボトルネックがあるかどうかを確認してください。サーバーがロードバランサーの背後にある場合は、アイドル接続タイムアウトの設定が PTS とロードバランサー間で整合していることを確認してください。
java.io.IOException:Connection reset by peer
原因:バックエンドサーバーが接続を強制的にリセットしました。
ソリューション:リクエストパスに Server Load Balancer (SLB) がある場合は、SLB リスナーの構成、特に接続タイムアウトとヘルスチェックの設定を確認してください。
org.apache.http.ConnectionClosedException:Connection closed unexpectedly
原因:PTS がレスポンスを受信する前に接続が終了しました。典型的なトリガーは次のとおりです:
サーバーが期待される時間内に応答できませんでした。
レスポンスが到着する前にデバッグセッションまたはストレステストが停止されました。
ソリューション:サーバーが設定されたタイムアウト内にリクエストを処理できることを確認してください。テストが意図的に停止された場合、このエラーは想定内であり、無視できます。
タイムアウトエラー
これらのエラーは、リクエストまたは接続が許可された時間制限を超えたことを示します。一般的な根本原因には、バックエンドの処理が遅い、リソース競合、またはワークロードに対してタイムアウト設定が短すぎることなどが含まれます。
java.util.concurrent.TimeoutException:null
原因:TCP 接続の試行がタイムアウトしました。PTS は割り当てられた時間内にターゲットサーバーに到達できませんでした。
ソリューション:
サンプリングログ詳細のタイミングウォーターフォールを使用して、接続フェーズが異常に長くかかっているかどうかを確認します。詳細については、「ストレステスト結果の分析」をご参照ください。
バックエンドサーバーのヘルス状態とネットワークパスにボトルネックがないか確認してください。
org.apache.hc.core5.http2.H2StreamResetException:Timeout due to inactivity (5000 MILLISECONDS) * class
原因:バックエンドサーバーがデフォルトのリクエストタイムアウトである 5 秒以内に応答しませんでした。
解決策: シナリオの作成ページの [詳細設定] セクションで、リクエスト タイムアウトを延長します。
java.net.SocketTimeoutException:null
原因:レスポンスを待機中、またはデータ読み取り中にリクエストがタイムアウトしました (アイドルタイムアウト)。
ソリューション:
サーバーが正常であり、期待される時間内にリクエストを処理できることを確認してください。
ストレステスト API に適切なタイムアウト設定があるかどうかを確認してください。
サーバーのパフォーマンスボトルネック (CPU、メモリ、I/O) を調査してください。
リダイレクトおよび DNS エラー
java.lang.RuntimeException:java.net.UnknownHostException
原因:ドメイン名を解決できません。
ソリューション:
ドメイン名が登録されており、正しく解決されることを確認してください。
ドメインがパブリック DNS に登録されていない場合は、テストを実行する前に PTS でバインドしてください。
org.apache.http.client.CircularRedirectException
原因:リクエストがリダイレクトループ (例:A -> B -> C -> A) に入ったか、10 回のリダイレクトを超えました。
ソリューション:
302 リダイレクトを無効にする: [シナリオ設定] ページで、[302 リダイレクトを許可] スイッチをオフにします。

ストレステストを再度実行し、元のリクエストを検査してリダイレクトチェーンを確認します。
正確なリダイレクトパスを確認するには、ストレステストレポートでサンプリングログ詳細を開き、タイミングウォーターフォールを確認します。詳細については、「ストレステスト結果の分析」をご参照ください。
HTTP/2 プロトコルエラー
org.apache.hc.core5.http.ProtocolException:Header 'key: value' is illegal for HTTP/2 messages
原因:シナリオに HTTP/2 が許可しないヘッダーが含まれています。HTTP/2 では次のヘッダーが禁止されています: Connection、Keep-Alive、Proxy-Connection、Transfer-Encoding、Host、および Upgrade。
ソリューション:サポートされていないヘッダーをシナリオ構成から削除し、テストを再実行してください。
java.nio.channels.CancelledKeyException:null
原因:バックエンドサーバーが HTTP/2 プロトコルで接続を終了しました。
ソリューション:バックエンドサーバーのログで、ストリームリセットや GOAWAY フレームなどの HTTP/2 固有の問題を調査してください。
JMeter スクリプトエラー
これらのエラーは、JMeter スクリプトが、PTS がサポートするバージョンである JMeter V5.0 と互換性がない場合に発生します。
java.lang.RuntimeException: Could not find the TestPlan class!
原因:JMeter スクリプトが JMeter V5.0 と互換性のないバージョンで作成されました。
ソリューション:JMeter V5.0 でスクリプトを開いて再保存し、再度 PTS にアップロードしてください。
java.lang.SecurityException: class "xxx"'s signer information does not match signer information of other classes in the same package
原因:スクリプト内の Java サンプラーの依存関係 (ApacheJMeter_core または ApacheJMeter_java) が、V5.0 以外の JMeter バージョンに対してビルドされました。
ソリューション:JMeter V5.0 のライブラリを使用して依存関係の JAR を再パッケージ化し、更新されたパッケージをアップロードしてください。
Attempt to resolve method: xxx() on undefined variable or class name:
原因:BeanShell サンプラーが、スクリプトと一緒にアップロードされなかったクラスを参照しています。
ソリューション:必要なクラスを含む不足している JAR パッケージをアップロードし、テストを再実行してください。
VPC ネットワークエラー
class java.lang.IllegalArgumentException:forbidden uri, uri host must match vpc cidr pattern 10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16
原因:ストレステストが VPC を使用するように構成されていますが、テスト URL のドメイン名が内部 IP アドレスではなくパブリック IP アドレスに解決されます。VPC ストレステストでは、ターゲット IP がプライベート CIDR 範囲 (10.0.0.0/8、172.16.0.0/12、または 192.168.0.0/16) 内にある必要があります。
ソリューション:以下のいずれかのアプローチが有効です:
テスト URL で直接内部 IP アドレスを使用する。
PTS コンソールにログインし、ドメイン名を内部 IP アドレスに紐付けます。
HTTP エラーコード
403 (Forbidden)
403 レスポンスは、サーバーがリクエストを受信したものの、その認証を拒否したことを意味します。PTS のストレステストにおける一般的な原因は次のとおりです:
バックエンドの認証拒否
原因:サーバーの認証メカニズムがリクエストを拒否しました。例えば、トークンがない、または無効である場合などです。
ソリューション:バックエンドサービスの認証設定を確認し、ストレステストのリクエストに有効な認証情報が含まれていることを確認してください。
User-Agent 検証の失敗
原因:サーバーゲートウェイが User-Agent (UA) ヘッダーを検証します。PTS が送信するデフォルトの UA には特殊文字が含まれており、一部のサービスが統計トラフィックとスロットリングルールを区別できるようになっています。一部のゲートウェイは、この非標準の UA を拒否します。
ソリューション:
PTS コンソールで、[パフォーマンス テスト] > [シナリオ] に移動します。
シナリオを選択し、[編集] を [操作] 列でクリックします。
「[ヘッダー定義]」タブの「[シナリオ設定]」ページで、標準ブラウザのユーザーエージェント(UA)を設定します。
キー:User-Agent値:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36
[デバッグ] をクリックします。 [リクエスト詳細] ページで、リクエストが成功することを確認します。 UA を変更した後にリクエストが動作する場合は、変更されたヘッダーでストレステストを続行します。
WAF によるブロック (稀なケース)
原因:Web Application Firewall (WAF) がストレステストのトラフィックをブロックしています。
ソリューション:PTS のトラフィックを許可する WAF のホワイトリストルールを設定します。詳細については、「セキュリティポリシーによりストレステストのトラフィックが Web アプリケーションにアクセスできない場合の対処法」をご参照ください。
ドメイン未登録 (ICP 登録)
原因:ストレステストに使用されるドメイン名が登録されていないか、登録されていない別のドメインに解決されます。
ソリューション:レスポンスボディを確認してください。レスポンスに以下のような HTML が含まれている場合、ドメインに ICP 登録がありません:
<html>
<head>
<meta http-equiv="Content-Type" content="textml;charset=UTF-8" />
<style>body{background-color:#FFFFFF}</style>
<title>TestPage184</title>
<script language="javascript" type="text/javascript">
window.onload = function () {
document.getElementById("mainFrame").src= "http://****.aliyun.com/alww.html";
}
</script>
</head>
<body>
<iframe style="width:860px; height:500px;position:absolute;margin-left:-430px;margin-top:-250px;top:50%;left:50%;" id="mainFrame" src="" frameborder="0" scrolling="no"></iframe>
</body>
</html>ストレステストを再試行する前に、ドメインの ICP 登録を申請してください。
405 (Method Not Allowed)
405 レスポンスは、サーバーがリクエストで使用された HTTP メソッドをサポートしていないことを意味します。PTS での一般的な原因は次のとおりです:
302 リダイレクトによるリクエストメソッドの変更。 POST リクエストが 302 リダイレクトをトリガーすると、HTTP クライアントはそれを GET リクエストに変換することがあります。ターゲットエンドポイントが GET を受け付けない場合、405 エラーが返されます。
サーバーが明示的にメソッドを制限している。 レスポンスの
Allowヘッダー (例:Allow=GET) を確認して、サーバーがどのメソッドを受け入れるかを確認してください。SLB または Web サーバーの転送によるメソッドの変更。 ロードバランサーまたはリバースプロキシがリクエストを転送する際に、メソッドが変更されることがあります。転送ルールを確認してください。
406 (Not Acceptable)
406 レスポンスは、サーバーがリクエストの Accept ヘッダーに一致するレスポンスを生成できないことを意味します。
原因: [ヘッダー定義] タブの Accept 値が、サーバーが返すことができるコンテンツタイプと一致していません。これは通常、[ボディ定義] タブの Content-Type が [ヘッダー定義] タブに自動的に同期され、その結果 Accept 値と競合する場合に発生します。

ソリューション:サーバーがサポートするタイプに一致するように Accept ヘッダーを調整してください。さまざまな値をテストして、サーバーがどのタイプを受け入れるかを判断します。次の表に、一般的な Accept のフォーマットとそれらのマッチング順序を示します。
| フォーマット | 説明 |
|---|---|
text/html | HTML |
text/plain | プレーンテキスト |
text/xml | XML |
image/gif | GIF イメージ |
image/jpeg | JPEG イメージ |
image/png | PNG イメージ |
application/xhtml+xml | XHTML |
application/xml | XML データ |
application/atom+xml | Atom XML 集約 |
application/json | JSON データ |
application/pdf | |
application/msword | Word ドキュメント |
application/octet-stream | バイナリストリーム (ファイルダウンロード) |
application/x-www-form-urlencoded | デフォルトのフォームエンコーディング (キーと値のペア) |
マッチングの優先順位:複数の Accept タイプが指定された場合、サーバーは次の順序でそれらをマッチングします:
品質係数なし:左から右にマッチングされます。
application/xml、text/html、application/jsonはapplication/xml>text/html>application/jsonの順にマッチングされます。品質係数あり:より高い
q値が優先されます。application/xml;q=0.3、application/json;q=0.8、text/html(デフォルトはq=1.0) はtext/html>application/json>application/xmlの順にマッチングされます。ワイルドカードの具体性:より具体的なタイプが先にマッチングされます。
*/*、text/*、text/htmlはtext/html>text/*>*/*の順にマッチングされます。
503 (Service Unavailable)
バックエンドサーバーの過負荷
原因:バックエンドサーバーが過負荷状態で、追加のリクエストを受け付けを拒否しています。
ソリューション:バックエンドサーバーのエラーログでリソースの枯渇や容量制限を確認してください。
ソース IP の制限による SLB のスロットリング
原因:PTS のサンプリングログに多数の 503 エラーが表示されるが、バックエンドサーバーには対応するエラーが表示されない。これは通常、以下のすべての条件が満たされた場合に発生します:
ストレステストが HTTP または HTTPS API を使用している。
エントリーポイントが SLB インスタンス (インターネット向けまたは内部向け) である。
バックエンドサービスが 503 エラーを返していない。
503 レスポンスボディがこのパターンに一致する:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head><title>503 Service Temporarily Unavailable</title></head> <body bgcolor="white"> <h1>503 Service Temporarily Unavailable</h1> <p>The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.</body> </html>
根本原因:PTS はデフォルトでロングコネクションを使用します。ソース IP アドレスの数が少ない場合、単一の IP アドレスが SLB の単一プロキシのスロットリングを引き起こし、SLB は効果的に負荷を分散できません。
ソリューション:
PTS の IP 拡張機能を有効にして、ソース IP の数を増やします。詳細については、「シナリオの開始」をご参照ください。
仮想ユーザーの最大数または RPS (秒間リクエスト数) の値を増やします。詳細については、「負荷モデルとレベルの設定」をご参照ください。
長時間接続から短時間接続に切り替えます。[シナリオ設定] ページの [ヘッダー定義] タブで、次のヘッダーを追加します:
Key:ConnectionValue:close説明新しく追加された API は、デフォルトでこの設定を継承します。シナリオで混合接続モードが必要な場合は、API ごとに調整してください。

504 (Gateway Timeout)
原因:ゲートウェイがバックエンドサーバーから時間内にレスポンスを受信しませんでした。
ソリューション:
バックエンドサーバーが実行中で、リクエストを正常に処理していることを確認してください。
ゲートウェイレイヤーでタイムアウト期間を延長してください。
シナリオ作成ページの[詳細設定]セクションでリクエストタイムアウトを延長し、ロードジェネレーターの実行時間を長くします。