मेरे पास एक बहुत ही सरल गणना है जो पत्र मैट्रिस का उत्पादन करता है शायद मैट्रिक्स में सभी शब्द पाता है। शब्द में अक्षर आसन्न कोशिकाएं हैं।अलग-अलग प्रक्रियाओं में चल रहे सी 3 पी में डेडलॉक का पता लगाने और रोकने के लिए कैसे?
for (int i = 0; i < 500; i++) {
System.out.println(i);
Matrix matrix = new Matrix(4);
matrix.scanWordsRandomly(9);
matrix.printMatrix();
System.out.println(matrix.getSollSize());
matrix.write_to_db();
}
यहां स्थायी कोड है।
public void write_to_db() {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Matrixtr onematrixtr = new Matrixtr();
onematrixtr.setDimension(dimension);
onematrixtr.setMatrixstr(this.toString());
onematrixtr.setSolsize(getSollSize());
session.save(onematrixtr);
for (Map.Entry<Kelimetr, List<Cell>> sollution : sollutions.entrySet()) {
Kelimetr kelimetr = sollution.getKey();
List<Cell> solpath = sollution.getValue();
Solstr onesol = new Solstr();
onesol.setKelimetr(kelimetr);
onesol.setMatrixtr(onematrixtr);
onesol.setSoltext(solpath.toString().replace("[", "").replace("]", "").replace("true", "").replace("false", ""));
session.save(onesol);
}
session.getTransaction().commit();
session.close();
}
catch (HibernateException he) {
System.out.println("DB Error : " + he.getMessage());
session.close();
}
catch (Exception ex) {
System.out.println("General Error : " + ex.getMessage());
}
}
यहां हाइबरनेट कॉन्फ़िगरेशन फ़ाइल है।
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<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/kelimegame_db_dev?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">!.Wlu9RrCA</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="hibernate.format_sql">false</property>
<!-- Use the C3P0 connection pool provider -->
<property name="hibernate.c3p0.acquire_increment">50</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">5</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<mapping resource="kelimegame/entity/Progress.hbm.xml"/>
<mapping resource="kelimegame/entity/Solstr.hbm.xml"/>
<mapping resource="kelimegame/entity/Kelimetr.hbm.xml"/>
<mapping resource="kelimegame/entity/User.hbm.xml"/>
<mapping resource="kelimegame/entity/Achievement.hbm.xml"/>
<mapping resource="kelimegame/entity/Matrixtr.hbm.xml"/>
</session-factory>
</hibernate-configuration>
सभी संभावित समाधान खोजने के बाद मैं मैट्रिक्स और हाइबरनेट का उपयोग कर समाधान जारी रखता हूं। मैं सी 3 पीओ लाइब्रेरी का भी उपयोग कर रहा हूं। मैं किसी धागे को नहीं बढ़ा रहा हूं। सभी काम एक बहुत ही सरल पुनरावृत्ति तरीके से किया जा रहा है। लेकिन मैं अलग प्रक्रियाओं में जार चला रहा हूं। विभिन्न टर्मिनलों से मैं इस को क्रियान्वित कर रहा हूँ:
java -jar NewDB.jar
मैं एक गतिरोध के रूप में निम्नानुसार है:
- C3PO में इस गतिरोध के बाद से मैं हो सकता है:
Apr 25, 2013 8:38:05 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run WARNING: com[email protected]7f0c09f9 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks! Apr 25, 2013 9:08:23 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run WARNING: com[email protected]7f0c09f9 -- APPARENT DEADLOCK!!! Complete Status: Managed Threads: 3 Active Threads: 3 Active Tasks: com[email protected]2933f261 on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#1 com[email protected]116dd369 on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#0 com[email protected]41529b6f on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#2 Pending Tasks: com[email protected]165ab5ea com[email protected]1d5d211d com[email protected]4d2905fa Pool thread stack traces: Thread[C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#1,5,main] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:662) Thread[C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#0,5,main] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:662) Thread[C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#2,5,main] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:662) Apr 25, 2013 9:41:29 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run WARNING: com[email protected]7f0c09f9 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks! Apr 25, 2013 9:55:18 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run WARNING: com[email protected]7f0c09f9 -- APPARENT DEADLOCK!!! Complete Status: Managed Threads: 3 Active Threads: 3 Active Tasks: com[email protected]5a337b7d on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#0 com[email protected]69f079ce on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#1 com[email protected]2accf9b8 on thread: C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#2 Pending Tasks: com[email protected]771eb4fb com[email protected]fc07d6 com[email protected]2266731b com[email protected]740f0341 com.mchange.v2.resourcepool.B[email protected] com[email protected]78e924 com[email protected]2123aba com[email protected]7acd8a65 Pool thread stack traces: Thread[C3P0PooledConnectionPoolManager[identityToken->z8kfsx8uibeyqevbbapc|4045cf35]-HelperThread-#0,5,main] java.text.NumberFormat.getInstance(NumberFormat.java:769) java.text.NumberFormat.getInstance(NumberFormat.java:393) java.text.MessageFormat.subformat(MessageFormat.java:1262) java.text.MessageFormat.format(MessageFormat.java:860) java.text.Format.format(Format.java:157) java.text.MessageFormat.format(MessageFormat.java:836) com.mysql.jdbc.Messages.getString(Messages.java:106) com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2552) com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3002) com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2991) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3532) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943) com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113) com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308) com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336) com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2176) com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2158) com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) sun.reflect.GeneratedConstructorAccessor7.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:525) com.mysql.jdbc.Util.handleNewInstance(Util.java:411) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134) com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:183) com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:172) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:188)Killed [email protected]:~/NetBeansProjects/NewDB/dist$
मेरा प्रश्न इस प्रकार है अलग-अलग प्रक्रियाओं में प्रोग्राम चला रहा हूं?
- क्या मुझे इस प्रक्रिया के अंदर एक प्रक्रिया और एकाधिक धागे का उपयोग करना चाहिए?
- इस डेडलॉक का पता लगाने के कारण मैं इसका कारण कैसे समझ सकता हूं? क्या डेडलॉक्स के कारण कई जेवीएम का पता लगाने का कोई तरीका है?
आप भी mcache का उपयोग कर रहे हैं? मैं यहां stacktrace द्वारा बता सकता हूं: * com.mchange.v2.async * – Eugene
आप c3p0 का किस संस्करण का उपयोग कर रहे हैं? – Eugene
c3p0-0.9.2 संस्करण है। – cgon