Closed einfallstoll closed 9 years ago
Can you post the output of valgrind -q node app.js
? Cheers.
==21812== Warning: noted but unhandled ioctl 0x5451 with no size/direction hints
==21812== This could cause spurious value errors to appear.
==21812== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
==21812== Warning: noted but unhandled ioctl 0x5451 with no size/direction hints
==21812== This could cause spurious value errors to appear.
==21812== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
==21812== Warning: noted but unhandled ioctl 0x5451 with no size/direction hints
==21812== This could cause spurious value errors to appear.
==21812== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
vex amd64->IR: unhandled instruction bytes: 0xF 0x29 0xE1 0xE9 0x1B 0xFF 0xFF 0xFF
==21812== valgrind: Unrecognised instruction at address 0x364d807b40cf.
==21812== at 0x364D807B40CF: ???
==21812== by 0x364D807AF0E2: ???
==21812== by 0x364D807AEE25: ???
==21812== by 0x364D807AEC58: ???
==21812== by 0x364D8070D1E9: ???
==21812== by 0x364D807AEA12: ???
==21812== by 0x364D807AE7F6: ???
==21812== by 0x364D80797AD2: ???
==21812== by 0x364D807122BD: ???
==21812== by 0x364D807640CF: ???
==21812== by 0x364D8075F184: ???
==21812== by 0x364D8075B2B5: ???
==21812== by 0x364D8074A426: ???
==21812== by 0x364D8070CCCD: ???
==21812== by 0x364D80766116: ???
==21812== by 0x364D80765F88: ???
==21812== by 0x364D80794450: ???
==21812== by 0x364D807122BD: ???
==21812== by 0x364D807640CF: ???
==21812== by 0x364D8075F184: ???
==21812== by 0x364D8075B2B5: ???
==21812== by 0x364D8074A426: ???
==21812== by 0x364D8070CCCD: ???
==21812== by 0x364D80766116: ???
==21812== by 0x364D80765F88: ???
==21812== by 0x364D80764CE5: ???
==21812== by 0x364D807122BD: ???
==21812== by 0x364D807640CF: ???
==21812== by 0x364D8075F184: ???
==21812== by 0x364D8075B2B5: ???
==21812== by 0x364D8074A426: ???
==21812== by 0x364D80749DEA: ???
==21812== by 0x364D8072E238: ???
==21812== by 0x364D8072D7BE: ???
==21812== by 0x364D8070D506: ???
==21812== by 0x364D80706115: ???
==21812== by 0x73B901: v8::internal::Invoke(bool, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, bool*) (in /usr/local/bin/node)
==21812== by 0x73CD05: v8::internal::Execution::Call(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, bool*, bool) (in /usr/local/bin/node)
==21812== by 0x6DE33F: v8::Function::Call(v8::Handle<v8::Object>, int, v8::Handle<v8::Value>*) (in /usr/local/bin/node)
==21812== by 0x9840C9: node::Load(v8::Handle<v8::Object>) (in /usr/local/bin/node)
==21812== by 0x98427C: node::Start(int, char**) (in /usr/local/bin/node)
==21812== by 0x5C0DC35: (below main) (in /lib64/libc-2.11.3.so)
==21812== Your program just tried to execute an instruction that Valgrind
==21812== did not recognise. There are two possible reasons for this.
==21812== 1. Your program has a bug and erroneously jumped to a non-code
==21812== location. If you are running Memcheck and you just saw a
==21812== warning about a bad jump, it's probably your program's fault.
==21812== 2. The instruction is legitimate but Valgrind doesn't handle it,
==21812== i.e. it's Valgrind's fault. If you think this is the case or
==21812== you are not sure, please let us know and we'll try to fix it.
==21812== Either way, Valgrind will now raise a SIGILL signal which will
==21812== probably kill your program.
==21812==
==21812== Process terminating with default action of signal 4 (SIGILL): dumping core
==21812== Illegal opcode at address 0x364D807B40CF
==21812== at 0x364D807B40CF: ???
==21812== by 0x364D807AF0E2: ???
==21812== by 0x364D807AEE25: ???
==21812== by 0x364D807AEC58: ???
==21812== by 0x364D8070D1E9: ???
==21812== by 0x364D807AEA12: ???
==21812== by 0x364D807AE7F6: ???
==21812== by 0x364D80797AD2: ???
==21812== by 0x364D807122BD: ???
==21812== by 0x364D807640CF: ???
==21812== by 0x364D8075F184: ???
==21812== by 0x364D8075B2B5: ???
Killed
I infer that you're using an old distro like RHEL 5 or Centos 5? glibc 2.11 is pretty ancient and those unhandled ioctls warnings I fixed back in 2012 so your valgrind is probably none too recent either.
I'm not sure how to go from here. Perhaps you can obtain a more recent version of valgrind from a backports repo?
Linux version and distribution:
Linux version 3.0.101-0.46-default (geeko@buildhost) (gcc version 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux) )
SUSE Linux Enterprise Server 11 SP3 (x86_64)
valgrind
version:
valgrind-3.7.0
I will try to get a more recent version of valgrind
and test again.
Ok. Running valgrind-3.10.1
got me 15k lines of errors (see here). There must be something extremely wrong and I assume it's the instant client itself.
Now that you mention it... I remember looking into that way back when, thinking we probably initialized the library wrong, but even the simplest OCIEnvCreate(&env, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
would spew hundreds of warnings.
What can I do now? My app will crash after a few statements with a segmentation fault and I have no idea where it comes from.
Can you run your app in gdb a few times (gdb --args node app.js
, followed by run
) and post the post-crash backtrace (thread apply all backtrace full
)? Perhaps there is some kind of pattern to the stack traces that can point us in the right direction.
I'm afraid I don't see anything obviously wrong. The first stack trace at least show a memory allocation taking place but I don't see anything like that in the second one.
Do you happen to have a newer Linux system where you can do a quick test on?
Unfortunately no. If I tested it against some other Linux we wouldn't be allowed to use it, because SLES 11, SP3 is our standard operating system for servers.
Aw, okay. Do you have a support contract with StrongLoop? I think the logical next step would be to set up an environment identical to yours and see if I can reproduce but I can't justify the expenditure and the hours if you're not a client.
I resolved the issue by rewriting the application to use the official oracledb
. It's sad that I had to do this, but it seems like it's working without issues now.
There must be some error in
strong-oracle
ornode.js
. I use ageneric-pool
for connection pooling (I don't trust the built in connection pool, since I made very bad experiences in the past) and make a very simple request on one of our database. All connection options are set to default and there is just one connection.