IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

Test de charge JMeter produit des exceptions de timout et objet connexion non disponible dans la pool


Sujet :

Tests et Performance Java

  1. #1
    Membre régulier Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    mars 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : mars 2006
    Messages : 286
    Points : 86
    Points
    86
    Par défaut Test de charge JMeter produit des exceptions de timout et objet connexion non disponible dans la pool
    Bonjour,
    J'ai web service qui appelle une procédure stockée pour écrire dans une base de données oracle.
    Je travaille avec Spring, Apache cxf, pour l'accès base de données, je'utilise l'api jdbc (pas de hibernate)
    Pour des besoins de performances, j'ai configuré une pool de connexion avec l'api dbcp d'apache.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    url.datasource=jdbc:oracle:thin:@********:1521:odb
    username.datasource=user
    password.datasource=password
    pool.init.size=10
    pool.max.active=30
    pool.maxWaitMillis=30000
    spring.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    	<context:component-scan base-package="com">
    		<context:include-filter type="aspectj" expression="com.service.TracabiliteService"/>
    	</context:component-scan>
     
    	<context:property-placeholder location="classpath:db.properties"/>
     
    	<!-- DAO -->
    	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    		<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    		<property name="url" value="${url.datasource}" />
    		<property name="username" value="${username.datasource}" />
    		<property name="password" value="${password.datasource}" />
        	<property name="initialSize" value="${pool.init.size}"/>
        	<property name="maxActive" value="${pool.max.active}"/>
        	<property name="accessToUnderlyingConnectionAllowed" value="true"/>
        	<property name="maxWait" value="${pool.maxWaitMillis}"/>
    	</bean>
     
    	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    		<property name="dataSource" ref="dataSource"></property>
    	</bean>
     
    	<bean id="appInitService" class="com.service.WSGlobalInitializer" init-method="init"></bean>
     
    	<!-- AOP -->
    	<aop:aspectj-autoproxy/>
    Le code appelé par le web service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    ...
    		Connection conn = jdbcTemplate.getDataSource().getConnection();
    		try {
    			Connection dconn = ((DelegatingConnection)conn).getDelegate();
    			OracleConnection oconn = dconn.unwrap(OracleConnection.class);
    			SimpleJdbcCall sjc = new SimpleJdbcCall(jdbcTemplate).withCatalogName(CATALOGUE)
    					.withProcedureName("myProc")
    					.declareParameters(new SqlParameter("p_1", OracleTypes.VARCHAR),
    							new SqlParameter("p_2", OracleTypes.VARCHAR),
    							new SqlParameter("p_liste", OracleTypes.ARRAY, "col"));
    			StructDescriptor descType = StructDescriptor.createDescriptor("type", oconn);
    			Object[] structListe = prepareTabObjets(objs, descType,	oconn);
     
    			ArrayDescriptor descCol = ArrayDescriptor.createDescriptor("col", oconn);
    			ARRAY t1 = new ARRAY(descCol, oconn, structListe);
    			Map<String, Object> mapParams = new HashMap<String, Object>();
    			mapParams.put("p_1", v1);
    			mapParams.put("p_2", v2);
    			mapParams.put("p_liste", t1);
    			Map<String, Object> mapResult = sjc.execute(mapParams);
    			...
    		} catch (Exception e) {
    			logger.error("Erreur", e);
    		}finally {
    			conn.close();
    		}
    		...
    Mon web service marche très bien. Mais le test de charge avec Jmeter pour un scénario de 50 threads, 1s pour la montée en charge, et 1 pour itération génère des refus.
    En vérifiant, je n'ai que 10 réponses. les logs montrent des exceptions de non disponibilité de connexion (saturation de pool de connexion).

    1er question : est ce que mon scénario de test est bon, ou il est irréel (50 threads en 1 seconde) ?
    2eme question : qu'est ce que je peux faire pour ce problème de saturation de pool de connexion ?

    Merci de votre retour

  2. #2
    Membre régulier Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    mars 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : mars 2006
    Messages : 286
    Points : 86
    Points
    86
    Par défaut
    En consultant des testeurs qu'ont déjà travailé sur le testing des web service avec Jmeter, me disent que mon scénario, n'est pas possible, et iréél, et qu il faut avoir pour 50 thread un minimum de 100 s de remonté (Mon scénari, j'ai mis 1 seconde).

Discussions similaires

  1. Créer des plans de tests de charge réalistes
    Par ra77 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 07/03/2011, 11h16
  2. [JMeter] jmeter + cookies + test de charge
    Par zorro13 dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 18/12/2008, 10h19
  3. appeler des bd en vb avec objet connexion
    Par ilham88 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/12/2008, 00h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo