1.目的
・tomcatプールテスト
2.pythonプログラム
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
import argparse
import socket
# Tomcatの接続プール数を設定できるように引数を追加
def parse_arguments():
parser = argparse.ArgumentParser(description='Tomcatのプールを使い切る負荷テストプログラム')
parser.add_argument('url', type=str, help='TomcatサーバーのURL')
parser.add_argument('--connections', type=int, default=10, help='同時接続するプール数(デフォルト: 10)')
return parser.parse_args()
# リクエストを送信し、ステータスを返す関数
def send_request(session, url):
try:
response = session.get(url)
return response.status_code
except Exception as e:
return str(e)
# サーバーのポート番号を取得する関数
def get_port_from_url(url):
try:
# URLからポート番号を取得
host = url.split('//')[1].split('/')[0]
port = int(host.split(':')[1]) if ':' in host else 80
return port
except Exception:
return None
# 使用中のプール数を表示する関数(仮想的にプール数を管理する)
class PoolManager:
def __init__(self):
self.active_connections = 0
def increment(self):
self.active_connections += 1
def decrement(self):
self.active_connections = max(0, self.active_connections - 1)
def get_active_connections(self):
return self.active_connections
# メインの実行部分
def main():
args = parse_arguments()
url = args.url
max_connections = args.connections
# プール管理クラスをインスタンス化
pool_manager = PoolManager()
# 使用するポート番号を取得して表示
port = get_port_from_url(url)
if port:
print(f"接続先のポート番号: {port}")
else:
print("ポート番号の取得に失敗しました。デフォルトのポートを使用する可能性があります。")
print(f"指定された接続プール数: {max_connections}")
with ThreadPoolExecutor(max_workers=max_connections) as executor:
with requests.Session() as session:
futures = [executor.submit(send_request, session, url) for _ in range(max_connections)]
for future in as_completed(futures):
pool_manager.increment() # 新しい接続をカウント
try:
status = future.result()
print(f'リクエスト成功: ステータスコード {status}、使用中プール数: {pool_manager.get_active_connections()}')
except Exception as e:
print(f'リクエストエラー: {e}、使用中プール数: {pool_manager.get_active_connections()}')
pool_manager.decrement() # 処理完了で接続を減らす
if __name__ == '__main__':
main()
3.実行方法
python tomcat_pool_test.py http://your-tomcat-server:8080/your-app-endpoint --connections 100
注意点
引数で --connections の値を指定せずに実行した場合、デフォルトで10の接続数になります。
TARGET_URL は実際に接続を行いたいTomcatサーバーのエンドポイントに置き換えてください。
負荷テストやリソース枯渇を意図しているため、実行は必ずテスト環境で行い、本番環境では実行しないように注意してください。