2017-08-22 15 views
1

自然言語の日付パーサーNattyを使用するPythonスクリプトがあります。 Natty自体はJavaで書かれていますが、PythonでJpypeを使用するためにラップされています。このスクリプトは、私の開発マシン上で完全に正常に動作しますが、本番マシン上でセグメンテーションフォールトをスローします:Pythonでモジュールをインポートする際のセグメンテーションエラー

... 
JPype==0.5.4.2 
JPype1==0.6.1 
... 
natty==0.2.4 
... 

pip freeze私は、関連するモジュールの同じバージョンを取得使用して、両方マシンで

>>> import natty 
Segmentation fault (core dumped) 

マシンの両方で、私は同じPythonのバージョンを実行

>>> import sys 
>>> print (sys.version) 
2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] 

両方上のマシン、JAVA_HOMEは要するに

>echo $JAVA_HOME 
/usr/lib/jvm/java-8-oracle 

同じ値に設定されている、私は、任意の明らかな違いを見つけることができません。私はこれを見つけましたStackoverflow threadセグメンテーションフォールトの原因を記載していますが、実際には役に立たなかった。私はそれがJpypeを使ってラップされたJavaコードだと考えていますが、それは単なる推測です。

どうすればそのエラーを見つけられますか?

EDIT

gdb pythonが出て、次の

(gdb) run ~/tmp/natty-test.py 
Starting program: /usr/bin/python ~/tmp/natty-test.py 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 

Program received signal SIGSEGV, Segmentation fault. 
0x00007fffe48bf2b4 in ??() 
(gdb) backtrace 
#0 0x00007fffe48bf2b4 in ??() 
#1 0x0000000000000246 in ??() 
#2 0x00007fffe48bf160 in ??() 
#3 0x00007ffff5901990 in VM_Operation::_names() 
    from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so 
#4 0x00007fffffffcf90 in ??() 
#5 0x00007ffff543168d in VM_Version::get_processor_features()() 
    from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so 
Backtrace stopped: previous frame inner to this frame (corrupt stack?) 

natty-test.pyを置くだけimport natty

+0

インストールされている依存関係が開発と運用で同じかどうかを確認します。 – rkatkam

+0

少し具体的になりますか? Natty(pythonパッケージ)には、 'JPype1'と' python-dateutil'という2つの依存関係しかありません。両方とも同じで、両方のマシンの最新バージョンです。またはNatty JARファイルを参照していますか? [https://github.com/joestelmach/natty/blob/master/pom.xml](https://github.com/joestelmach/natty/blob/master/pom.xml)にチェックを付けると、私はそれをどのように進めるべきか分かりません。 – Christian

答えて

0

ソリューションが含まれている私を与える:私は本番マシン上で私のUbuntuのインストールのカーネルをアップデートする必要がありました。私はJpypeはすでに

>>> import jpype 
>>> jpype.startJVM(jpype.getDefaultJVMPath()) 
Segmentation fault 

は、この問題の検索問題の原因となったことに気づいた

このStackoverflow threadAskUbuntu threadに含まれるリンクに私をもたらしました。生産マシン上のカーネルは、4.4.0-81-一般的なものでした。 4.10.0-32-ジェネリックへのアップデート後、すべて正常に動作します。

関連する問題