- PR -

JCOM + Excelで JVMダウン

1
投稿者投稿内容
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2008-09-02 21:30
Javaから jcomを使って、Excelのマクロを実行させています。
その際に、稀にJVMがダウンしてしまうことがあります。

何か原因が分かりますでしょうか?
怪しい点としては、Javaがマルチスレッドで動作しており、
同時にjcomを呼び出している可能性があります。
このような事は不可でしょうか?

以下にトレースを載せます。
よろしくお願い致します。
--------------------------------------------------------------------------------
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at PC=0x38D
802F
Function=Java_jp_ne_so_1net_ga2_no_1ji_jcom_Com_StringFromIID+0x3CA3
Library=C:WINDOWS\system32\jcom.dll

Current Java thread:
at jp.ne.so_net.ga2.no_ji.jcom.IDispatch._create(Native Method)
at jp.ne.so_net.ga2.no_ji.jcom.IDispatch.create(IDispatch.java:84)
- locked <0x115a5228> (a jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelApplica
tion)
at jp.ne.so_net.ga2.no_ji.jcom.IDispatch.<init>(IDispatch.java:46)
at jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelApplication.<init>(ExcelAppli
cation.java:'8')
at jp.co.xxx.yyy.zzz.mmm.execute(mmm.java:315)
at java.lang.Thread.run(Unknown Source)
--------------------------------------------------------------------------------

jp.co.xxx.yyy.zzz.mmm.execute(mmm.java:315) の内容の抜粋
------------------------------------------------
xxx:ReleaseManager rm = new ReleaseManager();
xxx:ExcelApplication excel = null;
315: excel = new ExcelApplication(rm);  ← ここを最後にJVMダウン 
------------------------------------------------

環境:
Windows 2003 server
Excel2003
Java 1.4.2_08
jcom224 ??


[ メッセージ編集済み 編集者: ボブ 編集日時 2008-09-02 21:33 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-09-02 23:20
"An unexpected exception has been detected in native code outside the VM. "と書いてあるとおり、VMの外で、ネイティブコード内で例外が発生していますね。
#会社名っぽいのがスタックトレースに出ていますが大丈夫ですか?

マルチスレッドで動作している場合だけ発生するのであればライブラリのドキュメントをご覧になってスレッドセーフなのかどうか確認してみてはいかがでしょうか。

マルチスレッドで動くことと落ちることの因果関係が明らかでない場合は負荷試験を行って再現テストを行うと良いですね。

[ メッセージ編集済み 編集者: インギ 編集日時 2008-09-02 23:23 ]
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2008-09-02 23:56
JCom作者のa-sanです。
Excelはマルチスレッドに対応していないので、
複数スレッドから同時にアクセスしてはダメです。
1つずつ呼ぶような仕組みにしてください。
so-netはJComを作ったころのプロバイダですw。
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2008-09-03 00:56
引用:

マルチスレッドで動くことと落ちることの因果関係が明らかでない場合は負荷試験を行って再現テストを行うと良いですね。


そうですね、念のため 複数同時にExcelApplicationオブジェクトを
作らせるようなチョンプロ作って、再現出来るか試したいと思います。

引用:

a-sanさんの書き込み (2008-09-02 23:56) より:
JCom作者のa-sanです。
Excelはマルチスレッドに対応していないので、
複数スレッドから同時にアクセスしてはダメです。
1つずつ呼ぶような仕組みにしてください。
so-netはJComを作ったころのプロバイダですw。


本人の登場ありがとうございます!
きっと来てくれると信じてました、ソースコードみたら同じ苗字でしたしw
やはりここは synchronized 等で1スレッドずつ処理をしましょうということですね。
ほとんどの場合は、毎日3〜7スレッドほど同時に動作させてもエラーとならずに済んでいたので、大丈夫かと思っていました。しかし、3ヶ月に1回くらいは、前述のようなトレースを刷いてダウンしてましたので、調査・質問させて頂いた次第です。
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2008-10-30 11:58
本現象、
シングルプロセッサーと、マルチプロセッサーで違いがあるようです。
Javaのマルチスレッドで複数Excelプロセスを作成しても、シングルプロセッサーでは、
このようなエラーは起きず、マルチプロセッサーだと起きました。

おそらく、シングルプロセッサーでは、Javaのマルチスレッドで動作しても、CPUから見て、同時に処理できるスレッドは1個のみですので、Excelにアクセスするのは1個で起きず、
マルチプロセッサーでは、CPUから見て2つのスレッドを同時処理出来、同時にExcelにアクセスしてしまうので起きてしまうと思われます。

この推測はどうでしょうか?
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2008-10-30 21:44
うーむ、なんとも言えないですねぇ〜。
シングルプロセッサーでも、切り替わるタイミングが悪ければ、不整合を起こしてダウンするでしょう。もしシングルプロセッサーとマルチプロセッサーで動作が変わるなら、ExcelやJComの問題ではなく、OSのプロセス管理の問題ということになってしまうのでは???
やはり、私がお薦めできるのはプロセッサ数に関係なく「一度に複数のアクセスを行わないこと」です。
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2008-11-05 11:04
引用:

a-sanさんの書き込み (2008-10-30 21:44) より:
うーむ、なんとも言えないですねぇ〜。
シングルプロセッサーでも、切り替わるタイミングが悪ければ、不整合を起こしてダウンするでしょう。もしシングルプロセッサーとマルチプロセッサーで動作が変わるなら、ExcelやJComの問題ではなく、OSのプロセス管理の問題ということになってしまうのでは???
やはり、私がお薦めできるのはプロセッサ数に関係なく「一度に複数のアクセスを行わないこと」です。



やはり、シングル/マルチに関わらず、常にExcelプロセスは1つにすることが良いようですね。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)