0

Java/Spring/Ibatis sqlserver を使用すると、データベースであり、データソースがorg.apache.commons.dbcp.BasicDataSource次のソース オブジェクトになります。

<bean id="wssModelDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource"/>
    <property name="url" value="com.wss.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://x-x2/x_control_QA;appName=wss;sendStringParametersAsUnicode=false;loginTimeout=20;socketTimeout=180"/>
    <property name="username" value="xxx"/>
    <property name="password" value="xxx"/>
    <property name="maxActive" value="10"/>
    <property name="maxWait" value="10000"/>
  </bean>

ログ ファイルで、次の例外が見つかりました。

--- Cause: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object]

スタック トレースは次のように

Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, general error
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:118)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
        at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy.invoke(TransactionAwareDataSourceProxy.java:210)
        at .prepareStatement(Unknown Source)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareStatement(SqlExecutor.java:494)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
        ... 196 more
Caused by: java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1112)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        ... 204 more
2012-10-15 04:29:57,258 [Thread-2] INFO  [ConnectionManagerImpl.java:58] : user[] Stopping managed instances...
2012-10-15 04:29:57,444 [http-bio-8000-exec-81187] INFO  [LoggingInterceptor.java:42] : user[] uri[/wss/security/login_submit.html] took[6.612] seconds
2012-10-15 04:29:57,451 [http-bio-8000-exec-81182] ERROR [LoginSubmitAction.java:121] : user[] Exception logging in[
--- The error occurred in ibatis/control_core.xml.
--- The error occurred while executing query.

ユーザー資格情報をパラメータとしてJmeter httpログインリクエストを使用してこのエラーを再現しようとしています。これにより、正常にログインでき、その結果、コントローラーからDAOレイヤーが呼び出されます。

しかし、問題は、100 スレッドを永久に実行している 3 つの Jmeter インスタンスで試してみましたが、問題を再現しませんでしたか? どうすれば問題を再現できますか?

4

1 に答える 1

0

Jmeter を使用してこのエラーを再現しました。httprequest リクエストのログイン パラメータを作成し、5 つの JMeter インスタンスを開始しました。そしてついにこの問題を再現することができました。

于 2012-10-16T20:58:23.557 に答える