Mysql_real_query висит в многопоточном приложении QuickFixC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Mysql_real_query висит в многопоточном приложении QuickFix

Сообщение Anonymous »

У нас есть простое приложение QuickFix, которое переводит исправления сообщений в наш собственный внутренний формат и наоборот.
состоит из двух потоков, одним из которых является Fix :: Application и Fix :: MessageCracker , а другая потока обрабатывает вход со стороны внутренней сети. как QuickFix использует для MySQLSTORE. Если DB находится под слишком большим стрессом, я ожидаю, что каждое отдельное исполнение будет постепенно дольше, но все равно должно закончить. Код или сигнал. Приложение Fix пытается сейф всех сообщений в своем магазине DB. Когда внутренний процесс выполняется, он отправляет обновление обратно в этот процесс, который переводит его обратно в сообщение о ответе Fix. Я не могу себе представить, что мы первыми попробовали это, но я не мог найти ничего, связанного с Googeling. < /P>
Вот типичный след стека. Как вы можете увидеть приложение Fix, пытается вставить новое сообщение в БД. Другие темы ничего не делают. Я отредактировал некоторые конфиденциальные данные из него. < /P>

Код: Выделить всё

(gdb) info threads
Id   Target Id         Frame
8    Thread 0x7f9689a8e700 (LWP 27627) "tgfix" 0x00007f968b7e09a3 in select () from /lib64/libc.so.6
7    Thread 0x7f968928d700 (LWP 27630) "tgfix" 0x00007f968b7b085d in nanosleep () from /lib64/libc.so.6
6    Thread 0x7f9688879700 (LWP 27664) "tgfix" 0x00007f968b7e09a3 in select () from /lib64/libc.so.6
5    Thread 0x7f967bfff700 (LWP 27665) "tgfix" 0x00007f968d0da75d in read () from /lib64/libpthread.so.0
4    Thread 0x7f967a5f5700 (LWP 10882) "tgfix" 0x00007f968b7b085d in nanosleep () from /lib64/libc.so.6
3    Thread 0x7f967b7fe700 (LWP 10883) "tgfix" 0x00007f968b7b085d in nanosleep () from /lib64/libc.so.6
2    Thread 0x7f967affd700 (LWP 10884) "tgfix" 0x00007f968d0d9b3b in do_futex_wait.constprop.1 () from /lib64/libpthread.so.0
* 1    Thread 0x7f968e82f880 (LWP 27626) "tgfix" 0x00007f968d0d9b3b in do_futex_wait.constprop.1 () from /lib64/libpthread.so.0
(gdb) t 5
[Switching to thread 5 (Thread 0x7f967bfff700 (LWP 27665))]
#0  0x00007f968d0da75d in read () from /lib64/libpthread.so.0
(gdb) bt
#0  0x00007f968d0da75d in read () from /lib64/libpthread.so.0
#1  0x00007f968e176d20 in vio_read () from /usr/lib64/mysql/libmysqlclient.so.18
#2  0x00007f968e176da1 in vio_read_buff () from /usr/lib64/mysql/libmysqlclient.so.18
#3  0x00007f968e15af3a in my_real_read(st_net*, unsigned long*) () from /usr/lib64/mysql/libmysqlclient.so.18
#4  0x00007f968e15bdac in my_net_read () from /usr/lib64/mysql/libmysqlclient.so.18
#5  0x00007f968e14e84c in cli_safe_read () from /usr/lib64/mysql/libmysqlclient.so.18
#6  0x00007f968e14fe1b in cli_read_query_result () from /usr/lib64/mysql/libmysqlclient.so.18
#7  0x00007f968e151056 in mysql_real_query () from /usr/lib64/mysql/libmysqlclient.so.18
#8  0x00000000004267d6 in MySql::Database::execute (this=this@entry=0x7fffd9eaacf8,
sql="insert into tg_messages_in (beginstring,sendercompid,targetcompid,session_qualifier,msgseqnum,clordid,message) values ('FIX.4.2', '', 'CUSTOMER', '', 1917, 'fix_1757507653635360943_1916', '8="...) at mysql.cpp:155
#9  0x000000000041f8f3 in FixApplication::persistLocally (this=this@entry=0x7fffd9eaace0, message=..., sessionid=...) at fixapplication.cpp:96
#10 0x00000000004209dc in FixApplication::fromApp (this=0x7fffd9eaace0, message=..., sessionid=...) at fixapplication.cpp:57
#11 0x000000000046659f in FIX::Session::verify (this=this@entry=0x1b49d10, msg=..., checkTooHigh=checkTooHigh@entry=true, checkTooLow=checkTooLow@entry=true) at Session.cpp:1159
#12 0x000000000046eaab in FIX::Session::next (this=this@entry=0x1b49d10, message=..., timeStamp=..., queued=queued@entry=false) at Session.cpp:1421
#13 0x000000000046fe8c in FIX::Session::next (this=0x1b49d10,
msg="8=FIX.4.2\001\071=187\001\063\065=D\001\063\064=1917\001\064\071=CUSTOMER\001\065\062=20250910-12:34:13.635\001\065\066=\001\061\061=fix_1757507653635360943_1916\001\061\070=G\001\062\061=1\001\063\070=1\001\064\060=D\001\064\064=999\001\064\070=DE0005439004\001\065\064=1\001\065\065=idontknow\001\066\060=20250910-12:34:13\001\061\060\060=TGO"..., timeStamp=..., queued=queued@entry=false)
at Session.cpp:1339
#14 0x0000000000480bd2 in FIX::SocketConnection::readMessages (this=this@entry=0x7f9674000be0, s=...) at SocketConnection.cpp:224
#15 0x0000000000480dbc in FIX::SocketConnection::read (this=0x7f9674000be0, a=..., s=...) at SocketConnection.cpp:170
#16 0x000000000047d2f1 in FIX::SocketAcceptor::onData (this=0x7fffd9eaafc0, server=..., s=6) at SocketAcceptor.cpp:196
#17 0x00000000004e41d0 in FIX::ServerWrapper::onEvent (this=0x7f967bffed20, monitor=..., socket=6) at SocketServer.cpp:60
#18 0x000000000047f4dc in FIX::SocketMonitor::processReadSet (this=this@entry=0x1baebf0, strategy=..., readSet=...) at SocketMonitor.cpp:260
#19 0x000000000047fa57 in FIX::SocketMonitor::block (this=this@entry=0x1baebf0, strategy=..., poll=poll@entry=false, timeout=timeout@entry=0) at SocketMonitor.cpp:219
#20 0x00000000004e3375 in FIX::SocketServer::block (this=0x1baeb90, strategy=..., poll=poll@entry=false, timeout=timeout@entry=0) at SocketServer.cpp:160
#21 0x000000000047e657 in FIX::SocketAcceptor::onStart (this=0x7fffd9eaafc0) at SocketAcceptor.cpp:113
#22 0x00000000004782fa in FIX::Acceptor::startThread (p=) at Acceptor.cpp:245
#23 0x00007f968d0d3ea5 in start_thread () from /lib64/libpthread.so.0
#24 0x00007f968b7e98dd in clone () from /lib64/libc.so.6

< /code>
ps: я знаю, что это, вероятно, ошибка в моем коде. Я не предполагаю, что нашел ошибку в libmysql 
или libquickfix . Тем не менее, мне было интересно, может ли могущественная сила Интернета сократить мои усилия, чтобы найти ошибку. Комментарии уже дали мне несколько новых идей, где искать. Особенно @Jesper Juhl < /p>
pps: мы используем Libmysql для доступа к серверу MariaDB. Если это не правильная комбинация, я был бы рад получить другой вариант.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ickfix-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»