Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mysql“;“通信链路故障”;在重负载下-休眠_Java_Mysql_Multithreading_Hibernate - Fatal编程技术网

Java mysql“;“通信链路故障”;在重负载下-休眠

Java mysql“;“通信链路故障”;在重负载下-休眠,java,mysql,multithreading,hibernate,Java,Mysql,Multithreading,Hibernate,我尝试测试一个程序(基于hibernate),其中有许多线程访问mysql数据库以创建工作负载。这些线程连接到数据库,能够执行CRUD操作。它可以在大约100个线程上正常工作,但在超过100个线程的情况下,我会遇到一些异常。 我不知道这是hibernate问题、Mysql问题还是工作量太大(但我认为应该可以处理100多个线程) 希望有人能告诉我如何在没有异常的情况下运行更多线程 Exception in thread "Thread-1" org.hibernate.exception.

我尝试测试一个程序(基于hibernate),其中有许多线程访问mysql数据库以创建工作负载。这些线程连接到数据库,能够执行CRUD操作。它可以在大约100个线程上正常工作,但在超过100个线程的情况下,我会遇到一些异常。
我不知道这是hibernate问题、Mysql问题还是工作量太大(但我认为应该可以处理100多个线程)

希望有人能告诉我如何在没有异常的情况下运行更多线程

    Exception in thread "Thread-1" org.hibernate.exception.JDBCConnectionException: Could not open connection
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:221)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:157)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1426)
at com.sedicoloadtest2.UpdateRandomThread2.run(UpdateRandomThread2.java:24)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:673)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1084)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:204)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:214)
... 6 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3052)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:597)
... 21 more
这是sessionFactory:

    public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    Configuration configuration = configure();
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);
    return factory;
}

private static Configuration configure() {
    Configuration configuration = SedicoBootstrapper.getHibernateConfiguration()

        .setProperty("format.sql", "true")
        .setProperty("hibernate.current_session_context_class", "thread")
        .setProperty("hibernate.c3p0.min_size", "1")
        .setProperty("hibernate.c3p0.max_size", "1000")
        .addAnnotatedClass(Customer.class);

    return configuration;
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

}

为什么要使用循环中线程的join()方法?等待所有线程完成,然后测量当前时间。否则我会测量时间,一些线程仍在进行中。我想知道线程需要多长时间才能完成这些工作。您正在使用连接池吗?如果不是的话,你应该是。请参阅我不确定连接池配置(尝试使用c3p0)。我添加了sessionFactory的代码。为什么要使用循环中线程的join()方法?等待所有线程完成,然后测量当前时间。否则我会测量时间,一些线程仍在进行中。我想知道线程需要多长时间才能完成这些工作。您正在使用连接池吗?如果不是的话,你应该是。请参阅我不确定连接池配置(尝试使用c3p0)。我添加了sessionFactory的代码。
   class UpdateRandomThread2 implements Runnable {
String threadname;
Customer updateCustomer;

UpdateRandomThread2(String threadname, Customer customer) {
    this.threadname = threadname;
    this.updateCustomer = customer;
}

public void run() {


    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();

    com.sedicoloadtest2.MainStatisch.updateRandomCustomer(session, updateCustomer);

    session.getTransaction().commit();
    session.close();

}
}
    public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    Configuration configuration = configure();
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);
    return factory;
}

private static Configuration configure() {
    Configuration configuration = SedicoBootstrapper.getHibernateConfiguration()

        .setProperty("format.sql", "true")
        .setProperty("hibernate.current_session_context_class", "thread")
        .setProperty("hibernate.c3p0.min_size", "1")
        .setProperty("hibernate.c3p0.max_size", "1000")
        .addAnnotatedClass(Customer.class);

    return configuration;
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

}