yuu_nkjm blog


2011-02-06(Sun) [長年日記] 編集

[Windows][bat] バッチファイルで呼び出したコマンドの標準出力,標準エラーがリダイレクトできない

リダイレクト成功

(1)
SET CONF_DIR="conf/"
java ^
info.nkjm.yuu.Generator %CONF_DIR% 2>%SCRIPT_LOCATED_DIR%/syserr.log
(2)
SET CONF_DIR="conf/"
java ^
info.nkjm.yuu.Generator ^
 %CONF_DIR% 2>%SCRIPT_LOCATED_DIR%/syserr.log
(3)
java ^
info.nkjm.yuu.Generator ^
conf/ 2>%SCRIPT_LOCATED_DIR%/syserr.log
(4)
SET CONF_DIR=conf/
java ^
info.nkjm.yuu.Generator ^
%CONF_DIR% 2>%SCRIPT_LOCATED_DIR%/syserr.log

リダイレクト失敗

(5)
SET CONF_DIR="conf/"
java ^
info.nkjm.yuu.Generator ^
%CONF_DIR% 2>%SCRIPT_LOCATED_DIR%/syserr.log
(6)
java ^
info.nkjm.yuu.Generator ^
"conf/" 2>%SCRIPT_LOCATED_DIR%/syserr.log

まとめ

(1)が成功で(5)が失敗なのが意味不明だった.(4)と(5)の差から,変数CONF_DIRにダブルクォーテーションで囲んだディレクトリ名を格納していることが原因と分かる.エディタにハイライトして欲しいからって無駄にダブルクォーテーションで囲ったのが敗因か….

(一)
java -version 2>ver1.log
(二)
java "-version" 2>ver2.log
(三)
""java ""-version" 2>ver3.log"
(四)
""java ""-version" "2>ver4.log""
(五)
""java ""-version ""2>ver5.log""

上記の例では,(三)だけlogが作成されない.自分としては(二)を書いたつもりだったが,(三)のように解釈されてしまったんだと思う.


2011-02-05(Sat) [長年日記] 編集

[bash][Linux][Java] シェルスクリプトの設置場所に移動してからのコマンド実行

状況

"/home/hoge/deep/path/project/sh/"という位置にJavaプロジェクトの起動スクリプトを置きたい.Javaのクラスパスの関係から,"/home/hoge/deep/path/project/"でjavaコマンドを発行したい.

スクリプト

起動スクリプトとしてboot.shを作成し,"/home/hoge/deep/path/project/sh/"に設置する.

シェルスクリプトの$0という環境変数には,スクリプトの相対パス付ファイル名が入っている.dirnameコマンドを使って,そこからファイル名を取り除いている.

以下では,全てを絶対パスに変換してから渡しているが,Javaに渡す引数は絶対パスではなく,javaコマンドを実行するパスからの相対パスにした方が良いかもしれない.

#!/bin/bash
SCRIPT_CALLED_DIR=`pwd`
echo   This script is called from  ${SCRIPT_CALLED_DIR}
SCRIPT_LOCATED_DIR=${SCRIPT_CALLED_DIR}/`dirname $0`
echo   This script is located at  ${SCRIPT_LOCATED_DIR}
cd ${SCRIPT_LOCATED_DIR}
echo   Move to script dir  ${SCRIPT_LOCATED_DIR}
cd ../
PROJECT_DIR=`pwd`
echo   Move to Project dir  ${PROJECT_DIR}
`java -cp bin:jar/log4j-1.2.15.jar info.nkjm.yuu.Hoge`

実行結果

どこからboot.shを実行しても,javaコマンドを実行したい"/home/hoge/deep/path/project/"に移動できている.

[hoge@info /home/hoge]$ deep/path/project/sh/boot.sh
  This script is called from  /home/nkjm
  This script is located at  /home/hoge/deep/path/project/sh
  Move to script dir  /home/hoge/deep/path/project/sh
  Move to Project dir  /home/hoge/deep/path/project
[hoge@info /home/hoge/deep/path]$ project/sh/boot.sh
  This script is called from  /home/hoge/deep/path
  This script is located at  /home/hoge/deep/path/project/sh
  Move to script dir  /home/hoge/deep/path/project/sh
  Move to Project dir  /home/hoge/deep/path/project

関連ページ


2011-01-18(Tue) [長年日記] 編集

[Profiler][JVM][Java][Eclipse] Javaのプロファイラ Java VisualVM

Java1.6以降のSDKをダウンロードするとbin以下にjvisualvm.exeというプロファイラが同梱されている.EclipseのTPTPプラグインを使ってたけど,こっちの方が分かりやすかった.

プログラムの監視

  1. Java VisualVM(jvisualvm.exe)を起動する.
  2. 監視対象としたいプログラムを起動する.
  3. VisualVMの左ペインのローカルセクションに,監視対象としたいプログラムが表示されたら,右クリックして「開く」を選択する.
  4. 監視タブを開くと,CPUやヒープの利用状況を見ることができる.スレッドタブを開くと,スレッドの利用状況を見ることができる.

CPU時間をサンプリングする

  1. サンプラタブを開く.CPUボタンをクリックするとサンプリングが開始される.
  2. 適当な時間が経過したあと,スナップショットボタンを押すとサンプリング結果が表示される.
  3. 監視対象が終了すると左ペインからプログラムが消えてしまうので,適当なタイミングで右クリックメニューから「アプリケーションのダンプ」を選んでおいた方が良さそう.

ヒープダンプする

  1. 左ペインから,ヒープをダンプしたいプログラムを右クリックし,ヒープダンプを選ぶ.
  2. ダンプしたファイルは,Eclipse Memory Analyzerプラグインで見るのが良さそう.IBM HeapAnalyzerも試して見たけど,Eclipse Memory Analyzerの方が直感で操作できた.

関連ページ

title0 title3 title2

トップ 最新 追記 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|