- PR -

サーブレットの圧縮

投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2004/08/21
投稿数: 41
投稿日時: 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 ]
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-07-01 21:52
jarファイルにするなら配置場所は/WEB-INF/lib/classes.jarでしょう。
ただし、実行時に使用するメモリが足りないと言っているので
jarファイルにしても改善されるとは思えません。
サーバーのメモリ使用量を増やしてはいかがでしょうか?
未記入
常連さん
会議室デビュー日: 2004/08/21
投稿数: 41
投稿日時: 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 ]
未記入
常連さん
会議室デビュー日: 2004/08/21
投稿数: 41
投稿日時: 2005-07-02 04:17
Servletを分割することによりエラーは解決しました。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2005-07-03 15:19
お世話になっております。

とりあえずは解決したようですが・・・
サーバーのメモリ割り当てを増やす場合は、コンテナ(Tomcatなど)を起動するJavaプロセスに対して-Xmxオプションを指定します。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2005-07-03 17:40
文献を引用してないので間違っている可能性が高いですが、
この問題って、JavaVMの制限により、1メソッドあたりのコードサイズに上限がある、
ということなんじゃないんでしょうか?
つまり、1メソッドに数千行も書いてしまうような、あまりに酷いプログラミングを
している時に発生する問題だと認識していました。

なので、VMの-Xmxオプションで解決する問題だとは思っていなかったんですが、
どうなんでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-03 22:20
私も以前、ごっついJSPを表示しようとしたところ
同じ原因で落ちた覚えがあります。
その時はJSPを分割してincludeで対応しました。
(<%@include>ではなく、<jsp:include>)

特にJSPの場合は1メソッド内のコード量が膨大になる場合があります。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-07-03 22:52
解決してよかったです。
syoさんもおっしゃってますが、Servletはサーブレットコンテナでないと実行できないのでTomcatの開始オプションにXmsを指定しないといけませんね。

>koeさん
JSPが大きくて落ちるときは、コードが大きくてコンパイル自体が通らないので実行時エラーではなく、too big blanchなどのコンパイルエラーになります。

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