Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с исключениями в многопоточной программе, Виснет при генерации исключений 
:(
    Опции темы
Shutdown
Дата 26.8.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.8.2008

Репутация: нет
Всего: нет



Есть некоторый сервер под FreeBSD 7.0, обрабатывающий параллельные запросы в потоках. Замечено, что он периодически подвисает и при этом загрузка проца зашкаливает (100 и более). Kill -11 и последующий анализ в gdb показал что проблема в генерации исключений. Написал тестовый скрипт, который просто создает пул потоков, которые в свою очередь генерят и ловят исключения. Когда потоков достаточно много (порядка 100-200) и они "плотно" кидают исключения, наблюдается описанный эффект. Прикол в том, что под Линухом все ок, траблы только на Фряхе, причем на нескольких серверах с разными конфигурациями.
Код потоковой процедуры:

Код


      void ThreadProc()
      {
              cerr << "I'm working!!!" << endl;

              srand(time(NULL));
              unsigned int seedTmp;

              //Throw and catch 10 exceptions
              for (int i = 0;i < 10;i++)
              {
                  try
                  {
                      //random waiting between throws
                      int rand = (int) (500000 * ( (double) rand_r (&seedTmp) / RAND_MAX));
                      usleep(rand);
       
                      throw std::exception ();
                  }
                  catch (ExceptionBase &e)
                  {
                      cerr << "Exception "<<i<<" has been caught" << endl;
                  }
              }
      }


 стек зависшей проги:
(gdb) where
#0 0x0000000801554636 in __fixunssfti () from /lib/libgcc_s.so.1
]#1 0x00000008005c6343 in dl_iterate_phdr () from /libexec/ld-elf.so.1
#2 0x0000000801554bdf in _Unwind_Find_FDE () from /lib/libgcc_s.so.1
#3 0x0000000801551525 in _Unwind_GetIPInfo () from /lib/libgcc_s.so.1
#4 0x000000080155296e in _Unwind_RaiseException () from /lib/libgcc_s.so.1
#5 0x00000008012a2abd in __cxa_throw () from /usr/lib/libstdc++.so.6

Для генерации потоков использую boost 1.34-1.35 поверх libthr или libpthread.

Это сообщение отредактировал(а) Shutdown - 26.8.2008, 21:26
PM MAIL   Вверх
MAKCim
Дата 26.8.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Shutdown, 
вопрос в чем?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Shutdown
Дата 26.8.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.8.2008

Репутация: нет
Всего: нет



Цитата(MAKCim @ 26.8.2008,  22:04)
Shutdown, 
вопрос в чем?

Когда долго мучаешься с проблемой, кажется, что она ясна сама собой  smile ... Вопрос в том, почему виснет и как от этого избавиться, т.к. я не вижу в своем коде (в реальном и в тестовом) ничего предосудительного.
PM MAIL   Вверх
MAKCim
Дата 26.8.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



попробуй новую libstdc++ поставить


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
aarrttzz
Дата 27.8.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.8.2008

Репутация: нет
Всего: нет



PM MAIL   Вверх
Shutdown
Дата 27.8.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.8.2008

Репутация: нет
Всего: нет



Спасибо, буду патчить! Сколько ни пробовал искать, не видел этого багрепорта. Плохо искал, значит...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.