xdenser / node-firebird-libfbclient

Firebird SQL binding
MIT License
82 stars 34 forks source link

Node process crashes (question) #102

Open mreis1 opened 4 years ago

mreis1 commented 4 years ago

Hello @xdenser. I hope you are doing well.

Recently I started noticing mysterious process crashes on my app (in 1 hour i had 2/3 process crashes). Do you think this might be related with this lib?

Normally, when the crash takes place, only db operations are taking place but attempting to reproduce the same steps that were taking place before the process crash doesn't necessary lead us to reproduce the error.

As far as I know it, it seems completely random. Hope you can point em in the right direction.

Thank you

PID 22123 received SIGSEGV for address: 0x20
0   segfault-handler.node               0x0000000104f5a070 _ZL16segfault_handleriP9__siginfoPv + 304
1   libsystem_platform.dylib            0x00007fff67e0442d _sigtramp + 29
2   ???                                 0x0000000000000001 0x0 + 1
3   node                                0x00000001009b26d2 uv__work_done + 178
4   node                                0x00000001009b5cc3 uv__async_io + 317
5   node                                0x00000001009c60fb uv__io_poll + 1934
6   node                                0x00000001009b6139 uv_run + 315
7   node                                0x0000000100044831 _ZN4node5StartEPN2v87IsolateEPNS_11IsolateDataERKNSt3__16vectorINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENSA_ISC_EEEESG_ + 976
8   node                                0x0000000100043d3c _ZN4node5StartEP9uv_loop_sRKNSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEESD_ + 326
9   node                                0x0000000100043886 _ZN4node5StartEiPPc + 740
10  node                                0x0000000100001034 start + 52
11  ???                                 0x0000000000000002 0x0 + 2
mreis1 commented 4 years ago

node v10.20.1 firebird (3.0.5)

var fb = require('firebird');
var con = fb.createConnection();
var fs = require('fs');
var SegfaultHandler = require('segfault-handler');
var password = process.env['FB_PASSWORD'];
var user = process.env['FB_USER'];
var db = '192.168.0.195/3050:C:\\_MARCIO_DEV\\04_databases\\TEST_DB.fdb'
var extendCon = require('./util');
console.log(extendCon)

SegfaultHandler.registerHandler("crash.log"); // With no argument, SegfaultHandler will generate a generic log file name

con.connect(db, user, password,'', function(err){
    console.log(err ? 'Error' : 'Success');
    console.log(err);

    if (err) return ;
    extendCon(con);

    let promStack = [
        con.queryP('SELECT * FROM CLIENTS')
    ];

    Promise.all(promStack)
        .then((qresList) => {
            return qresList[0].fetchAllP();
        })
        .then((rows) => {
            console.log(rows);
            con.commitSync();
        })
        .catch((err) => {
            console.log('Err ', err);
            con.rollbackSync();
        })
        .finally(() => {
            console.log('Disconnecting')
            setTimeout(() => {
                con.disconnect();
                console.log('Disconnected')

                /**
                Without the setTimeout below, a segfault is thrown
                PID 6686 received SIGSEGV for address: 0x59e0
                0   segfault-handler.node               0x0000000102f72050 _ZL16segfault_handleriP9__siginfoPv + 304
                1   libsystem_platform.dylib            0x00007fff7425042d _sigtramp + 29
                2   node                                0x00000001018dfa0c _ZL12utrace_level + 153020
                3   node                                0x000000010000d68c _ZN4node16EmitAsyncDestroyEPN2v87IsolateENS_13async_contextE + 29
                4   libsystem_c.dylib                   0x00007fff740fb446 __cxa_finalize_ranges + 319
                5   libsystem_c.dylib                   0x00007fff740fb71c exit + 55
                6   node                                0x000000010000103b start + 59
                7   ???                                 0x0000000000000002 0x0 + 2
                Segmentation fault: 11
                */
                setTimeout(() => {
                    console.log('Process exit');
                    process.exit(0);
                },1000)
            },4000)
        })  
});
mreis1 commented 4 years ago

Here are some additional conclusions from my recent tests. Same program on all tests.

At certain point in my app, there was a query that was generating a SQL error (for example Invalid FK). What I expect, is an error to be thrown but the process would stay alive.

Here's the test results: Mac: Firebird 0.1.3 - App stays alive Mac: Firebird 0.1.4 - App stays alive Win64: Firebird 0.1.4 - Process exits mysteriously Win64: Firebird 0.1.3 - then I replaced binding.node@0.1.4 by a binding.node@0.1.3 and the app works

mreis1 commented 4 years ago

I came up with a similar error in version 0.1.3 although it happens less often than with version 0.1.4. Most of time I get a crash, the server is processing multiple parallel HTTP requests.

In my last crash I was running some stress testing on my http server with autocannon.

The latest error I had: PID 23887 received SIGSEGV for address: 0x127 0 segfault-handler.node 0x0000000107f1d040 _ZL16segfault_handleriP9siginfoPv + 304 1 libsystem_platform.dylib 0x00007fff67e2642d _sigtramp + 29 2 ??? 0x00002a97ef5826f1 0x0 + 46832043960049 3 node 0x00000001009dffac uvwork_done + 176 4 node 0x00000001009e3531 uvasync_io + 294 5 node 0x00000001009f2d36 uvio_poll + 1665 6 node 0x00000001009e396a uv_run + 359 7 node 0x0000000100041c00 _ZN4node5StartEPN2v87IsolateEPNS_11IsolateDataERKNSt316vectorINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENSA_ISCEEEESG + 946 8 node 0x0000000100040cc2 _ZN4node5StartEP9uv_loop_sRKNSt316vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9EEEESD + 329 9 node 0x0000000100040984 _ZN4node5StartEiPPc + 681 10 node 0x0000000100001034 start + 52

Full crash log available here : https://paste.itefix.net/?b71e7c351d5531ae#5K6t2PSffFwfAan996SX1AADEkPiwRnDwe8nXCSi9iGX