Używamy CX_ORACLE, aby połączyć wiele wątków do bazy danych i wydać różne wybory i aktualizacje. Jednak z nieznanych powodów skrypt jest zabijany przez system na losowych połączeniach bazy danych. Nie ma informacji w plikach syslog ani wiadomości.

Ze względu na obsługę błędu próbujemy napisać Tracebacks w Dogfile. Niestety nie mamy żadnych informacji o wypadku skryptu w dzienniku. Tylko w Stdout to wydruk z "PID zabity" w ostatniej linii.

Czy może to być problem, aby połączenia bazy danych z wieloma wątkami w tym samym czasie? W tym samym czasie znajdują się również inne skrypty, które również rozmawiają z bazą danych (nie multi-gwinted), ale dostęp do innych tabel.

To jest nasza funkcja, która jest wywoływana dla każdego wyboru. Aby uzyskać aktualizacje mamy inne funkcje.

def ora_send_sql( logger, statement):
    try:
        dsn = cx_Oracle.makedsn(SQL_IP, SQL_PORT, SQL_SID)
        con = cx_Oracle.connect(SQL_USR, SQL_PWD, dsn)
        cur = con.cursor()
        cur.execute(statement)
        con.commit()
        con.close()
        return 0
    except cx_Oracle.Warning as w:
        logger.warning(" Oracle-Warning: "+ str(e).strip())
        pass
    except cx_Oracle.Error as e:
        error, = exc.args
        logger.error(" Oracle-Error-Code:", error.code)
        logger.error(" Oracle-Error-Message:", error.message)
        return -1
    except:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        logger.exception(" Got Traceback in ora_send_sql: " + str(exc_type) + " Fname=" + str(fname) + " Lineno=" + str(exc_tb.tb_lineno))
        return -2
1
Daniel 5 czerwiec 2018, 10:08

3 odpowiedzi

Najlepsza odpowiedź

Myślę, że naprawiliśmy problem, aktualizując CX_ORAULACLE do najnowszej wersji. Naprawiono kilka wycieków pamięci w aktualizacjach .....

Ale to nadal nie wyjaśnia, dlaczego nie widzimy żadnych informacji o zabijaniu ....

0
Daniel 5 czerwiec 2018, 11:31

Prawie na pewno trzeba użyć threaded=True w połączeniu {{x1} Rel = "Nofollow NefErr"> http://cx-oral.readthedoc.io/pl/latest/module.html#cx_Oracle.Connection

0
Christopher Jones 5 czerwiec 2018, 23:37

Nie przypuszczam, że próbowałeś obracać, z wyjątkiem: w wyjątku wyjątku jak e, a następnie próbuje sprawdzić, czy wyjątek jest nieco wyjątkowy. Inną możliwą rzeczą, aby spróbować całkowicie usunąć obsługę wyjątku i pozwalając na awarię, a następnie zbadając wyjście. W ten sposób możesz dostrzec rzeczywisty wyjątek, który jest rzucony, ponieważ po prostu nie mogę uwierzyć, że to tylko "wypadek". Wreszcie spróbuj badać DMESG dla dowolnych segfaults.

0
ItsKishan 5 czerwiec 2018, 07:36