質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

1回答

4437閲覧

axis2を用いたWebサービスでのOutOfMemoryError: Java heap space

whitehorse_1439

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2015/02/08 08:53

編集2015/02/18 08:30

axis2+Tomcat8を使用してWEBサービスの開発を行っているのですが、
大容量のファイル転送を行うと、スケルトン側のクラスに到達する前に
以下のエラーで止まってしまいます。
Tomcatのメモリを増やすなどの対策はあるのかと思いますが、
そもそも、メモリ上にデータが全て展開されているといたちごっこになってしまうので、
根本的な解決方法がないかアドバイスをお願いいします。

lang

12015-02-08 17:29:11,176 ERROR org.apache.axis2.transport.http.AxisServlet - Java heap space 2java.lang.OutOfMemoryError: Java heap space 3 at com.ctc.wstx.util.TextBuffer.finishCurrentSegment(TextBuffer.java:911) 4 at com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4751) 5 at com.ctc.wstx.sr.BasicStreamReader.readCoalescedText(BasicStreamReader.java:4126) 6 at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3701) 7 at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3649) 8 at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809) 9 at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:164) 10 at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:164) 11 at org.apache.axiom.util.stax.XMLStreamReaderUtils.writeTextTo(XMLStreamReaderUtils.java:287) 12 at org.apache.axiom.om.impl.llom.SwitchingWrapper.writeTextTo(SwitchingWrapper.java:419) 13 at org.apache.axiom.util.stax.XMLStreamReaderUtils.writeTextTo(XMLStreamReaderUtils.java:285) 14 at org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(XMLStreamReaderUtils.java:237) 15 at jp.dsri.www.edi_bp._2004.jedicos_xml.client_server.PutDocument$Factory.parse(PutDocument.java:651) 16 at jp.dsri.www.edi_bp._2004.jedicos_xml.client_server.JXMSTransferMessageReceiverInOut.fromOM(JXMSTransferMessageReceiverInOut.java:215) 17 at jp.dsri.www.edi_bp._2004.jedicos_xml.client_server.JXMSTransferMessageReceiverInOut.invokeBusinessLogic(JXMSTransferMessageReceiverInOut.java:37) 18 at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 19 at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114) 20 at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181) 21 at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172) 22 at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) 23 at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 24 at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 25 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 26 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 27 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 28 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 29 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 30 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 31 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 32 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 33 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 34 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

2015.2.18
ソースを解析したところ、XMLパーサーで使用しているTextBuffer内で、読み込んだ要素をStringに
変換するところで発生していました。

lang

1char[] curr = new char[oldLen + (oldLen >> 1)];

※以下の場所でも落ちることがあります。

lang

1StringBuffer sb = new StringBuffer(segLen + currLen);

どちらも、<data>タグ内の要素をすべて変数に格納しようとして、メモリを使い切っているのですが、
今回のデータ構造として、Base64にされたバイナリ情報が連携される為、順次処理などで
出力しないと、どうやってもメモリ不足は回避できないと思っております。

どなたか、Axis2を使用してSOAPエンベロープ内の情報を順次処理でファイルなどに
出力する方法をご存じの方はいらっしゃいますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

あまり詳しく知りませんが、大容量ファイル転送を行うための仕組みを導入する必要があると思います。

下記ページが参考になるかもしれません。
Web サービスを開発する: 第 3 回 Apache CXF を使用してファイル・アップロード Web サービスを開発する

投稿2015/02/16 15:11

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whitehorse_1439

2015/02/18 08:22

>argiusさん 情報提供ありがとうございます。 ソースをさらに調査したところ、Axis2がXMLパースに使用しているライブラリ(wstx-asl-3.2.9.jar) の中で、タグ要素をStringに変換する所で落ちているようです。 今回の要件として、<data>タグ内にBase64化された実データを連携しないといけないため、教えていただいたページでのバイナリー添付ファイルとして連携するという対応は厳しい状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問