Java SE 7 Update 4から、GCの新しいアルゴリズムとして「G1GC」が追加されました。
Java6でもupdate 14から実験的に導入されているようです。
GCアルゴリズムについては下記に概要説明がありました。
G1GCアルゴリズムの詳細についてはこちらに超詳しく記載されています。
Java SE 7 Update 4から、GCの新しいアルゴリズムとして「G1GC」が追加されました。
Java6でもupdate 14から実験的に導入されているようです。
GCアルゴリズムについては下記に概要説明がありました。
G1GCアルゴリズムの詳細についてはこちらに超詳しく記載されています。
Nodejsにもレコメンドエンジンはあるよってことで、紹介します。
RaccoonはRedisを使ったレコメンドエンジンです。
Redisといえば、SortedSetでランキングのスコア付けとか便利ですね。
Raccoonもそんなredisの便利さを拡張して簡単に「あなたにおすすめの商品はこれ!」とか作れるので、おすすめです。
redisを使うので、ローカルでも他のサーバーでもredisを予め入れとく必要があります。
さて、前回までで、ログからフルGC(及び高負荷なコンカレントGC)が発生していることはわかりました。
で、このチューニングの目的は、GCによるマシンへの負担を低減することにあります。
まず「なぜGCが発生するのか?」と「jvmがどうやってメモリ管理を行っているのか?」を知らないとチューニングのしようがないのですが、これらについては、下記に詳しく記載されていたのでリンクをはっておきます。
で、これらをふまえて・・・
一口にチューニングと言ってもいくつかのアプローチをとることができます。
きほんのきです。
まずはログを見ます。
GCログを出すようにしていない場合は、GCログを出すようにします。
-Xloggc:/var/log/gc.log # 出力先パス -XX:+PrintGCDetails -XX:+PrintGCDateStamps
の3つのパラメータを指定してjavaを起動します。
まじめにJVMチューニングに取り組む機会があったので、忘れないようにこの記事を書きました。
GCアルゴリズムやパラメータの説明はいろいろなサイトに掲載されていたのですが、
「どうやって取り組むか」「何を見れば良いか」は意外とまとまっていなかったので。
JavaやScala製のアプリケーションはもちろんのこと、
Solr, ZooKeeper, Cassandra, Neo4J等jvm上で動くプロダクトを使う場合つねに
「JVMパラメータをどう設定するか」
という課題があります。
割とググればいろいろ出てくるネタだけど、忘れないように書いておこうと思います。
slowqueryはなるべく早めに対応したいので、管理画面などで常にチェックできるようにしたい。そこでfluentd!
MySQLサーバーにfluentdのクライアントを入れて、slowqueryをfluentdサーバーに送り、そいつがmongoDBに突っ込むってわけです。
td-agentはfluentdの安定版バッケージらしいです。なのでこっちを入れるのがよいとおも。