- - PR -
サーブレットの圧縮
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-07-01 21:28
こんにちは。
現在Jsp、Servletを使って開発をしています。 環境を移行したのですが移行先で実行してみると以下のようなエラーが出ます。 javax.servlet.ServletException: Cannot allocate servlet instance for path /servlet/classes.xxxServlet 〜 〜 ... java.lang.VerifyError: (class: classes/xxxServlet, method: doPost signature: (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V) Out Of Memory 〜 〜 ... これはメモリが足りないといっているんだと思います。 考えまして/WEB-INF/classes/classes/xxxServlet のclasses/xxxServletをjarファイルにして/WEB-INF/classes/classes.jarとすれば 容量も少なくなり実行できるようになるのではないかと思ってやってみたのですが 今度は404 not foundが出てしまいます。 このようにServletを圧縮することはできるのでしょうか? またできるとしたらどこかにパスを通さないといけないのでしょうか? ご教授ください。 Tomcat5.0 j2sdk1.4 Apache2 [ メッセージ編集済み 編集者: matsu_on 編集日時 2005-07-01 21:31 ] |
|
投稿日時: 2005-07-01 21:52
jarファイルにするなら配置場所は/WEB-INF/lib/classes.jarでしょう。
ただし、実行時に使用するメモリが足りないと言っているので jarファイルにしても改善されるとは思えません。 サーバーのメモリ使用量を増やしてはいかがでしょうか? |
|
投稿日時: 2005-07-02 00:21
ご返答ありがとうございます。
ご指摘の通りjarファイルにしても改善されませんでした。 そこでWEB-INF/classesディレクトリに移動して 以下のようにメモリ割り当てコマンドを実行してみました。 java -Xms64m -Xmx64m classes.xxxServlet しかし以下のようなmainがないというエラーが出てしまいます。 Exception in thread "main" java.lang.NoSuchMethodError: main サーブレットにmainはありませんがサーブレットにメモリを割り当てるには どうすればよいのでしょうか? ご教授お願いします。 [ メッセージ編集済み 編集者: matsu_on 編集日時 2005-07-02 00:23 ] |
|
投稿日時: 2005-07-02 04:17
Servletを分割することによりエラーは解決しました。
|
|
投稿日時: 2005-07-03 15:19
お世話になっております。
とりあえずは解決したようですが・・・ サーバーのメモリ割り当てを増やす場合は、コンテナ(Tomcatなど)を起動するJavaプロセスに対して-Xmxオプションを指定します。 |
|
投稿日時: 2005-07-03 17:40
文献を引用してないので間違っている可能性が高いですが、
この問題って、JavaVMの制限により、1メソッドあたりのコードサイズに上限がある、 ということなんじゃないんでしょうか? つまり、1メソッドに数千行も書いてしまうような、あまりに酷いプログラミングを している時に発生する問題だと認識していました。 なので、VMの-Xmxオプションで解決する問題だとは思っていなかったんですが、 どうなんでしょうか? |
|
投稿日時: 2005-07-03 22:20
私も以前、ごっついJSPを表示しようとしたところ
同じ原因で落ちた覚えがあります。 その時はJSPを分割してincludeで対応しました。 (<%@include>ではなく、<jsp:include>) 特にJSPの場合は1メソッド内のコード量が膨大になる場合があります。 |
|
投稿日時: 2005-07-03 22:52
解決してよかったです。
syoさんもおっしゃってますが、Servletはサーブレットコンテナでないと実行できないのでTomcatの開始オプションにXmsを指定しないといけませんね。 >koeさん JSPが大きくて落ちるときは、コードが大きくてコンパイル自体が通らないので実行時エラーではなく、too big blanchなどのコンパイルエラーになります。 |