Hatena::ブログ(Diary)

Diary of strysd このページをアンテナに追加

2016-07-23

最近の JIRA Software と Confluence のマイ・オプション

| 17:25 | 最近の JIRA Software と Confluence のマイ・オプションを含むブックマーク

最近、JIRA Software 7.1 と Confluence 5.10 をノートPC にインストールし直す機会があり、 Java のオプションをいろいろ変えてみたりしたので、自分が設定したオプションをメモのために残しておきます。OSWindows で 64bit 版です。

JIRA Software の bin フォルダーの setenv.bat は、下記のように変更しました。

- set JVM_SUPPORT_RECOMMENDED_ARGS=
+ set JVM_SUPPORT_RECOMMENDED_ARGS=-XX:-UseCodeCacheFlushing -Xverify:none -XX:+TieredCompilation -XX:TieredStopAtLevel=1
- set JVM_MINIMUM_MEMORY=384m
+ set JVM_MINIMUM_MEMORY=512m
set JVM_MAXIMUM_MEMORY=768m

verify:none 、TieredCompilation と TieredStopAtLevel は、起動高速化に役立つかどうか試すため入れてみました。(TieredCompilation と TieredStopAtLevel は、64bit OS の場合のみ有効な手段)

UseCodeCacheFlushing は、ReservedCodeCacheSize とともに Java 7u4 以降で使用できるオプションだそうです。注意点として UseCodeCacheFlushing のプラスではなく、マイナスを設定してます。

UseCodeCacheFlushing をマイナス設定すると、長期間継続使用するときのパフォーマンス劣化に効くらしいです。ただし、ノート PC では、デモ説明とか資料つくりとか、長くても8時間くらいでサービスを落としてしまうので、設定の効果はまだ明確にできていません。

JVM_MINIMUM_MEMORY は、JDK 付属の Java Mission Control の JMX グラフを見ながら、コミットされたメモリ量を参考に設定してみました。ちなみに、私の JIRA 上のプロジェクトや課題やボードは、作っては全部消すことを繰り返していていつもはデータがありません。本番環境だと、この 値では少ないかもしれません。

ちなみに最初は、MaxPermSize と PermSize も指定したのですが、起動直後のログを見て、Java8 ではこの2つが無視されることに気づき除外しました。

同じく Confluence は、下記のように変更しました

- set CATALINA_OPTS=-XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:-PrintTenuringDistribution %CATALINA_OPTS%
+ rem set CATALINA_OPTS=-XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:-PrintTenuringDistribution %CATALINA_OPTS%
- set CATALINA_OPTS=-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M %CATALINA_OPTS%
+ rem set CATALINA_OPTS=-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M %CATALINA_OPTS%
- set CATALINA_OPTS=-Xloggc:"%atlassian_logsdir%\gc-%atlassian_timestamp%.log" %CATALINA_OPTS%
+ rem set CATALINA_OPTS=-Xloggc:"%atlassian_logsdir%\gc-%atlassian_timestamp%.log" %CATALINA_OPTS%
set CATALINA_OPTS=-Djava.awt.headless=true %CATALINA_OPTS%
- set CATALINA_OPTS=-Datlassian.plugins.enable.wait=300 %CATALINA_OPTS%
+ rem set CATALINA_OPTS=-Datlassian.plugins.enable.wait=300 %CATALINA_OPTS%
- set CATALINA_OPTS=-Xms1024m -Xmx1024m -XX:+UseG1GC %CATALINA_OPTS%
+ set CATALINA_OPTS=-Xms640m -Xmx1024m -XX:+UseG1GC %CATALINA_OPTS%
+ set CATALINA_OPTS=-XX:-UseCodeCacheFlushing %CATALINA_OPTS%
+ set CATALINA_OPTS=-Xverify:none -XX:+TieredCompilation -XX:TieredStopAtLevel=1 %CATALINA_OPTS%

Confluence の GC ログは、中身を見て何か対策する、ということができるところまでまだ私が至りません。そのため、ディスク I/O 減を優先して、一旦すべて GC ログ関係の設定をコメントアウトしてしまいました。

Xms は、初期値の 1024MB だとノートPC でほかにもいくつかソフト立ち上げたいときに困るので、JDK 付属の Java Mission Control の JMX グラフを見ながら、コミットされたメモリ量を参考に設定してみました。ちなみに、私の Confluence 上のスペースやアイテムは、作っては全部消すことを繰り返していていつもはデータがありません。本番環境だと、この Xms 値では少ないかと思われます。

atlassian.plugins.enable.wait は、この設定をコメントアウトしたら何が起きるのか知りたかったのでコメントアウトしてみました

ちなみに、クラウド版のアカウントセットアップを行って使う場合は、これらのオプションのことは忘れてください

Java VM ヒープ領域調査用バッチファイル

| 16:55 | Java VM ヒープ領域調査用バッチファイルを含むブックマーク

今まで Windows に JIRA Software / JIRA Service Desk / JIRA Core のサーバー版をインストールする際、「サービスとして起動」のチェックボックスをチェックつけてました。

インストール後にわざわざサービス管理の画面で Atlassian JIRA サービスの「自動起動」を「手動起動」に変えて、必要な時だけ起動する使い方をしていたのですが、最近ヒープ領域の使用量について調べたいことがあり気づきました。

  • サービスとして起動すると、JDKjps コマンドでプロセス番号が表示されない! ということは jstat コマンドなども使えない。。。

そんなわけで「サービスとして起動」のチェックボックスをチェックしないよう気を付けて再インストール。すると今度は、jps コマンドをたたくと、Bootstrap という名前で JIRA Software のサーバー版のプロセス番号が取れるようになり、めでたしめでたし。しかもサービス管理画面でいちいち自動起動を手動起動に直す手間いらないし。

jps コマンドと jstat コマンドを簡単に呼び出せるように、下記のような bat ファイルも用意してみました。JAVA_HOME は JDK のインストール先のパスを入れておくために用意した環境変数です。

echo off
cd "%JAVA_HOME%\bin"
java -version
jps
set /P MYVMID="Java VM の PID を入力してください:"
if "x%MYVMID%x" == "xx" goto myend
jstat -gcutil %MYVMID%
pause
exit

:myend
echo "指定されませんでした"
pause
exit

結果はこんな風に表示されます。

f:id:satoruyoshida:20160723165220p:image

2016-07-09

暑くなりましたので節電方法

| 14:03 | 暑くなりましたので節電方法を含むブックマーク

最近暑くなりましたね。なんか6月の半ばくらいから一気に暑くなった気がします。

気温と雨量の統計 weather.time-j.net という Web サイトで、一番近い主要都市の気温グラフを探すと、横浜のものがありました。

f:id:satoruyoshida:20160709131541p:image

自分の体感的には、気温が28度以上になると暑く感じるようです(個人差があると思います)

さて、最近自宅に帰宅すると真っ先にすることがあります。それは、一番換気扇から遠い場所の窓だけを開けてしばらく換気扇を回すことです。最初は部屋の中も暑いし、壁や床も熱を持っているのですが、換気扇を10分くらい回しているうちに気温が2〜3度下がって、壁や床も冷えてきます。そのように冷めてきてからエアコンをONにするよう心がけています。

あとは、休日は朝からエアコンをONにしておいて、急激に温度が上がるのを防いだり、エアコンにあたる日光を減らすため、エアコンのうえにすだれをかけたりして、少しでも節電に心がけています。

あとは休日の朝に洗濯物を早く済ませて干してしまうことですね。これは以前エアコンがない家に住んでいたときからの習慣です。太陽の光を若干さえぎってくれます(笑

パソコンを自宅でも使われているかたは、パソコンが熱を持つことにもお困りかもしれません。

すぐ簡単にできることとして、視覚効果をOFFにすることができます。

  • 最初にコントロールパネルを表示して、その中の「システムとセキュリティ」を選択します。

f:id:satoruyoshida:20160709134315p:image

  • 次にその中の「システム」を選択します。

f:id:satoruyoshida:20160709134554p:image

  • 左側のメニューの「システムの詳細設定」を選択します。

f:id:satoruyoshida:20160709134159p:image

  • 「システムのプロパティダイアログが表示され、5つのタブがあります。そのうち中央の「詳細設定」タブを選択し、そのタブの上の部分にある「パフォーマンス」という枠の中の「設定」ボタンを押します。

f:id:satoruyoshida:20160709134317p:image

  • 「パフォーマンス オプション」ダイアログが表示され、3つのタブがあります。そのうち左の「視覚効果」タブを選択します。最初は、一番上の「コンピューターに応じて最適なものを自動的に選択する」のすぐ左の丸印にチェックが入っています。「パフォーマンスを優先する」の丸印にチェックをつけ直して右下のOKボタンを押します。
    • どうしても使いたい視覚効果がありましたら、「パフォーマンスを優先する」の代わりに「カスタム」を選んで必要なもののみチェックをつけていただけましたら幸いです。

f:id:satoruyoshida:20160709134316p:image

  • お待ちください、と表示された後、画面の表示が全体的に変わります。「システムのプロパティ」ダイアログが表示されます。
  • 「システムのプロパティ」ダイアログの右下のOKボタンを押します。
  • コントロールパネルの表示を右上の×印で閉じます。

画面表示がダサい感じにはなってしまいますが、PCをしばらく使っているうちに前よりも熱を持ちにくいことに気づいていただければ幸いです。

2016-05-07

Oomph をベースにした Eclipse Installer は安定したか

| 20:53 | Oomph をベースにした Eclipse Installer は安定したかを含むブックマーク

Eclipse 4.5 (Mars) とともに 2015年6月 にリリースされた Eclipse Installer は、Mars がまだ Developer Build のときに一回試したことがあります。そのときは起動直後にこけて、まだまだ使えないと感じていました。

今日、次の 4.6 (Neon) の Developer Build から JavaScript Development Tool をパッケージとしてダウンロードする代わりに、Eclipse Installer を使ってみました。すんなり動いて感動。

下の画像の矢印の先で示した Windows 32bit 版を使用しました。

f:id:satoruyoshida:20160507203139p:image

一回 Eclipse Installer をダウンロードしてから、その Installer を起動して目的の開発環境やライブラリーをダウンロード、と少なくとも2段階の作業になります。なので、ADSL 回線などの細い回線をお使いの場合はパッケージとして固まっているものをダウンロードするほうが手っ取り早いです。

光回線をお使いの場合は、Eclipse Installer を使用することにより開発環境作成時の自由度が高くなりますね。

私も今後は積極的に Eclipse Installer を使っていこうと思います。

2016-04-29

JavaScript で作業時間数計算

| 10:43 | JavaScript で作業時間数計算を含むブックマーク

必要があって、作業開始時刻から終了時刻までの時間数を計算するロジックを JavaScript で組んでみました。開始時刻と終了時刻を最大5組まで入力して 0.25時間単位で計算します。


JavaScript 部分はこちら。

function allclear() {
	var myst = document.getElementsByName("myst");
	var myen = document.getElementsByName("myen");
	var res = document.getElementsByName("res");
	var len = myst.length;//入力行の数
	var total = 0;

	for ( var i = 0; i < len; ++i) {
		myst[i].value = '';
		myen[i].value = '';
		res[i].value = 0;
	}

	PLAN.allres.value = total;
}

function calc() {
	var myst = document.getElementsByName("myst");
	var myen = document.getElementsByName("myen");
	var res = document.getElementsByName("res");
	var len = myst.length;//入力行の数
	var total = 0;

	for ( var i = 0; i < len; ++i) {
		//:記号と空白を除去し、入力欄の値に反映します。
		stvalorg = myst[i].value.replace(/^\s+|\s+$|\:/g, '');
		envalorg = myen[i].value.replace(/^\s+|\s+$|\:/g, '');
		myst[i].value = stvalorg;
		myen[i].value = envalorg;

		//未入力、数値ではない、時刻逆転の3種類の場合、計算対象外にします。
		if (stvalorg == '' || envalorg == ''
		|| isNaN(stvalorg) || isNaN(envalorg)
		|| stvalorg > envalorg) {
			myhr = 0;
		} else {

			//4桁未満の入力の場合に対応
			stval = '0000' + stvalorg;
			enval = '0000' + envalorg;

			//時と分を2桁ずつ切り出します。
			stmn = stval.substr(-2, 2);
			enmn = enval.substr(-2, 2);
			sthr = stval.substr(-4, 2);
			enhr = enval.substr(-4, 2);

			//15分単位で割り算し切り捨て後、時間単位に変換
			myhr = Math.floor(((parseInt(enhr) - parseInt(sthr)) * 60
			     + parseInt(enmn) - parseInt(stmn)) / 15) / 4;

			//1200以前に開始し、1300以降に終了した場合だけ1時間減。
			//1200過ぎに開始した場合、1300より前に終了した場合は考慮していません。
			if (stval.substr(-4, 4) <= '1200'
			&&  enval.substr(-4, 4) >= '1300') {
				myhr -= 1;
			}
		}

		res[i].value = myhr;
		total += myhr;
	}

	PLAN.allres.value = total;
}

入力欄を表示するための HTML 部分はこちら。

script タグの部分は JavaScript 部分を別ファイル (calcworktime.js) にした場合の書き方です。もちろん、src 属性を使わずに script タグの内部に JavaScript 部分を書いてもかまいません。

<html>
<head>
<meta charset="UTF-8">
<title>作業時間計算</title>
<script type="text/javascript" src="calcworktime.js"></script>
</head>
<body>
<form name="PLAN">
	<table>
	<tr>
		<th>開始時刻</th>
		<th>終了時刻</th>
		<th>時間数(0.25単位)</th>
	</tr>
	<tr>
		<td><input type="text" name="myst" size="6" maxlength="5" tabindex="1"></td>
		<td><input type="text" name="myen" size="6" maxlength="5" tabindex="2" onblur="calc()"></td>
		<td><input type="text" name="res" size="4" value="0"></td>
	</tr>
	<tr>
		<td><input type="text" name="myst" size="6" maxlength="5" tabindex="3"></td>
		<td><input type="text" name="myen" size="6" maxlength="5" tabindex="4" onblur="calc()"></td>
		<td><input type="text" name="res" size="4" value="0"></td>
	</tr>
	<tr>
		<td><input type="text" name="myst" size="6" maxlength="5" tabindex="5"></td>
		<td><input type="text" name="myen" size="6" maxlength="5" tabindex="6" onblur="calc()"></td>
		<td><input type="text" name="res" size="4" value="0"></td>
	</tr>
	<tr>
		<td><input type="text" name="myst" size="6" maxlength="5" tabindex="7"></td>
		<td><input type="text" name="myen" size="6" maxlength="5" tabindex="8" onblur="calc()"></td>
		<td><input type="text" name="res" size="4" value="0"></td>
	</tr>
	<tr>
		<td><input type="text" name="myst" size="6" maxlength="5" tabindex="9"></td>
		<td><input type="text" name="myen" size="6" maxlength="5" tabindex="10" onblur="calc()"></td>
		<td><input type="text" name="res" size="4" value="0"></td>
	</tr>
	<tr>
		<th colspan="2">合計:</th>
		<td><input type="text" name="allres" size="4" value="0"></td>
	</tr>
	</table>
	<br />
	<input type="button" onclick="calc()" value="再計算" tabindex="11">
	&nbsp;&nbsp;
	<input type="button" onclick="allclear()" value="クリア" tabindex="12">
</form>
</body>
</html>
  • 注意
    • 0900, 1330, 2515 のように入力してください。 :記号や時刻一桁だけ (例: 900) も OK
    • 12時以前に開始して13時以降に終了する場合だけ 1 時間引いています。
    • IE では使用できません。FireFox 45.0.2 で動作確認済です。

2016-03-12

スクラムソフトウェア開発プロジェクトがまったく分からないのでデブサミ再演を聞いてきた

| 11:08 | スクラムソフトウェア開発プロジェクトがまったく分からないのでデブサミ再演を聞いてきたを含むブックマーク

私が SIerシステム開発の現場に携わっていたのは 2000年から2006年までの約6年半で、ウォーターフォール型のプロジェクトのみだったので、正直な話 JIRA Software で作成できる6種類のプロジェクトのうち、スクラムソフトウェア開発プロジェクトは、使い方がまったく分かりませんでした。

実際にアジャイル開発をしている人の話を聞いたらスクラムソフトウェア開発プロジェクトの使い方のイメージがわくかもしれないと考え、3月11日の夜にドワンゴの会議室を借りて行われた、「【デブサミ2016再演】19-C-3・19−E-3・19−A-5」 を聞いてきました。

アジャイル(GINZA) の中で紹介された書籍にもあとで目を通そうと思いますが、スクラムソフトウェア開発プロジェクトは、もしかすると 教科書的にアジャイルソフトウェア開発をするときにぴったりはまるものなのかもしれない、と仮説を立てました。

その仮説が正しいかどうかという視点で JIRA Software のスクラムソフトウェア開発プロジェクトの各種機能を見てみようと考えています。

もうひとつ考えたこととして、ウォーターフォール型の人にとっては、

  • 一定期間ごとにサイクルをまわすという考え方にいきなり切り替えるよりは、
  • 今月(あるいはこの四半期は、とか)は、「設計を考える」期間という風に目的別に定義して、その期間内で、いろいろな機能の設計を優先順に考える、と解釈しなおして取り入れたほうが

とっつきやすいのかな、と漠然と思っています。

仮説と並行して、ウォーターフォール型経験のみの人に、スクラムソフトウェア開発プロジェクトの使い方をわかりやすく説明にするにはどうしたら良いか、という視点でも考えてみたいと思います。

ちなみに再演の中で触れられた本とは別のものですが、2004 年の書籍ですでにスクラムという言葉が出てきているんですね。XP という言葉は知ってましたが、自分のアジャイル方面へのアンテナのなさに愕然とするばかりです。この機会に、基礎的なところをまず学びたいと思います。

(5月7日追記)

最近の書店を見ますと、カンバン開発やスクラム開発についての入門書が販売されていますね。今から取り組むのであれば下記のような最新の入門書を使って学ぶのがよさそうです。