サンプル集  >  other  >  tomcat起動時ヒープ不足
tomcat起動時ヒープ不足
2009/05/26

tomcat が起動しないので状況を確認します。

tomcat 起動・停止のスクリプトは /etc/init.d/tomcat にありました。内容も正しそうです。

/usr/local/tomcat/logs にエラーが出ていました。 内容を確認します。

Error occurred during initialization of VM
VMの初期化中にエラー発生。
Could not reserve enough space for object heap
オブジェクトヒープに十分な空きができませんでした。
Could not create the Java virtual machine.
Java バーチャルマシン の作成に失敗しました。

ヒープ容量が足りないようです。

調べたところ、CATALINA_OPTS に指定している値が多すぎるのではないかなと思いました。

CATALINA_OPTSの指定は以下の通りでした。

CATALINA_OPTS="-server -Xms2048m -Xmx2048m -XX:MaxPermSize=1024M"
CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails -Xloggc:$CATALINA_HOM
E/logs/gc.log"

CATALINA_OPTS

-server

Java HotSpot Server VM という、サーバーアプリ用の VM を起動する。 実行速度がかなり速くなるみたいです。

-Xms

メモリ割り当てプールの初期サイズをバイト数で指定します。 キロバイト指定なら k メガバイト指定なら m を付けます。

現在の指定は -Xms2048m なので 2048M(2G)割り当てているってことですね。

-Xmx

メモリ割り当てプールの最大サイズをバイト数で指定します。 -Xms と同じくキロバイト指定なら k メガバイト指定なら m を付けます。

現在の指定は -Xmx2048m なので 2048M(2G)割り当てているってことですね。

-XX:MaxPermSize

Permanent Space の最大値です。 Permanect領域はヒープにとられ、クラス定義やメソッド、フィールドなどのメタデータが格納されています。 多くのクラスをロードする場合には領域サイズを調整した方がよいようです。

-XX:+PrintGCDetails

GC 関連のオプション。 New 領域、Old 領域の詳細情報を出力するようです。 New 領域、Old 領域ってなんでしょうか・・・

-Xloggc:filename

GC の出力情報ファイルを指定します。

とりあえず CATALINA_OPTS を外して起動してみたところ起動しました。 ログの内容の通りで、やはりメモリを確保できなかった模様です。

空きメモリを vmstat で確認します。

# vmstat
procs ----------memory--------- --swap- --io-- --system-- -----cpu-----
 r  b  swpd   free  buff  cache  si  so  bi bo   in   cs us sy id wa st
 0  0     0 707008 37916 216380   0   0  52  9 1012   39 11  1 88  0  0

free 707,008 + buff 37,916 + cache 216,380 で合計 961,304バイトでした。 0.9GB しかメモリが無いので 2Gの確保はできないのは当然ですね。

メモリは /proc/meminfo を見ても確認できるようです。

# cat /proc/meminfo
MemTotal:      1026452 kB
MemFree:        704200 kB
Buffers:         38616 kB

こっちの方が見やすいですね。

▲ PageTop  ■ Home


Copyright (C) 2013 ymlib.com