| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > MqSql + hibernate +Spring |
| Автор: PovAnd 21.7.2008, 12:40 | ||
| Есть приложение работающие с БД в отдельные моменты интенсивно. Вот в такие моменты раз за разом получаю нижеидущий эксепшен. Как его побороть? 12:33:00,072 WARN JDBCExceptionReporter:77 | SQL Error: 0, SQLState: 08S01 12:33:00,072 ERROR JDBCExceptionReporter:78 | The driver was unable to create a connection due to an inability to establish the client portion of a socket. This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required. For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271). 12:33:00,072 WARN JDBCExceptionReporter:77 | SQL Error: 0, SQLState: 08S01 12:33:00,087 ERROR JDBCExceptionReporter:78 | The driver was unable to create a connection due to an inability to establish the client portion of a socket. This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required. For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271). 12:33:00,087 WARN MatchEventsReader:171 | org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:599) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy9.insert(Unknown Source) -------------- Конфиг sessionFactory в Spring для hibernate:
Как нужно (если можно) ее сконфигурить, так чтобы проблемы не было? |
| Автор: AntonSaburov 21.7.2008, 17:14 |
| Попробоавть поставить свойство hibernate.connection.pool_size побольше |
| Автор: chief39 22.7.2008, 22:30 |
| Пробовал? http://support.microsoft.com/kb/196271 Ты под какой осью? Добавлено через 1 минуту и 17 секунд Антон, тут 12:33:00,072 ERROR JDBCExceptionReporter:78 | The driver was unable to create a connection due to an inability to establish the client portion of a socket. Имхо, проблема с сокетами - это не уровень хибернейта. Оно прямым текстом намякиваеть на узкое горлышко оси |
| Автор: dejavu 10.1.2009, 17:38 |
| Вопрос на тему Нехватка connections MqSql + hibernate +Spring, . Ситуация Hоst Provider установил max кол-во активных конектов к MySQL = 30 и предположим увеличивать не хочет. Веб приложение на основе MqSql + hibernate +Spring требует от 10 - до 40 конектов и это без нагрузки в режиме теста 2-3 пользователя (при тесте на другом сервере где количество активных конектов установлено 100) Думаю возможная причина в настройке пула В моем случае пробую вот так , все равно создает больше конектов чем 30 <property name="hibernateProperties"> <props> .............. <!-- configuration pool via c3p0--> <prop key="hibernate.c3p0.min_size">5</prop> <prop key="hibernate.c3p0.max_size">20</prop> <prop key="hibernate.c3p0.initial_pool_size">20</prop> <prop key="hibernate.c3p0.timeout">5000</prop> <prop key="hibernate.c3p0.acquire_increment">1</prop> .................. </props> </property> Если у кого нибудь мысли как настроить пул чтобы вписаться в 30 и при этом по возможности повысить производительность Был бы благодарен за рекомендации в идеологии настройке пула , так как простое описание свойств в общем ничего не говорит В поиске на эту тему, складывается впечатление что каждый как хочет так и др.....т |
| Автор: skhilkov 11.1.2009, 10:09 |
| dejavu, не знаю какая у Вас функциональность, но мне кажется что 40 соединений для 2-3х пользователей - это многовато... думаю что стоит еще раз пересмотреть все места где устанавливабтся соединения... Хотя при всем при этом пул не должен вроде как позволять создавать больше подключений.... В общем по поводу c3p0 ничего не могу сказать... я пробовал его год назад, но у меня столько запарок вышло с его настройками, что я пересел на dbcp и с тех пор не знаю проблем... |
| Автор: barracuda477 11.1.2009, 16:25 | ||||
там указано про порты больше чем 5000, в то время как для мускуля по дефолту 3306 глянь http://dev.mysql.com/doc/refman/5.1/en/too-many-connections.html причиной может быть то, что все 30 коннекшенов реально юзаются и мускуль не может тебе выделить больше. я в хибернейте не силён, разбираюсь как раз. но предположу такие выходы: 1) увеличивать лимит коннекшинов в мускуле, например, с 30 до 100 (если хостер согласится) 2) закрывать коннекшены если они не юзаются, возможно твоё приложение всё время создаёт коннекшены вместо того, чтобы реюзать уже те, которые есть в пуле 3) заоптимайзить запросы (если выполняются долго. Кстати, индексы верно проставлены и юзаются? Сколько записей в самых больших таблицах? Насколько сложные запросы ?) Кстати, можно зайти на сервак мускуля и посмотреть что он делает через "showprocesslist".
+1 |
| Автор: dejavu 19.1.2009, 12:45 |
| Спасибо всем кто ответил, действительно проблема была не в настройке пула (хотя я считаю разобраться с ним стоило, считаю важная тема при разворачивании на реалном сервере ) а в не зарытых конектах, которые произошли от собственной не внимательности, кому интересно чтобы не наступали на грабли как я - проверьте закрывает гибернат сессии - здесь почти прямая зависимость сессия- конект в самом общем случае, если правильно настроили транзакт менеджера который и делает в в спринге это за вас все будет работать правильно |