12/25 追記
JDK8でmaven releaseプラグイン経由でJARを生成するときにjavadocを作成しててエラーになった。
maven-javadoc-pluginのconfiguration <additionalparam>-Xdoclint:none</additionalparam>
を追加した
サーバ構成
インフラの構成ファイルはchefで管理
- アプリケーションサーバ 約50台
- jetty + Spring Framework 3.2.4
- バッチサーバ 2台
- Jenkins + Spring Framework 3.2.4
当初の予定
以前、他メンバーがJDK8にアップデートできるか検証してくれていて、NewRelicが対応していなかったため断念したという経緯があったので、そんなに変更が無いだろうと判断。
- 開発環境で軽く検証
- サーバ1台にJDK7でコンパイルしたwarをJDK8上で動くか検証する。問題があれば即座にロードバランサーから切り離す。
- NewRelicやMunin,Zabbixの確認
- 問題なければ全サーバへJDK8をアップデート(アプリはJDK7でコンパイル)
- JDK8でコンパイルしたアプリをデプロイする (←ここはまだ)
もちろんすべての動きを開発環境で確認できるのがベストだが無理かつ、他システムと連携している部分は最終的には本番環境でしか確認できない。
よって、実際に稼働しているサーバに入れて、ログを監視して問題があれば、ロードバランサーからサーバを切り離してユーザがアクセス出来ないようにする方針を取った。
開発環境上でハマったところ
- コンパイルが通らない
- lombokのバージョンが古かったので最新にバージョンアップ
- テストがコケる
- Jenkins(Version 1.555)がJDK8で起動しない
- Jenkinsを最新に変更した
Springのバージョンアップが入った時点で予定変更
本番環境へ入れてみてハマったところ
性能/JVMパラメータ
JDK7でコンパイルしたアプリをJDK8上で動かしても特に性能落ちていない。
JVMパラメータなどはPermSize→MetaspaceSizeに変更して、MaxDirectMemorySizeを追加したぐらいで、G1GCは入れてない。
問題が起きた時に何が原因かわからなくなるので、変更は最小限にしたかった。
G1GC導入は他の優秀なエンジニアがやってくれるはず|д゚)チラッ
感想
- 当初、他作業と平行してやろうと思ってたが、やっぱり無理だったので、この作業だけに専念できたのは大きかった
- 社内のプライベートクラウドが便利だった。一人あたり5CPU分つかえたので、JDK7とJDK8を入れたサーバを用意して、それぞれで問題ないか検証してた。
- SpringのバージョンアップCVE-2014-3578 Directory Traversal in Spring Frameworkの問題が見つかったので、Springのバージョンを3.2.12にあげて正解だった。
参考にしたもの

- 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログ (1件) を見る
![Software Design (ソフトウェア デザイン) 2014年 10月号 [雑誌] Software Design (ソフトウェア デザイン) 2014年 10月号 [雑誌]](http://ecx.images-amazon.com/images/I/51gMA6BhkEL._SL160_.jpg)
Software Design (ソフトウェア デザイン) 2014年 10月号 [雑誌]
- 出版社/メーカー: 技術評論社
- 発売日: 2014/09/18
- メディア: 雑誌
- この商品を含むブログ (4件) を見る