御厨 寛人
mikur****@datas*****
2007年 6月 30日 (土) 13:26:03 JST
はじめまして、御厨と申します。 Javaのバインディングをテストしています。 MeCabに同じ文書を延々と投げると、不定期にJava VMごと落ちてしまいます。 正常に動作させるためには、どうしたらよいのでしょうか? 環境、現状などを以下に記します。 宜しくお願いします。 ■環境■ Red Hat Enterprise Linux Version 4 (UTF-8環境) mecab-0.96.tar.gz (通常インストール、UTF-8のみインストール、両方試しまし た。) mecab-ipadic-2.7.0-20070610.tar.gz mecab-java-0.96.tar.gz ■現象■ Javaバインディングで、MeCabを呼びだしています。 途中で、以下のようなエラーが発生し、Java VMごと落ちてしまいます。 ./sh/mecab_test.sh: line 7: 31977 アボートしました /usr/local/java/bin/java ... # # An unexpected error has been detected by HotSpot Virtual Machine: # # SIGSEGV (0xb) at pc=0xa465b482, pid=31999, tid=2755038128 # # Java VM: Java HotSpot(TM) Server VM (1.5.0_10-b03 mixed mode) # Problematic frame: # C [libMeCab.so+0x2482] Java_org_chasen_mecab_MeCabJNI_Node_1next_1get+0x6 # # An error report file with more information is saved as hs_err_pid31999.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp ■原因■ org.chasen.mecab.NodeクラスのgetFeature()を操作すると落ちるようです。 getFeature()を呼び出すだけでは、エラーが起きませんが、 getFeature()で取得した文字列を操作すると落ちます。 不定期に落ちてしまうので、内部的な問題のような印象を持ちました。 ■サンプルプログラム■ 同じ文書を延々とMeCabへ投げ続け、 意味無くひたすらgetFeature()を1文字切り取る処理です。 public class MeCab { private static MeCab mecab; private MeCab() { try { /* ライブラリlibMeCab.soの呼び出し */ System.loadLibrary("MeCab"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } } public static MeCab getInstance() { if (mecab == null) mecab = new MeCab(); return mecab; } public void analyze(String text) throws Exception { if (text == null) return; Tagger tagger = new Tagger(); /* Nodeが無くなるまで処理を続ける */ for (Node node = tagger.parseToNode(text); node != null; node = node .getNext()) { /* 意味不明に1文字切り取り処理 */ node.getFeature().substring(0,1); } } public static void main(String[] args) { MeCab mecab = new MeCab(); int count = Integer.parseInt(args[0]); for (int i = 0; i < count; i++) { System.out.println("try:" + i); try { mecab .analyze("19日午前11時半ごろ、東京都新宿区西新宿7丁目の青梅街道沿い の雑居ビルの壁面から、看板(縦約1.5メートル、横約5メートル、厚さ十数 センチ)が落下した。歩道を歩いていた会社員の女性(28)が看板の下敷きに なり、骨盤の骨を折り頭を約4センチ切って重傷を負った。また、男性(23) が落下した看板を持ち上げる際、手を切り、軽傷。新宿署が落下した原因や看板 の管理状況を調べている。"); } catch (Exception e) { e.printStackTrace(); } } } }