1 つ以上のジョブを同時に (またはシステムの CPU の数によっては同時に) 実行するジョブ サーバーを作成しました。作成されたジョブの多くは、SQL Server データベースに接続し、クエリを実行し、結果をフェッチして、結果を CSV ファイルに書き込みます。これらのタイプのジョブではpyodbc
、Microsoft SQL Server ODBC Driver 1.0 for Linux を使用して接続し、クエリを実行してから切断します。
各ジョブは、python multiprocessing モジュールを使用して個別のプロセスとして実行されます。ジョブ サーバー自体は、二重にフォークされたバックグラウンド プロセスとして開始されます。
今日、最初の SQL Server ジョブは正常に実行されたものの、2 番目のジョブがハングしているように見える (つまり、永久に実行されているように見える) ことに気付くまで、これはすべて正常に実行されていました。
さらに調査したところ、この 2 番目のジョブのプロセスがゾンビ化されていることに気付いたので、次のように手動でテストを実行しました。
[root@myserver jobserver]# python
Python 2.6.6 (r266:84292, Dec 7 2011, 20:48:22)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import pyodbc
conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=MY-DATABASE-SERVER;DATABASE=MY-DATABASE;UID=MY-ID;PWD=MY-PASSWORD')
c = conn.cursor()
c.execute('select * from my_table')
<pyodbc.Cursor object at 0x1d373f0>
r = c.fetchall()
len(r)
19012
c.close()
conn.close()
conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=MY-DATABASE-SERVER;DATABASE=MY-DATABASE;UID=MY-ID;PWD=MY-PASSWORD')
Segmentation fault
ご覧のとおり、データベースへの最初の接続は正常に機能しますが、その後の接続試行はセグメンテーション エラーで失敗します。
なぜこれが起こり始めたのか、解決策を理解することはできません。今日まではすべて正常に機能しており、コードは変更されていません。
この問題に関するヘルプをいただければ幸いです。