Source de données rejeté l'établissement de la connexion, message du serveur: “Trop de connexions”
Je suis en utilisant hibenate et de printemps et d'obtenir ci-dessous exception entre nous frapper de jmeter avec plus de 250 utilisateurs
"Causé par: com.mysql.jdbc.des exceptions.jdbc4.MySQLNonTransientConnectionException: source de Données rejeté l'établissement de la connexion, message du serveur: "Trop de connexions"
hibernate_cfg.xml
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/my_db</property>
<property name="hibernate.connection.username">user1</property>
<property name="hibernate.connection.pool_size">1</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">500</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.hbm2ddl.auto">update</property>`
Printemps
<bean id="dataSource" scope="prototype" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${dbDriver}</value>
</property>
<property name="url">
<value>${dbURL}</value>
</property>
<property name="username">
<value>${dbUsername}</value>
</property>
<property name="password">
<value>${dbPassword}</value>
</property>
</bean>
OriginalL'auteur Selvam Rajendran | 2012-08-23
Vous devez vous connecter pour publier un commentaire.
C'est un message depuis le serveur, donc, j'aimerais vérifier quel est le nombre de clients connectés que le serveur de rapports. Si c'est un nombre, comme à 500 ou si, alors que j'avais l'augmentation de cette limite sur le serveur, si vous avez vraiment s'attendre à ce que le niveau de la concurrence pour votre application. Sinon, réduire le nombre de clients.
Un peu de fond sur la façon dont il fonctionne: chaque client est un thread sur le serveur, et chaque thread va consommer au moins une connexion. Si vous le faites à droite, la connexion sera de retour à la piscine une fois que le thread se termine (c'est à dire: une fois que la réponse est envoyée au client). Donc, dans le meilleur des cas, vous auriez 500 connexions si vous avez autour de 500 utilisateurs connectés. Si assistons à un nombre proche d'un multiple du nombre d'utilisateurs simultanés (ie: les utilisateurs 2, 4 connexions), alors vous pourriez être en consommer plus d'une connexion par fil (c'est le prix à payer pour ne pas utiliser la source de données fournies par votre serveur d'application, si vous en utilisez un). Si vous voyez un nombre très élevé (par exemple, 10 fois le nombre d'utilisateurs), alors vous avez une connexion fuite quelque part. Cela peut se produire si vous oubliez de fermer la connexion.
J'aimerais vraiment vous suggérons d'utiliser un EntityManager géré par votre serveur d'application, et à l'aide d'une source de données a également fourni par elle. Ensuite, vous n'aurais pas à vous soucier de la gestion de la connexion de la mutualisation.
Je pourrais, mais c'est mieux si vous jetez un oeil à la documentation. Il y a un bon tutoriel Java EE chez Oracle, site internet et il y a aussi une bonne documentation Hibernate sur son site internet.
Je suis à l'aide de
session = Hy5HibernateUtil.getSessionFactory().openSession();
et de fermeture de bloc finallyquelle est la diff entre openSession() et getCurrentSession(), lequel est le meilleur
J'ai ajouté un pool de connexion à ressort de la source de données maintenant, Il s de bien fonctionner
OriginalL'auteur jpkrohling
Je pense que votre problème est que votre source de données ne dispose pas d'un pool de connexions.
de org.springframework.jdbc.source de données.DriverManagerDataSource javadoc:
C'est à dire dans la javadoc de la classe à utiliser Apache Jakarta Commons DBCP dans le cas où u ne besoin d'un pool de connexions.
Je l'ai utilisé et cela a fonctionné comme un charme 🙂
Espère que j'ai aidé.
OriginalL'auteur Ofir D
si la connexion créée chaque fois qu'il peut être causé ce problème. La Solution est simple. Unique sur. connexion pour chaque sessin. Alors que je suis à la publication du code sur le bas de mon post. Vérifier les bonnes et les mauvaises codage. 1-mauvais,2-correct
OriginalL'auteur Tugrul
Vous avez besoin de remonter dans l'application et le serveur de base de données à la fois.
Vous devez augmenter la valeur de max, les connexions au serveur de base de données paramètres.
De changer de max connexions ouvertes, vous devez modifier
max_connections
etmax_user_connections
dans mon.cnf fichier sous serveur de base de données.Vous pouvez également accorder/modifier le nombre maximum de connexions par utilisateur. plus d'infos disponibles ici
mysql defalt max_connections = 151, Combien de nombre de connexion dois-je utiliser pour 1000 utilisateurs par application
max_connections devrait être, ce que vous attendez d'être à l'aide de votre application simultanément. Dans le cas où si il y a plusieurs applications qui accèdent à la base de données, vous devez inclure ces connexions.
OriginalL'auteur Satish Pandey