生産性向上ブログ

継続的な生産性向上を目指すエンジニアのためのブログ

『Java Casual #2』参加レポート

概要

java-casual.connpass.com

LINE社で開催された『Java Casual #2』に参加してきたので、簡単に参加レポート。

会場

blog.kushii.net

↑のLINE社内のカフェエリアで開催。カフェスタッフのお姉さんが常駐してるのすごいうらやましかった。

動画

live.line.me

LINE LIVEでLIVE中継されていて、アーカイブ公開もされているのでいつでも発表動画を見られる。なので、詳細が気になる人はそちらを参照してください。

発表

jcmd便利

www.slideshare.net

  • by @sugarfileさん
  • JDK9以降のトラブルシューティングはjcmdとjhsdbを使うべし
  • jcmdはCLIのLocal JVM診断ツール
  • コマンドを指定して各種情報取得や設定変更を行える
  • トラブルシューターは、"jcmd VM.info"コマンドは覚えてほしい
    • スレッドダンプやヒープなど様々な情報を一括で取得する
  • HeapStatsというJVMのランタイム情報を継続的に取得するためのツールも作ってるので宣伝
    • Flight RecorderのOpenJDK版みたいなもの
    • 軽量でオーバーヘッドが少ない(1.32%)
    • オブジェクトごとに時系列でメモリ増加を見ることができる
    • オブジェクトの参照関係も可視化

*.propertiesと*.ymlと私。

www.slideshare.net

  • by @nabedgeさん
  • 文言リソースのpropertiesがnative2asciiでGitHub上でdiffを見るのが辛い
  • Java6からはnative2ascii使う必要ないけど歴史的な経緯で続いていた
  • yml形式に変えてみた
  • ListResouceBundleを継承したクラスを用意すればいける

SCM, CI and Maven Repo

www.slideshare.net

  • by @hdkshjmさん
  • LINE社で開発ツールの運用をしている
    • GHE、Jenkins、Nexus Repository Pro、社内独自のデプロイツールなど
  • GHEはサービスごとにOrganization作成、リポジトリ数1万以上、git flowで運用
  • Jenkinsは1つのJenkinsを共有
    • ジョブ名に命名規則を決めてる
    • Jenkins 1系を使っていて、2系はプラグインが動作するか評価中
    • プラグインがチーム間でコンフリクトするのは根性でどうにかしている
      • 正直辛い
    • 勉強会後に質問した感じだと、Circle CI Enterpriseとかも試しているとのこと
    • 複雑なフローを実現してるジョブやCron的に使ってるジョブもあるので完全移行は難しいらしい
  • Nexusには外部へのReverse Proxy、Upload用のRepo、Download用のRepoの3種類

How to cook lettuce

www.slideshare.net

  • by @oklahomersさん
  • lettuceはJavaのredisクライアント
  • Redis Clusterはスケーラビリティと可用性が特徴
  • 活かせるかどうかはクライアント次第
  • lettuceでの設定紹介

Fluency - yet another fluent logger

www.slideshare.net

  • by @komamitsuさん
  • msgpack-javaとか、fluent-logger-javaとか、digdagとかメンテしてる
  • Fluencyはfluent-logger-javaの作り直し
  • fluent-logger-javaは拡張性とか後方互換性とかが辛かったのでついカッとなって作った
  • fluent-logger-javaより4倍高速
  • PackedForwardというfluentdが内部で使用するデータ形式を使う
  • 拡張性高め
  • ベンチマーク結果やボトルネックについて紹介
  • LINE社も使ってるっぽい

Openjdk を触ってみた話

www.slideshare.net

  • by @tokuhiromさん
  • OpenJDK触ってみた話
  • 結論としては、@sugarlifeさんの過去スライドを全部読めばいい
  • 最近のOracleJDKはOpenJDKベースなので、パッチを送るならOpenJDKに送ればいい
  • 中身はC++かJavaで書かれていて、VMまわりとOSのシステムコールはC++で書かれている
    • 「だいたいJava書いてる人はC++のコードも書けると思うので」
  • go-hsperfdataというhsperfdataをgolangで解析するツールを作成
    • jcmdでできることがだいたいできる
    • Java起動しなくていいので速い
  • Tokenizerいじって文字列リテラルの貧弱さを改善してみたり

所感

全体的にJavaに関わりがある人なら興味を持つ内容だったと思う。Casualというタイトルの割には実用的な話が多かった。

自分個人としても新しく知る内容が多くてよかった。特に、LINE社でのJenkinsの話はモノリシックに運用してるとは思ってなかったので、もっと詳しく聞いてみたいと思った。JDKのコードもこれまで読んだことなかったけど、暇があれば触ってみたい。(多分やらないけど)