メモリ不足

Maven1ではこうするらしいので、pomに記述してみる。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>-Xmx128m</argLine>
        </configuration>
      </plugin>


メモリ割り当てを増やしても、スワップが増えるだけで途中で止まってしまうなぁ。


遅いのは見た目から判断するとメモリリークなんだが・・・。
試しに、こうしてみた。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <forkMode>perTest</forkMode>
          <argLine>-Xmx128m</argLine>
        </configuration>
      </plugin>


JUnitのデフォルトはこっちぽい?
これだと・・・テストクラス毎にすべてのテストクラスと、springのリソースファイルを読み込んでインスタンス化している?
次のテストがはじまるまでに2分ぐらいかかるorz。


ログを出しつつやってみる。

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>-Xmx128m -Xincgc -Xloggc:conf/gcf.log</argLine>
          <childDelegation>true</childDelegation>
        </configuration>
      </plugin>


・・・ログが標準出力にでてくるのはご愛嬌。
ちょこちょこgcは動いているけど・・・-Xmxで設定した値を超えると、毎秒FullGCが走ってる。

161.319: [Full GC 130111K->129179K(130112K), 0.7606391 secs]
162.079: [Full GC 129179K->129156K(130112K), 0.7578111 secs]
163.017: [Full GC 130092K->127652K(130112K), 0.7545076 secs]
164.054: [Full GC 130111K->126985K(130112K), 0.7504524 secs]

こうなると全然タスクが進まなくなるわけか。


これはいくらメモリを増やしても根本的な解決にはならないだろうなぁ。
テストクラスのtearDown()でクラス変数は"=null"にしてgcが拾いやすくしてもダメだ。


読み込みに時間がかかるのは、おそらくはHibernateマッピング定義を1ファイルに書いているからだろう。
でもantでは動いているわけで(サーバでやればパフォーマンスの差で動くとか?)。
これをすべて分解して、テストクラスも再構成した上でperTestでVMを起動すれば動きそうだけど。
ただ、それでもテストクラスが1000とか2000とかに増えていくとダメなのだろうが。