そんなに精度が必要ない場合(秒単位で良い場合)
シェルスクリプト内で,
START=`date +%s`
・・・処理
END=`date +%s`
SS=`expr ${END} - ${START}`
とすれば秒単位での値が入ります.
参考ページ:
シェルスクリプトの処理時間
精度が必要な場合は,
gettimeofdayを使用
使い方は以下のページ参照.
マイクロ秒単位での取得が可能です.
参考ページ:
Manpage of GETOFDAY
C言語:実行時間測定の方法
2008年12月24日水曜日
LD_PRELOAD in シェルスクリプト
随分更新をサボっていました…(*_*;)
この間つまって先輩に助けてもらったことを.
この間の記事で,bashだと,コマンドライン上でプログラムの前にLD_PRELOADの設定ができると記述しました.
これを,シェルスクリプト内に書くと,うまくいきません..
これは,"LD_PRELOAD=./hook.so"をコマンドとして解釈してしまうかららしい.
そこで,こういう場合は,
/bin/bash -c "LD_PRELOAD=./hook.so……"
とすることで解決できました.
この間つまって先輩に助けてもらったことを.
この間の記事で,bashだと,コマンドライン上でプログラムの前にLD_PRELOADの設定ができると記述しました.
これを,シェルスクリプト内に書くと,うまくいきません..
これは,"LD_PRELOAD=./hook.so"をコマンドとして解釈してしまうかららしい.
そこで,こういう場合は,
/bin/bash -c "LD_PRELOAD=./hook.so……"
とすることで解決できました.
2008年12月16日火曜日
メモリ使用量の制限
/boot/grub/grub.conf に追記することで簡単に可能でした.
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
2008年12月15日月曜日
シェルスクリプト
冒頭に使うシェルを記述し(#!/bin/sh),実行権限を与えることで,
./hoge.shと実行することが可能.
●cnt++;の表現
cnt=`expr $cnt + 1`
*イコールの前後にスペースを入れない
*'(シングルクォート)ではなく`(バッククォート)!!
●argv[1]の表現
$1
とか色々!
シェルスクリプト3年まで使ったことなかったけど,とても便利ですね★
参照ページ:
シェルスクリプト入門
シェルスクリプト(Bash)
./hoge.shと実行することが可能.
●cnt++;の表現
cnt=`expr $cnt + 1`
*イコールの前後にスペースを入れない
*'(シングルクォート)ではなく`(バッククォート)!!
●argv[1]の表現
$1
とか色々!
シェルスクリプト3年まで使ったことなかったけど,とても便利ですね★
参照ページ:
シェルスクリプト入門
シェルスクリプト(Bash)
2008年12月13日土曜日
環境変数:LD_PRELOAD
これを用いると,プログラムの変更なしに任意の関数をフックすることができるようです.
……こわい!!笑
環境変数 LD_PRELOAD - 技術メモ帳が分かりやすかったので参考にさせていただきました.
ある関数名を定義し,それを共有オブジェクトとして指定し,プログラムを実行します.
同名関数が存在した場合は上書きすることができるため,関数のフックが可能です.
以下,やり方を.
プログラムhooktest.cを作成し,共有オブジェクトとしてコンパイル.
% gcc -fPIC -shared -o hooktest.so hooktest.c
そして環境変数に指定してメインのプログラムを実行
% LD_PRELOAD=/home/test/hooktest.so ./main
*プログラムを実行する場所と,共有オブジェクトの場所関係を考慮しなくても済ませるため,絶対パスを利用した方がいいカモ
……こわい!!笑
環境変数 LD_PRELOAD - 技術メモ帳が分かりやすかったので参考にさせていただきました.
ある関数名を定義し,それを共有オブジェクトとして指定し,プログラムを実行します.
同名関数が存在した場合は上書きすることができるため,関数のフックが可能です.
以下,やり方を.
プログラムhooktest.cを作成し,共有オブジェクトとしてコンパイル.
% gcc -fPIC -shared -o hooktest.so hooktest.c
そして環境変数に指定してメインのプログラムを実行
% LD_PRELOAD=/home/test/hooktest.so ./main
*プログラムを実行する場所と,共有オブジェクトの場所関係を考慮しなくても済ませるため,絶対パスを利用した方がいいカモ
2008年12月12日金曜日
sysstat
システムの状態を監視することができるツール.
rpmで発見したのでいれてみたところ,謎なことにドキュメントしかなくてw
READMEに書いてあったページにいってダウンロードしました.
ここからsysstat-8.1.7.tar.gz
をダウンロード.
以下README通りにやってみたことを.
% tar xvf sysstat-8.1.7.tar.gz
% cd sysstat-8.1.7
% ./configure
% make && make install
インストール完了.
ここで,例えば,プロセスIDが2001のMysqlサーバを5秒ごとに20回値を見たい場合,
% ./pidstat -p 2001 5 20
とすることで,そのプロセスのユーザモード,システムモードでのCPU使用率を監視することができ,平均値まで算出してくれます.
詳細は分かりませんが,ある程度の時間監視したい場合に便利そう.
参照ページ:
sysstatで性能管理(その1)
pidstatでプロセス毎のCPU使用率を測定 | gmt-24.net
rpmで発見したのでいれてみたところ,謎なことにドキュメントしかなくてw
READMEに書いてあったページにいってダウンロードしました.
ここからsysstat-8.1.7.tar.gz
をダウンロード.
以下README通りにやってみたことを.
% tar xvf sysstat-8.1.7.tar.gz
% cd sysstat-8.1.7
% ./configure
% make && make install
インストール完了.
ここで,例えば,プロセスIDが2001のMysqlサーバを5秒ごとに20回値を見たい場合,
% ./pidstat -p 2001 5 20
とすることで,そのプロセスのユーザモード,システムモードでのCPU使用率を監視することができ,平均値まで算出してくれます.
詳細は分かりませんが,ある程度の時間監視したい場合に便利そう.
参照ページ:
sysstatで性能管理(その1)
pidstatでプロセス毎のCPU使用率を測定 | gmt-24.net
プロセスごとのCPU使用率の計算
(調べたいプロセスの使用時間) / (全体の時間)
で算出できます.
●調べたいプロセスの使用時間
/proc/(pid)/stat内の,
utime(14番目の値)+stime(15番目の値)
で算出可能
●全体の時間
/proc/stat内のCPU情報
cpu 3357 0 4313 1362393
(左から順に,ユーザーモード,低い優先度 (nice) でのユーザーモード,システムモード,タスク待ち(idle task))
を全て足し合わせた時間
*どちらの値も,積算されているものなので,同じ間隔をとって差をとる必要があります
/procの内容に関する詳細は,%man procで見られます.
この/proc以下の情報はクロック割り込みごとに値を更新します.
が,ユーザ空間から見るためには,ファイル形式になっているため,ファイルのopen,read,closeをしなければならず,多少の時間が必要です.
よって,1msや10ms間隔で見ることは無理そうです.
間隔がある程度大きくても大丈夫な場合は,調べたいプロセスに関する情報のみを追うことができる便利なツール,sysstatもあります.
詳細は次の記事へ.
全体を眺めるならばtopを利用.
ちなみにtopの更新はデフォルト5sだそうです.
オプションをつけることで更新間隔を変更することも可能です.
で算出できます.
●調べたいプロセスの使用時間
/proc/(pid)/stat内の,
utime(14番目の値)+stime(15番目の値)
で算出可能
●全体の時間
/proc/stat内のCPU情報
cpu 3357 0 4313 1362393
(左から順に,ユーザーモード,低い優先度 (nice) でのユーザーモード,システムモード,タスク待ち(idle task))
を全て足し合わせた時間
*どちらの値も,積算されているものなので,同じ間隔をとって差をとる必要があります
/procの内容に関する詳細は,%man procで見られます.
この/proc以下の情報はクロック割り込みごとに値を更新します.
が,ユーザ空間から見るためには,ファイル形式になっているため,ファイルのopen,read,closeをしなければならず,多少の時間が必要です.
よって,1msや10ms間隔で見ることは無理そうです.
間隔がある程度大きくても大丈夫な場合は,調べたいプロセスに関する情報のみを追うことができる便利なツール,sysstatもあります.
詳細は次の記事へ.
全体を眺めるならばtopを利用.
ちなみにtopの更新はデフォルト5sだそうです.
オプションをつけることで更新間隔を変更することも可能です.
2008年12月10日水曜日
strcatには要注意
strcat(str1,str2)
によって文字列str1とstr2を連結することが可能です.
…が.
これは,str1にstr2をつないでいるので,str1の大きさを十分にとっておかないと,他の領域まで侵入してくちゃくちゃにしてしまうことがあります.
要注意.
参考ページ:
Manpage of STRCAT
によって文字列str1とstr2を連結することが可能です.
…が.
これは,str1にstr2をつないでいるので,str1の大きさを十分にとっておかないと,他の領域まで侵入してくちゃくちゃにしてしまうことがあります.
要注意.
参考ページ:
Manpage of STRCAT
2008年12月8日月曜日
subversion
みんなに教えてもらって,バージョン管理をすることにしました.
それとともに,今までの実験のやり方を見直し.
まず,実験マシンは書いたソースをコピーして動かすだけに.
(やりやすい様にscpを入れたシェルスクリプト作っちゃう)
NAS上でバージョン管理を.
eclipse上だと管理が楽なプラグイン(subclipse)があるとのことなので,
ついでにeclipseも最新版(ganymede)にインストール.
以下,Subclipseプラグインを参照
それとともに,今までの実験のやり方を見直し.
まず,実験マシンは書いたソースをコピーして動かすだけに.
(やりやすい様にscpを入れたシェルスクリプト作っちゃう)
NAS上でバージョン管理を.
eclipse上だと管理が楽なプラグイン(subclipse)があるとのことなので,
ついでにeclipseも最新版(ganymede)にインストール.
以下,Subclipseプラグインを参照
2008年12月5日金曜日
エイリアスの設定
つい先日,ディレクトリの中身を"rm *"で全消ししてしまいました涙
今までプログラムを書き直していたってゆう無駄…
これからはちゃんとバックアップをとろう!!と思いました.
あと,先輩のススメで,エイリアス作りました.
homeディレクトリ下の.bash_profileに,alias clr='rm *~'の記述を追加.
これでこれからは,rm *~なんて危ないコマンドを使わず,"clr"でゴミを消せることになりました!笑
参考ページ:
Linux全般編 シェルの基本操作法(後編1:エイリアスやヒストリの使い方)
Linux全般編 シェルの基本操作法(後編4:シェルの設定ファイル)
今までプログラムを書き直していたってゆう無駄…
これからはちゃんとバックアップをとろう!!と思いました.
あと,先輩のススメで,エイリアス作りました.
homeディレクトリ下の.bash_profileに,alias clr='rm *~'の記述を追加.
これでこれからは,rm *~なんて危ないコマンドを使わず,"clr"でゴミを消せることになりました!笑
参考ページ:
Linux全般編 シェルの基本操作法(後編1:エイリアスやヒストリの使い方)
Linux全般編 シェルの基本操作法(後編4:シェルの設定ファイル)
2008年12月2日火曜日
/proc ってすごい!!
システムのCPU使用率や,メモリ使用量などの情報が全て入っています.
例)
/proc/meminfo :メモリ搭載量・空きメモリ量などが記載
/proc/cpuinfo :CPUの情報が記載
また,/procディレクトリ以下には,それぞれのプロセスの情報も格納されています.
プロセスIDごとにディレクトリがあり,その中に格納されています
例)
/proc/pid/map :そのプログラムがどのアドレスを何に使っているか
/proc/pid/status :そのプロセスの名前や状態などの情報
全て情報がここを見ればわかっちゃうわけですねー!
すごい.
今得たいのは,それぞれのプロセスの情報なので,
/proc/pid/statを見ればOKなようです.
参考ページ:
/procによるLinuxチューニング
Manpage of PROC
例)
/proc/meminfo :メモリ搭載量・空きメモリ量などが記載
/proc/cpuinfo :CPUの情報が記載
また,/procディレクトリ以下には,それぞれのプロセスの情報も格納されています.
プロセスIDごとにディレクトリがあり,その中に格納されています
例)
/proc/pid/map :そのプログラムがどのアドレスを何に使っているか
/proc/pid/status :そのプロセスの名前や状態などの情報
全て情報がここを見ればわかっちゃうわけですねー!
すごい.
今得たいのは,それぞれのプロセスの情報なので,
/proc/pid/statを見ればOKなようです.
参考ページ:
/procによるLinuxチューニング
Manpage of PROC
登録:
投稿 (Atom)