タグ

ブックマーク / yohei-a.hatenablog.jp (19)

  • プロセスがファイルに読み書きしてる内容を覗き見する - ablog

    確認方法 ファイルディスクリプタ番号を確認して ls -l /proc/<PID>/fd tail で見てみる tail -f /proc/<PID>/fd/21 実行例 $ while :; do date; sleep 5; done > foo.log & [1] 23801 $ ps -elf|egrep [2]3801 1 S oracle 23801 22232 0 76 0 - 16525 wait 11:03 pts/2 00:00:00 -bash 0 S oracle 23813 23801 0 76 0 - 14732 - 11:03 pts/2 00:00:00 sleep 5 $ ls -l /proc/23801/fd total 0 lrwx------ 1 oracle oinstall 64 Mar 20 11:03 0 -> /dev/pts/2 l-w

    プロセスがファイルに読み書きしてる内容を覗き見する - ablog
  • nfsiostat で NFS の I/O レイテンシや IOPS を調べる - ablog

    NFS で iostat の await と svctm のような情報を取れるツールが欲しいと思っていたら nfsiostat という素敵なツールを見つけた。await にあたるのが avg exe (ms)、svctm にあたるのが avg RTT (ms) だと思う。 iostat の await と svctm の意味は Linux の iostat の出力結果を銀行のATMに例えて説明してみる - ablog 参照。 書式 $ nfsstat <interval> 実行例 ops/s: 秒間の read または write リクエストの発行回数 kB/s: 1秒間に read または write されたサイズ(KB) kB/op: 1回の read または write の秒間の平均サイズ(KB) avg RTT (ms): カーネルが RPC リクエストを発行してから応答までの時間

    nfsiostat で NFS の I/O レイテンシや IOPS を調べる - ablog
  • よく使う strace のオプション - ablog

    Linuxstrace を使ってシステムコールのトレースを調べる時によく使うオプションをメモ。 特にお気に入りのオプションは -T、-c、-ff & -o です。 書式 システムコールを詳細に追う tt: 行頭にタイムスタンプを出力(マイクロ秒) T: 行末にシステムコール内での所要時間を出力(マイクロ秒) ff: 子プロセスのシステムコールもトレースし、-o との併用でプロセス(スレッド)毎に別ファイルに出力 o: 指定したファイル名に出力。-ff と併用すると、ファイル名. に出力 s: 出力文字数を指定。デフォルト32文字。read/write システムコールなどで読み書きした内容を全て確認したい場合は、大きくする。 p: プロセスIDを指定。 $ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> -p <PID> もしくは $ strace

    よく使う strace のオプション - ablog
  • pcstat でファイルのページキャッシュへの乗り具合を調べる - ablog

    ダウンロード $ cd /usr/local/bin $ curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64 $ chmod 755 pcstat 使ってみる $ dd if=/dev/urandom of=testfile bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 1.09541 s, 9.6 MB/s $ pcstat testfile |----------+----------------+------------+-----------+---------| | Name | Size | Pages | Cached | Percent | |----

    pcstat でファイルのページキャッシュへの乗り具合を調べる - ablog
  • Linux の iostat の出力結果を銀行のATMに例えて説明してみる - ablog

    vmstat の"r"列とマクドナルドのレジカウンター - ablog の iostat 版です。 以前、iostat の見方 - ablog というエントリを書きましたが、 絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection) 作者: 小田圭二出版社/メーカー: 翔泳社発売日: 2008/04/22メディア: 単行(ソフトカバー)購入: 22人 クリック: 303回この商品を含むブログ (36件) を見るP.176 LIST 1 Linuxのiostat -x 30の出力結果を分析 を元に説明してみます。 $ iostat -x 30 avg-cpu: %user %nice %sys %iowait %idle 15.46 0.23 3.70 45.05 35.55 Device: rrqm/s wrqm/s r/

    Linux の iostat の出力結果を銀行のATMに例えて説明してみる - ablog
  • iostat の見方 - ablog

    出力例 $ iostat -x 30 avg-cpu: %user %nice %system %iowait %steal %idle 0.87 0.01 2.53 0.49 0.00 96.11 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 sda1 0.00 0.00 0.00 0.00 0.00 0.00 15.53 0.00 12.81 11.47 0.00 sda2 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 avg-cpu: %user %nice %syst

    iostat の見方 - ablog
  • 実行中のマルチスレッドプログラムの特定スレッドのみ停止(SIGSTOP的な)させる方法 - ablog

    @yoheia gdb -p LWP で特定のスレッドだけ止められますよ。— Tsukasa Hamano (@hamano) 2016年3月29日 @hamano "gdb -p LWP" でサクッとできました!ありがとうございます。 $ ps -u grid -lLf|grep css $ gdb -p 3449 -> LWP:3449 のステータスが t になりました— yohei-a (@yoheia) 2016年3月29日 @yoheia gdb -iex="set non-stop on" -iex="set target-async on" -p プロセス して cont -a してから特定プロセスを interrupt してもいいですね。こちらのほうが自由にスレッド間を行き来できていいかも。— Tsukasa Hamano (@hamano) 2016年3月29日

    実行中のマルチスレッドプログラムの特定スレッドのみ停止(SIGSTOP的な)させる方法 - ablog
  • SQLチューニング原論(仮) - ablog

    もわっとしたイメージ重視のテキトーメモ。正確性、網羅性は重視していない。 チューニングの三原則 仕事量(計算量)を減らす 仕事量は CPUコスト + I/Oコスト とも言える 行単位でデータが必要な場合は行指向、列方向でデータが必要な場合は列指向など 圧縮でI/Oコストを減らす 並列化する アムダールの法則を考慮した上で、効果が望める場合は並列化する SIMD(SQLではなくハードウェアレイヤーでの並列化) 仕事を速くする 処理自体を速くする ディスク→SSD→メモリ→L1-3キャッシュ→レジスタ Software on Silicon とか 式で表すとこうなります。 仕事量(計算量)を減らすのが一番大切 データ(オブジェクト)構造が最も大切 表、索引、パーティショニングなど - SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus) P.292 「賢い

    SQLチューニング原論(仮) - ablog
  • 2種類の非同期I/O - ablog

    非同期I/Oの「非同期」の意味が2つあって、紛らわしくなった背景を書いてみた*1。 Unix では (non)synchronizedと(a)synchronous という用語が使われているが、英語(自然言語)だと紛らわしい*2 (a)synchronous はI/O処理を待つかどうか、(non)synchronized はディスクに書き終わってから折り返すかどうかを意味する 例えば書込みの場合、 synchronized: ディスクに書き終わってから折り返す "non"synchronized: ディスクに書き終わってなくても折り返す synchronous: OSカーネルのバッファに書き終わってから折り返す "a"synchronous: I/Oリクエストを投げたらユーザー空間にデータが残っても折り返す 「非同期I/O」は "a"synchronous I/O の日語訳なので、I/O

    2種類の非同期I/O - ablog
  • LINUXシステムプログラミング - ablog

    スーツをクリーニングに出したついでに、屋に寄ったら Linuxシステムプログラミング 作者: Robert Love,ロバートラブ,千住治郎出版社/メーカー: オライリージャパン発売日: 2008/04/16メディア: 大型購入: 5人 クリック: 181回この商品を含むブログ (31件) を見るが素晴らしすぎて、衝動買いしてしまいました。 ファイルI/O、I/Oスケジューラなど、最近、興味のある分野について詳しく書かれていました。 こので扱っている内容は主に以下の通りです。 Linux・システムプログラミング・カーネル・Cライブラリ・Cコンパイラの概要 ファイルI/O ファイル・ディレクトリ管理 プロセス管理 メモリ管理 シグナル 時間 RDBMSに密接に関連のあることばかりです。論理的で、題を理解するために必要な前提知識についても親切に説明されています。著者の Robert L

    LINUXシステムプログラミング - ablog
  • NFS のマウントオプションの hard と soft について調べたメモ - ablog

    NFS のマウントオプションの hard、soft について調べたメモ(Linux限定)。 まとめ hard の動作 NFS サーバが応答するまで書込を永遠に繰返す。 アプリケーションはI/Oを発行した後、完了待ちでスリープし続ける。 hard と intr を併用するとシグナルを送ってI/Oを停止することができる*1。 kill -s SIGINT or SIGQUIT or SIGHUP <PID> soft の動作 retrans で指定された回数書込に失敗すると、I/Oを発行したアプリケーションにエラーを返す。 どちらが良いか 整合性が求められるデータを読み書きに使う場合は hard にすべき。 不完全な書込*2や読込*3が発生する可能性があるため。 実行可能ファイルを置く場合も hard にすべき。 実行可能ファイルのデータをメモリに読込中やページアウトされたページを再読込中に、

    NFS のマウントオプションの hard と soft について調べたメモ - ablog
  • Linux のページテーブルのサイズの見方と見積式 - ablog

    Linux Kernel 2.6 (x86-64) でのページテーブルのサイズの確認方法と見積式を調べてみた。 あっているか自信のないところもある&まだ書きかけ。 ページテーブルのサイズの見方 OS全体のページテーブルのサイズ $ cat /proc/meminfo MemTotal: 16158544 kB MemFree: 13134056 kB (中略) PageTables: 34428 kB ★ 34MB プロセス毎のページテーブルのサイズ $ cat /proc/10225/status # 10255 は PID Name: zsh State: S (sleeping) Tgid: 10225 Pid: 10225 PPid: 10222 (中略) VmPTE: 124 kB ★ 124KB ページテーブルのサイズの見積式 見積式 (プロセスが使用している物理メモリサイズ

    Linux のページテーブルのサイズの見方と見積式 - ablog
  • pgrep で子プロセスの PID を調べる - ablog

    子プロセスの PID を取得したい場合、人間が見るには pstree が便利だけど、 $ pstree -alp $$ zsh,13840 ├─pstree,14216 -alp 13840 ├─zsh,13940 │ └─sleep,14213 10 └─zsh,13992 └─sleep,14215 10 シェルスクリプトで子プロセスの PID を取得して何か自動処理したいときには pgrep が便利そう。 P: 親プロセスの PID を指定 d: デリミタを指定 $ pgrep -d: -P $$ 13940:13992 参考 子プロセスのプロセスIDを取得するコマンド - アウトプットができる技術者に

    pgrep で子プロセスの PID を調べる - ablog
  • Perlワンライナー集 - ablog

    障害対応でのログ解析、ソースコードの調査といったテキスト処理で使った Perl ワンライナー集です。 マルチライナーやいけてないのもありますw Perl ワンライナーの好きなところ PerlOracle Database (10g以降) に同梱されているので、Windows プラットフォームでも使える*1。 awk、sed、grep の正規表現の書き方などをそれぞれ覚えれない。awk、sed、grep でできることはだいたい Perl でできるので、Perl に絞ると覚えることを減らせる*2。 最小限の労力で最大限の仕事ができる。ちょっとしたプログラムを書くような処理でも Perl ワンライナーを使うとたった1行で済むことがあります*3。 Perlワンライナー集 一部、Perl 以外に bash、find、xargs なども含んでいます。 レコードセパレータを変更する perl -w

    Perlワンライナー集 - ablog
  • /proc/meminfo の Inactive は利用可能なメモリ領域ではない - ablog

    ちょくちょく、/proc/meminfo の Active が使用中、Inactive は使用可能な領域ですよねと聞かれることがあり、違いますよと話すことがあるので、出典をメモっておく。 がちゃぴん先生のブログ Activeはページキャッシュや無名ページ(注3)のうち、最近利用したり、まだストレージとの同期が取れていない「捨てられない」ページです。Inactiveは、同じくページキャッシュや無名ページのうち、最後にアクセスされてからある程度時間がたち、ストレージとの同期も完了していて、すぐに捨てられるページです。よって、/proc/meminfoの出力でいうところの MemFreeとInactiveを足すことで確実に利用可能なメモリ量を算出することができます。 (実際に利用可能なメモリ量)≒(MemFree+Inactive) この値を利用し、一定量を下回らないようにするのが、簡単・確実な

    /proc/meminfo の Inactive は利用可能なメモリ領域ではない - ablog
  • 「性能測定道」 by 東大喜連川研究室の早水さん が素晴らしすぎる - ablog

    東大喜連川研究室の早水さんが日PostgreSQLユーザ会で話された「性能測定道」がとても勉強になった。 スライドとYouTube動画が公開されています。YouTube にはスライドには書かれていない話しも出てきて、説明も非常にわかりやすいです。こういうアカデミックで最先端の研究をされている方が情報発信されるのはとてもうれしい。 id:hayamiz さんのことは何年も前から認識していたが、喜連川研究室でデータベースの研究をされているというのは初めて知りました。 TOP | Yuto Hayamizu's web site も要チェックです。 性能測定道 事始め編 性能測定道 事始め編 from Yuto Hayamizu 性能測定道 実践編 性能測定道 実践編 from Yuto Hayamizu 「性能測定道 事始め編」で紹介されていたを買ってみましたが、なかなか歯ごたえのありそう

    「性能測定道」 by 東大喜連川研究室の早水さん が素晴らしすぎる - ablog
  • Linux で huge page を使っているプロセスを調べる方法 - ablog

    調べ方 /proc/[pid]/smaps で KernelPageSize がデフォルトの 4kB 以外のプロセスを探す。 調べ方の例 /proc/[pid]/smaps で KernelPageSize が 4 kB 以外のプロセスを探す。 [root@yazekats-linux ~]# perl -lane '/KernelPageSize/ and $F[1]!=4 and print qq/$ARGV\t$_/' /proc/*/smaps /proc/3834/smaps KernelPageSize: 2048 kB PID:3834 のプロセス名を調べる。 [root@yazekats-linux ~]# ps -fp 3834 UID PID PPID C STIME TTY TIME CMD root 3834 3832 0 13:44 pts/0 00:00:01

    Linux で huge page を使っているプロセスを調べる方法 - ablog
    fumikony
    fumikony 2014/08/16
    一瞬hogeに見えた
  • shUnit2 を使ってシェルスクリプトのユニットテストをやってみた - ablog

    シェルスクリプトのユニットテストフレームワーク "shUnit2" を使ってみた - ablog のつづき。 実際に自分で作った bash スクリプトのユニットテストを実行してみた。 最初のディレクトリ構成はこんなの。 $ su - oracle $ cd /home/oracle/scripts $ tree -pfug . |-- [-rwxr-xr-x oracle oinstall] ./stop_listener.sh <-- テストしたいスクリプト `-- [drwxr-xr-x oracle oinstall] ./test 1 directory, 1 file stop_listener.sh のソースコードはこんなの。 #!/bin/bash if [ "$1" != 'exec' ]; then echo "usage: ${BASE_NAME} exec" exit

    shUnit2 を使ってシェルスクリプトのユニットテストをやってみた - ablog
  • シェルスクリプトのユニットテストフレームワーク "shUnit2" を使ってみた - ablog

    ないだろうと思いながらぐぐってみたら、 shUnit2 is a xUnit unit test framework for Bourne based shell scripts, and it is designed to work in a similar manner to JUnit, PyUnit, etc. If you have ever had the desire to write a unit test for a shell script, shUnit2 can do the job. Google Code Archive - Long-term storage for Google Code Project Hosting. あるじゃないか! とりあえず、動かしてみよ。 shunit2 をダウンロードして解凍して、 $ mkdir -p ~/Documents/

    シェルスクリプトのユニットテストフレームワーク "shUnit2" を使ってみた - ablog
  • 1