forum.bitel.ru
http://forum.bitel.ru/

Too many opens file
http://forum.bitel.ru/viewtopic.php?f=54&t=12000
Страница 1 из 1

Автор:  abu [ 10 окт 2016, 09:08 ]
Заголовок сообщения:  Too many opens file

Имеется самодельный скрипт по отправке 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 КБ]
Скачиваний: 516

Автор:  dimOn [ 10 окт 2016, 14:49 ]
Заголовок сообщения:  Re: Too many opens file

Цитата:
После отработки скрипта, формируются файлы для sms-рассылки, а у процесса шедулера появляются такие открытые файлы, по одному на каждый файл sms-рассылки, созданный скриптом:
это же не файлы, а tcp-соединения там написано жеж

Автор:  dimOn [ 10 окт 2016, 14:53 ]
Заголовок сообщения:  Re: Too many opens file

вам надо closeConnection наверно делать всё же, желательно в виде:

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


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

Автор:  abu [ 10 окт 2016, 16:43 ]
Заголовок сообщения:  Re: Too many opens file

dimOn писал(а):
Цитата:
После отработки скрипта, формируются файлы для sms-рассылки, а у процесса шедулера появляются такие открытые файлы, по одному на каждый файл sms-рассылки, созданный скриптом:
это же не файлы, а tcp-соединения там написано жеж


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

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

Автор:  dimOn [ 10 окт 2016, 17:01 ]
Заголовок сообщения:  Re: Too many opens file

ну увеличить тоже нужно если у вас мало ( http://wiki.bitel.ru/index.php/%D0%9E%D ... n_files%22 ), но соединения всё равно закрывать надо

Автор:  abu [ 11 окт 2016, 06:49 ]
Заголовок сообщения:  Re: Too many opens file

Переписал код, проблема решилась. Спасибо!

Автор:  stark [ 23 дек 2016, 14:34 ]
Заголовок сообщения:  Re: Too many opens file

Не вызывайте никогда
Код:
 Connection con = mysetup.getDBConnection();


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


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

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/