$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

jstatを使うとJVMのメモリ使用状況が分かる

最近頻繁に手元で起動したsbtがjava.lang.OutOfMemoryError: Metaspaceで死ぬので、メモリ使用状況を確認するコマンドを調べた。備忘録として残しておく。

の記事が参考になる。

jpsとjstatを利用する。この二つはJDKに含まれているのでインストールされていれば利用可能。

まずjpsJVMが動いているプロセスを特定する。

$ jps -v
60820 Main
55060 sbt-launch.jar -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m
76790 Main
1067  -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=/Users/shibayu36/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/shibayu36/java_error_in_idea.hprof -Djb.vmOptionsFile=/Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions -Didea.java.redist=jdk-bundled -Didea.home.path=/Applications/IntelliJ IDEA CE.app/Contents -Didea.executable=idea -Didea.platform.prefix=Idea -Didea.paths.selector=IdeaIC2018.3
55853 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home -Xms8m

今見たいJVMのプロセスが55060 sbt-launch.jar -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256mだとすると、プロセスIDは55060なので次のコマンドでメモリ状況が分かる。-tはタイムスタンプをつけるオプション、-h5は5行ごとにヘッダを出すオプション、最後の1000は1秒ごとに統計情報を出力するオプション。

$ jstat -gc -t -h5 55060 1000
Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
         1054.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1055.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1056.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1057.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1058.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
         1059.9 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1060.9 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1061.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1062.8 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711
         1063.9 76800.0 78336.0 53909.3  0.0   192512.0 179123.1  699392.0   75597.7   106496.0 94784.9 13056.0 12218.8     20    0.296   5      0.415    0.711

この中でMetaspaceのCapacityはMCの106496.0KB、Metaspaceで実際に利用している使用量はMUの94784.9KBとなる。この値がMaxMetaspaceSizeに指定された256MBを超えるとjava.lang.OutOfMemoryError: Metaspaceで死ぬ。


以上、簡単にMetaspaceの利用状況を知る方法でした。

epochをISO8601のフォーマットに変換するコマンド

エンジニアをしているとepoch秒をよく見るが、epoch秒だと頭でいつの時間か理解するのは難しい。ISO8601のフォーマットだとシュッと理解できる。つまり

  • epoch秒の1547018800 <- すぐに日付などが分からない
  • ISO8601の2019-01-09T16:26:40+0900 <- すぐに分かる!

epoch秒が出てきた時にシュッとISO8601のフォーマットに変換したいことがあったので調べていたのだけど、実はdateコマンドで一発だった。

Macの場合。

$ date -r 1547018800 +%Y-%m-%dT%H:%M:%S%z
2019-01-09T16:26:40+0900

Debianの場合。

$ date --date='@1547018800' +%Y-%m-%dT%H:%M:%S%z
2019-01-09T16:26:40+0900

あとはこのコマンドをepoch2dateとしてシェルスクリプトを置いておくと便利に使える。

/path/to/bin/epoch2date

#!/bin/bash
date -r $1 +%Y-%m-%dT%H:%M:%S%z
$ epoch2date 1547018800
2019-01-09T16:26:40+0900

2018年に買って面白かった漫画たち

2019年も始まって1週間経ってしまい今更ですが、去年買った漫画で面白かった漫画をまとめておこうと思います。ちなみに2018年は265冊漫画を購入しました。

ドロヘドロ

ドロヘドロが今年ついに完結!!もともと妻から教えてもらえた漫画なのですが、僕が人に薦めたい漫画No.1にもなりました。完結と同時にKindle版も発売されたので、買いたいけど紙で買うのもなーと思っていた人も買いやすくなりました。

魔法使いと人間が出てくるファンタジー漫画なのですが、設定が独特で練り込まれているのですぐに引き込まれます。いろいろな楽しみ方が出来るのも嬉しい。

  • 謎や伏線が多く散りばめられていて綺麗に回収されるので、伏線回収系が好きな人は楽しめる
  • キャラクター全員が個性があり、いろんな視点からストーリーが進むので、群像劇が好きな人も楽しめる
  • 絵が芸術!って感じなので、絵も楽しめる
  • etc...

1巻はそこそこですが2巻から特に面白くなるので、とりあえず2巻まで読んでほしい!

ヒナまつり

とにかく笑える。昔1冊だけ買って続きを買っていなかったのだけど、最近2冊目を買ったら面白すぎた。気づいたら最新刊まで読み終えていた。

かぐや様は告らせたい

最近では一番好きなラブコメ。ラブコメってコメディの要素が面白く感じないことが僕は多いのだけど、かぐや様はコメディ側も楽しめるのが嬉しい。

進撃の巨人

海に到達した後のストーリーもひたすら面白い...最近作者が情熱大陸に出てて、どう終わらせるか考えていると言っているので、そろそろ終わりそうですね。

彼方のアストラ

[asin:4088813146:detail]

ジャンプ+の連載当初から追いかけていたけど、だらだら長引くことなく伏線を回収しきって5巻で完結して本当に良かった。途中いろいろと謎が明かされる時に、最初の方のあれが伏線だったのか...ということが分かり、鳥肌立ちながら読みました。

ミステリというなかれ

年末に10シリーズほど漫画を買いまくったが、この漫画が一番面白かった。博識な主人公が他の人に向けて色々な考え方を述べるシーンがあり、その考え方が読んでる側も「そんな考え方があるのか!」と思わされるようなものが多かったのが良かった。気になるところで3巻が終わってしまったので早く続きが読みたい。

アオアシ

僕は主人公が何か一つ独特な才能を持っていて、その才能を武器に成り上がっていくというのが好きなんだと思う。だからアオアシも好き。また、サッカー漫画でちゃんとサッカーの戦術を知るようなものは少ないのだけど、アオアシは「どうしてサッカーではトライアングルで動くのが大事か」みたいな知識も描写してくれていて知的好奇心も満たしてくれた。

私がモテないのはどう考えてもお前らが悪い!

最初の方も喪女(というかコミュ障?)あるあるネタが出てきて面白いのだけど、8巻以降途中まで他の人とほぼ交流をしなかったぼっち主人公が徐々に人と関わるようになってきて、そこからがめちゃくちゃ面白い。12巻はAmazonレビューで300件ついてて平均4.9という訳の分からない評価がされているのだけど、実際に1巻から順にそこまで読むと納得できる面白さであった。

図書館の大魔術師

ファンタジー世界の設定がちゃんと作られていて、本当にこのような世界がありそうと思ってしまうので、うまく入り込んで読めた。一巻は長大なプロローグという感じ。二巻から主人公は司書試験を受けに村から出るのだけど、立ち寄る村ごとに文化がうまく描写されている。一巻は文字が多くてちょっと大変だな〜と思ったけど、二巻になると世界がより分かってきて面白くなってきた。続きも期待。

ブルーピリオド

美大受験の話。美大は自分の人生の中で関わりがなかった所なので、この漫画で描かれていることは新鮮で面白い。

青野くんに触りたいから死にたい

怖い、けど面白い!ホラーはあまり好きではなくてホラー映画とか絶対見ないのだけど、この漫画はいい感じに怖くて面白くて深夜に買ったにも関わらず一気読みしてしまった。その後トイレに行くのが怖かった。

天国大魔境

まだまだ謎だらけで訳わからん感じだけど、それでも一巻から面白い。石黒さんの漫画はいい感じに謎を作って後から分かりやすく回収してくれるので、今後期待してる。

キングダム

追いかけ続けているけど、ずっと面白い...ヤンジャンで読んでるけど必ず単行本も買って読んでる。

町田くんの世界

これも終わっちゃった。最後まで町田くんの綺麗な心が楽しめる漫画だった。

不死の猟犬

ハルタという雑誌を買い始めて見つけた作品。6巻でなぜこの世界では人が不死なのかという話が解説されてすっきりする。続編の不死の稜線にも期待。

惑星クローゼット

かわいい絵なのに、そこそこ怖いファンタジーという感じ。同じ作者のホブゴブリンという漫画も良かった。

やがて君になる

これも年末に買ったものの内の一つ。百合ネタは置いておいて、主人公や先輩の心が揺れ動く描写が面白い。特に生徒会劇の所。もう少しで完結しそう。

まとめ

去年面白かったやつをまとめてみました。面白い漫画探すの難しいのでおすすめ漫画あったら教えてください!!!