[Quickfix-developers] Stability problems
Brought to you by:
orenmnero
|
From: Loic G. <loi...@sw...> - 2002-10-10 17:52:19
|
I have implemented a buy-side with Quickfix which I hope to use in prod
soon.
The platform is Solaris 8 sparc multi-processor.
compiler is gcc 2.95.3
The application runs well when heartbeating and under light load.
I have severe instability problems when I apply a load test of 50 orders
in one
go. This happens systematically.
I believe I am experiencing the problems described by Gene Gorokhovsky
with the
threading issues. The results so far are segmentation faults, bus errors
and
also perhaps a deadlock... The latter being hard for me to troubleshoot as
I am not an expert on threads.
An alarming point for me is the following:
At times that the engine crashes, I can lose messages. This also seems to
go along
the message from Constantin about crash scenarios.
Now my questions are:
- Is quickfix known to be unstable on some platforms ( eg Sun)
- Is there a preferred platform / architecture to use it.
( OS/ single or multi-proc/ Threaded or non threaded...)
I have tried both threaded and non threaded socket initiators
with no luck.
Any feedback on what to do would be great.
An example from attaching gdb to the process:
Reading symbols from /usr/lib/libpthread.so.1...done.
Reading symbols from /usr/lib/librt.so.1...done.
Reading symbols from /usr/local/lib/libxml2.so.2...done.
Reading symbols from /usr/lib/libz.so...done.
Reading symbols from /usr/lib/libsocket.so.1...done.
Reading symbols from /usr/lib/libnsl.so.1...done.
Reading symbols from /usr/local/lib/libstdc++.so.2.10.0...done.
Reading symbols from /usr/lib/libm.so.1...done.
Reading symbols from /usr/lib/libc.so.1...done.
Reading symbols from /usr/lib/libaio.so.1...done.
Reading symbols from /usr/lib/libdl.so.1...done.
Reading symbols from /usr/lib/libmp.so.2...done.
Reading symbols from /usr/platform/SUNW,Ultra-80/lib/libc_psr.so.1...done.
Reading symbols from /usr/lib/libthread.so.1...done.
sol-thread active.
Symbols already loaded for /usr/lib/libpthread.so.1
Symbols already loaded for /usr/lib/librt.so.1
Symbols already loaded for /usr/local/lib/libxml2.so.2
Symbols already loaded for /usr/lib/libz.so
Symbols already loaded for /usr/lib/libsocket.so.1
Symbols already loaded for /usr/lib/libnsl.so.1
Symbols already loaded for /usr/local/lib/libstdc++.so.2.10.0
Symbols already loaded for /usr/lib/libm.so.1
Symbols already loaded for /usr/lib/libc.so.1
Symbols already loaded for /usr/lib/libaio.so.1
Symbols already loaded for /usr/lib/libdl.so.1
Symbols already loaded for /usr/lib/libmp.so.2
Symbols already loaded for /usr/platform/SUNW,Ultra-80/lib/libc_psr.so.1
Symbols already loaded for /usr/lib/libthread.so.1
0xff0194a0 in door_restart () from /usr/lib/libc.so.1
(gdb) continue
Continuing.
[New Thread 4 (LWP 5)]
[Switching to Thread 4 (LWP 5)]
Program received signal SIGSEGV, Segmentation fault.
0x142130 in __default_alloc_template<false, 0>::allocate (__n=32)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/stl_alloc.h:422
422 *__my_free_list = __result -> _M_free_list_link;
(gdb) bt
#0 0x142130 in __default_alloc_template<false, 0>::allocate (__n=32)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/stl_alloc.h:422
#1 0xc5148 in
__nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b0i0_3RepUiUi
(s=16, extra=16)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/std/bastring.cc:33
#2 0xc5488 in basic_string<char, string_char_traits<char>,
__default_alloc_template<false, 0> >::Rep::create (extra=16)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/std/bastring.cc:60
#3 0xc858c in basic_string<char, string_char_traits<char>,
__default_alloc_template<false, 0> >::replace (this=0xfeeff390, pos=0,
n1=0,
s=0x24c2e0 "164\0306421", n2=3)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/std/bastring.cc:164
#4 0x165d34 in basic_string<char, string_char_traits<char>,
__default_alloc_template<false, 0> >::assign (this=0xfeeff390, s=0x24c2e0
"164\0306421", n=3)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/std/bastring.h:218
#5 0x196d98 in basic_string<char, string_char_traits<char>,
__default_alloc_template<false, 0> >::basic_string (this=0xfeeff390,
s=0x24c2e0 "164\0306421",
n=3)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/std/bastring.h:176
#6 0x18cf30 in stringbuf::str (this=0xfeeff29c)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/sstream:77
#7 0x1a0ca0 in stringstream::str (this=0xfeeff290)
at
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/../../../../include/g++-3/sstream:330
#8 0x1a3b98 in FIX::CheckSumConvertor::convert (value=164)
at FieldConvertors.h:115
#9 0x1a1810 in FIX::CheckSumField::CheckSumField (this=0xfeeff4f0,
field=10,
data=164) at Field.h:328
#10 0x19e960 in FIX::CheckSum::CheckSum (this=0xfeeff4f0, value=164)
at Fields.h:68
#11 0x192ff8 in FIX::Message::checkSum (this=0xfeeffac8) at Message.h:292
#12 0x188a40 in FIX::Message::getString (this=0xfeeffac8) at Message.h:147
#13 0xae760 in FIX::Session::sendRaw (this=0x251b28, message=@0xfeeffac8,
msgSeqNum=0) at Session.cpp:323
#14 0xae498 in FIX::Session::send (this=0x251b28, message=@0xfeeffac8)
at Session.cpp:293
#15 0xb3950 in FIX::Session::sendToTarget (message=@0xfeeffac8)
at Session.cpp:849
#16 0x91278 in Application::enterOrderSingle (this=0xffbefc40, mapOrd={
_M_t = {<_Rb_tree_base<pair<const
basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >,basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > >,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > > >>
= {<_Rb_tree_alloc_base<pair<const
basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >,basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > >,allocator<basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > >,>>
= {_M_header = 0x26d250}, <No data fields>},
_M_node_count = 31,
_M_key_compare =
{<binary_function<basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >,basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >,bool>>
= {<No data fields>}, <No data f---Type <return> to continue, or q
<return> to quit---
ields>}}}) at Application.cpp:1064
#17 0x8f3d4 in Application::onRun (this=0xffbefc40) at Application.cpp:827
#18 0xb6c5c in FIX::Initiator::startThread (p=0xffbefb58) at
Initiator.cpp:151
(gdb)
Loic Guezennec
|