BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 05:30

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Too many opens file
СообщениеДобавлено: 10 окт 2016, 09:08 
Не в сети
Клиент

Зарегистрирован: 10 окт 2012, 17:00
Сообщения: 339
Карма: 0
Имеется самодельный скрипт по отправке sms-рассылок, появились ошибки на тему "Too many opens file", лог в приложении. Сперва думал, что косячит скрипт, но в нем вроде как все что нужно закрывается (SQL-запрос и файлы, сформированные для рассылок sms). Скрипт работает уже четвертый год, ранее таких проблем не было, хотя, конечно, исключать его нельзя, писатель на Яве из меня посредственный:
Код:
public class sms
   implements Sender
{
   @Override
   public void send( Contact contact1, String string2, String string3, List<DataSource> list4 )
   throws BGException
   {
         Setup mysetup = Setup.getSetup();
          String status = "";         
         Connection con = mysetup.getDBConnection();

         try {
               PreparedStatement ps = con.prepareStatement( "SELECT status FROM contract WHERE id=? " );
                ps.setInt( 1, contact1.getContractId() );
               ResultSet rs = ps.executeQuery();

               while( rs.next() )
               status = rs.getString( 1 );
               
               rs.close();
               ps.close();

            }
            catch (Exception e){
                             //print( "error");
                            }      
      if ( status.equals("0") ){

      try{   
            String queryStr =string3;
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            String filePath = "/home/bg52/sms1/" + contact1.getValue() + "_" + timeStamp + "_" +Integer.toString(contact1.getContractId());

            PrintWriter out = null;
         
      try
         {   
            out = new PrintWriter(new File(filePath).getAbsoluteFile(), "UTF-8");
         }
      catch(FileNotFoundException e) { throw new RuntimeException(e);   }

                   out.print(queryStr);
                   out.close();
      }
      
      catch (UnsupportedEncodingException e) {   throw new AssertionError("UTF-8 not supported");}
      }
   }

}


После отработки скрипта, формируются файлы для sms-рассылки, а у процесса шедулера появляются такие открытые файлы, по одному на каждый файл sms-рассылки, созданный скриптом:
Цитата:
...
java 51711 root 758u IPv4 40679898 0t0 TCP localhost.localdomain:56366->localhost.localdomain:mysql (ESTABLISHED)
java 51711 root 760u IPv4 40679902 0t0 TCP localhost.localdomain:56368->localhost.localdomain:mysql (ESTABLISHED)
java 51711 root 763u IPv4 40679910 0t0 TCP localhost.localdomain:56371->localhost.localdomain:mysql (ESTABLISHED)
java 51711 root 765u IPv4 40679916 0t0 TCP localhost.localdomain:56373->localhost.localdomain:mysql (ESTABLISHED)
java 51711 root 777u IPv4 40679950 0t0 TCP localhost.localdomain:56385->localhost.localdomain:mysql (ESTABLISHED)
java 51711 root 780u IPv4 40679959 0t0 TCP localhost.localdomain:56388->localhost.localdomain:mysql (ESTABLISHED)


Если после этого перезапустить шедулер, эти файлы закрываются. Если смотреть файлы у процесса шедулера позже, то можно увидеть вот такие записи:
Цитата:
java 17169 root 175u sock 0,6 0t0 40319208 can't identify protocol
java 17169 root 176u sock 0,6 0t0 40319210 can't identify protocol
java 17169 root 179u sock 0,6 0t0 40319218 can't identify protocol
java 17169 root 183u sock 0,6 0t0 40319230 can't identify protocol
java 17169 root 184u sock 0,6 0t0 40319232 can't identify protocol
java 17169 root 187u sock 0,6 0t0 40319239 can't identify protocol
java 17169 root 204u sock 0,6 0t0 40319278 can't identify protocol
java 17169 root 206u sock 0,6 0t0 40319282 can't identify protocol
java 17169 root 212u sock 0,6 0t0 40319295 can't identify protocol
java 17169 root 214u sock 0,6 0t0 40319301 can't identify protocol


Если дело в скрипте, прошу подсказать, где может быть ошибка.

Цитата:
Информация о версии:

Клиент: вер. 6.2.835 / 10.08.2016 16:56:20
os: Linux; java: Java HotSpot(TM) Server VM, v.1.8.0_74
Сервер: вер. 6.2.1108 / 24.08.2016 15:03:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_74

assist: вер. 6.2.87 / 13.07.2016 17:32:04
bill: вер. 6.2.87 / 10.06.2016 13:28:18
card: вер. 6.2.39 / 26.05.2016 14:50:45
dba: вер. 6.2.163 / 02.02.2016 17:42:00
enaza: вер. 6.2.59 / 19.04.2016 21:47:47
gorod: вер. 6.2.164 / 01.03.2016 00:18:32
inet: вер. 6.2.684 / 24.08.2016 15:03:21
mps: вер. 6.2.214 / 14.07.2016 16:43:28
npay: вер. 6.2.196 / 20.07.2016 09:56:08
paylinks: вер. 6.2.31 / 02.02.2016 17:42:04
qiwi: вер. 6.2.48 / 14.07.2016 14:11:51
rentsoft: вер. 6.2.62 / 10.08.2016 16:52:23
reports: вер. 6.2.211 / 22.08.2016 15:50:48
rscm: вер. 6.2.177 / 10.06.2016 13:40:20
ru.bitel.bgbilling.plugins.cladr: вер. 6.2.119 / 02.02.2016 17:42:00
ru.bitel.bgbilling.plugins.dispatch: вер. 6.2.85 / 11.07.2016 17:32:00
trayinfo: вер. 6.2.170 / 02.02.2016 17:42:09
tv: вер. 6.2.227 / 10.08.2016 16:45:16
wellpay: вер. ?
wm: вер. 6.2.188 / 29.07.2016 16:09:59
yamoney: вер. 6.2.57 / 19.04.2016 21:47:48

Окружение:

Клиент:
os: Linux i386, 3.13-1-amd64
java: Java HotSpot(TM) Server VM, v.1.8.0_74
jre home: /opt/java/jdk1.8.0_74/jre
default tz: 10.10.2016 12:06 YAKT +0900 (Asia/Yakutsk)
user tz: 10.10.2016 12:06 YAKT +0900 (Asia/Yakutsk)
locale: ru_RU
Сервер:
os: Linux amd64, 2.6.32-el-smp-alt27
java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_74
jre home: /opt/java/jdk1.8.0_74/jre
default tz: 10.10.2016 12:06 YAKT +0900 (Asia/Yakutsk)
db time: master: 10.10.2016 12:06 YAKT
db charset: connection: utf8(utf8_general_ci), database: cp1251(cp1251_general_ci)
locale: en_US
uptime: Started: 22.09.2016 15:51:07 Uptime: 17 d 20:15:27


Вложения:
log.txt [7.82 КБ]
Скачиваний: 505
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 10 окт 2016, 14:49 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
После отработки скрипта, формируются файлы для sms-рассылки, а у процесса шедулера появляются такие открытые файлы, по одному на каждый файл sms-рассылки, созданный скриптом:
это же не файлы, а tcp-соединения там написано жеж

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 10 окт 2016, 14:53 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
вам надо closeConnection наверно делать всё же, желательно в виде:

Код:
....
Connection con = mysetup.getDBConnection();
try
{
...ваш код...
}
finally
{
   ServerUtils.closeConnection( con );
}


хотя ему вроде упасть негде, вы всё обернули в трайкетч, потому просто можно в конце закрыть, или не в конце а даже перед if ( status.equals("0") ), т.к. дальше его уже не нужно вам

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 10 окт 2016, 16:43 
Не в сети
Клиент

Зарегистрирован: 10 окт 2012, 17:00
Сообщения: 339
Карма: 0
dimOn писал(а):
Цитата:
После отработки скрипта, формируются файлы для sms-рассылки, а у процесса шедулера появляются такие открытые файлы, по одному на каждый файл sms-рассылки, созданный скриптом:
это же не файлы, а tcp-соединения там написано жеж


"Все есть файл", инфу выводит утилита lsof (list of open files), ошибка тоже про файлы, поэтому я под одну гребенку и назвал (: Но, конечно, это соединения.

Попробую закрывать соединения по вашему совету, спасибо. Мб, стОит еще попробовать увеличить количество одновременно открытых системой файлов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 10 окт 2016, 17:01 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
ну увеличить тоже нужно если у вас мало ( http://wiki.bitel.ru/index.php/%D0%9E%D ... n_files%22 ), но соединения всё равно закрывать надо

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 11 окт 2016, 06:49 
Не в сети
Клиент

Зарегистрирован: 10 окт 2012, 17:00
Сообщения: 339
Карма: 0
Переписал код, проблема решилась. Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Too many opens file
СообщениеДобавлено: 23 дек 2016, 14:34 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Не вызывайте никогда
Код:
 Connection con = mysetup.getDBConnection();


Всегда вызывайте:
Код:
getDBConnectionFromPool()


И всегда его закрывайте. Данный код создавал бесконечное соединение к базе(брали не из пула, с создавали каждый раз новое), которые не закрывались вообще.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.077s | 33 Queries | GZIP : On ]