Java Mission Control 使ってみる

Java パフォーマンス」で目にして 項が丸々割かれている&ビジュアライズされているのでゆるふわ人間にはあっていそう。 あとで触るときに困らないように、触りはじめの部分だけ。

前提環境

起動

jmc コマンドが入っているはずなので、叩くだけ

jmc

f:id:takudo_dev:20180313194350p:plain

プロファイリング対象のプロセス起動

JFR(Java Flight Recorder。 JVM上で発生したイベントの記録) を JMCで可視化する。 JFRはデフォで有効になっていないので、Javaの起動コマンドオプションにつける

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder ※順番逆だと動かない

ローカルのSparkで使うときは、例えば以下のような感じ(※関係ないオプションもついてます)

$ spark-shell --driver-java-options "-Duser.timezone=UTC -XX:+UnlockCommercialFeatures -XX:+FlightRecorder " --packages "org.apache.hadoop:hadoop-aws:2.6.0"

MBeanサーバーというのをダブルクリックすると現状が可視化される

f:id:takudo_dev:20180313194930p:plain

JFRで記録する

f:id:takudo_dev:20180313195855p:plain

色々見れる。以下見れるもののインデックス

  • 全般タブ
    • サマリ: CPU使用率、メモリ、GC停止時間
  • モリタ
    • ヒープ
    • GC回数、GC停止時間(young, old 別など)
  • コードタブ
  • スレッド
    • 利用頻度の高いスレッド
    • スレッドダンプ
  • io
    • ファイル読み書き
    • ソケット読み書き
  • システム
    • マシン全体(JVM関係ない)
  • イベント
    • いろんなイベント見れる

f:id:takudo_dev:20180313201439p:plain

リモートのJavaプロセスをJMCでプロファイリングする

JFRのオプションに加えて、下記を追加

-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

ハマリポイント

リモートのホスト名をいじらないといけなかった。 具体的には、AWS環境(AmazonLinux)で、 デフォルトのホスト名(hostname -i で ローカルIPが返ってくる)をやめないといけない。

$ sudo hostname hogefuga

↑のホスト名はなんでも大丈夫っぽい

これでJVMブラウザから、新規の接続先を選ぶときに、ファイヤーウォールに穴をあけて(AWSの場合はセキュリティグループ)、インターネット越しに接続確認が出来た

参考

ホスト名の件はここがヒントになった

d.hatena.ne.jp

オプションはここから引っ張ってきた

qiita.com

【Tips】AWS Athena のクエリ結果をまた Athenaのテーブルに入れる

概要

ahenaのクエリ結果は、ヘッダー付き、ダブルクオート付きで出力される。 そのままS3に置いて ahena のテーブル作ると ヘッダーとダブルクオートが取り込まれてしまう。

解決策

以下の create 文で両方回避できる

CREATE EXTERNAL TABLE IF NOT EXISTS athena_test.pet_data (
  `date_of_birth` date,
  `pet_type` string,
  `pet_name` string,
  `weight` double,
  `age` int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'quoteChar' = '"',
  'field.delim' = ','
) 
LOCATION 's3://test-athena-linh/pet/'
TBLPROPERTIES (
  'has_encrypted_data'='false', 
  'skip.header.line.count'='1'
);
  • ROW FORMAT のプロパティ部分で、クオート文字を指定
  • TBLPROPERTIES で スキップする行番号を指定

参考

(WIP)家計簿つけにハマっています(現金レス+省力+電子マネー明細も取り込む)

家計簿つけにハマっています。まだ理想形に至っていないのでWork In Progress(WIP)ですが、一旦メモります。

始めるにあたってのコンセプト

  • 手動での入力は極力やらない
    • 電子マネーやクレカを支払いの基本とし、極力自動(家計簿アプリ)で家計簿をつける
  • 現金レス

上記のコンセプトのなかで、「交通費」と「電子マネーSuica)の帳簿付け」がネックになりました。

全体的にやったこと・これからやることとしては以下

前提: 家計簿アプリはMoneyForward

アプリは今はMoneyForwardを使っています。 一応、選定時に下記を使ってみました。

MoneyForward Zaim MoneyTree コメント
予算管理 この時点でMoneyTree は脱落。
「今月あといくら使っても大丈夫」が知りたいので

TODO

zaimはシンプルだけど、何かが気になってMoneyForwardを選んだ気が、、、 理由を思い出したらまた書きます

交通費のテコ入れ

最終的にはモバイルSuica を目指すんですが、オートチャージだけじゃだめなの?とか色々とややこしかったので備忘的に整理しました。

交通費系のサービス・機能まとめ

モバイルSuica オートチャージモバイルSuicaなし)
特徴 対応の携帯端末に仮想Suicaを入れるイメージ
普通のSuicaで出来ることに加え、更にViewカード使うとオートチャージとか色々出来る
Suicaに「残額がいくらになったらクレカからいくらチャージする」が出来る機能。
モバイルSuicaでも可能だが、モバイルSuicaを使わない場合のことを記載する
制約条件(必須) モバイルSuica対応の携帯端末
・クレカ
Suicaカード
Viewカード(クレカ)
制約条件(任意) Viewカード(クレカ)※Viewカードじゃない場合は年会費がかかるViewカードはいまのところかからない。Viewカードじゃないとオートチャージできない
明細の家計簿連携(交通費以外の物品購入など)

総論

年会費を押さえつつ、明細まで連携するのであれば、下記が必須。

仮説: 自分が選ぶべきモバイルSuica 端末「iPhone以外のスマホ vs iPhone vs Apple Watch

この記事を書いている時点で、View カードを手に入れているがモバイルSuica端末を手に入れてない状態です。 以降でモバイルSuica 端末をどうするかを考えています。

ちなみに、現在所有しているスマホは、 iPhone 6S Plus(SIMフリー)。バッテリーはちょっとヘタってきてます。

比較表

iPhone以外のスマホスマホ機種変) iPhoneスマホ機種変) Apple Watch メモ
iCloud写真共有 - 妻との写真共有がiCloudで、義母ともiCloudで写真共有している。
この時点でロックインされちゃってることに気づく。
また、iTunesで結構音楽も買ってるんだよなぁ。
ちなみにiPad Proも持っていて普段持ち歩いているので音楽は最悪iPad Proで良いと思うが、写真撮影のためにiPadは結構辛い。
さらにちなみに、スマホを複数持つ、も煩雑なので選択肢としては無し
端末安さ
端末代詳細 ここ見る限り、3万とか? iPhone8 64GBで5.8万 4万 iPhoneについて追記
本体税込8.5万、
今の6S Plusを下取りして2.7万、その差引という計算。
Plus にしない理由は、iPadで「大きな画面」という要素は満たせているから。
X(テン)にしない理由は、端末の高さに辟易している、、、
改札での右手利用 Apple Watchつらそうと思っていたが、意外と実用できそうな記事をみた。
画面側をかざさなくても大丈夫そうなのはありがたい!

総論

今の6S Plusのストレージ利用状況とバッテリーのヘタり具合から鑑みても、8の64GBにするのが妥当っぽい。

  • iPhone以外はiCloudが無いので論外、
  • AppleWatchと悩むが、
    • スマホを下取りした場合の価格差がそこまで大きくないのと、
    • AppleWatchをモバイルSuicaのためだけに(健康とかじゃなく)買うのどうなのっていうのと
    • 改札で左手でかざすのがなんだかんだつらそう
    • あと、AppleWatchはこまめに充電できる自信がない。
    • 腕時計付ける習慣がないから腕につけるの忘れそう。
    • てことで iPhoneに軍配が上がりそう

忘れ・バッテリー切れ対策について

自分はカードのSuicaを財布とは別にパスケースに入れて運用しているが、その理由はどっちかが無くても最悪なんとかなるからです。 だからバックアッププランは用意しとかなきゃなんだけど、

と考えてます。

オートチャージについてが結構落とし穴があり、Viewカード = Suica を連携させてSuicaオートチャージできるようにするのを リンク と言うらしいですが、 1つのViewカードは、1つのSuicaにしかリンクできないっぽいです。 ↑の説明だと、 Viewカードが物理Suicaカードとのリンクの説明しかしてないから、仮想Suicaカード(モバイルSuica)ともリンクできるのか? とも思ってるけど、あまり期待しないほうがいいかな。。。

とりあえず、オートチャージはメインのSuicaのみを想定して、サブを複数運用することできっと忘れても大丈夫でしょう。

付録: ANA Master から ANA VISA(Viewカード)への移行

メインのクレカが ANA Master で、Viewカードではなかったので移行しました。 ANAカードを選んでる理由は、実家が遠く少なくとも年に一度は飛行機にのる&クレカに支払いを寄せているため 年に少なくとも1回の往復便くらいはマイルがたまります。 家族で帰省するとなるとその効果もさらに増大する感じです。

で、公式によると、普通に新しいカードに新規入会してマイルの移行もできるらしいので(まだ手続きしてないけど)、 安心して移行しました。