ablog

不器用で落着きのない技術者のメモ

プロセス の検索結果:

oraagent.bin が UDP で通信している

…でUDPで通信してるプロセスがいると言われて、ちょっと netstat 見てたら、oraagent.bin が UDP で通信しているのを見つけた。 $ netstat -nauep Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name (中略) udp 0 0 ::1:32154 :::* 1101 441244 8265/oraagent.bin どうでもいい…

Linux で huge page を使っているプロセスを調べる方法

…トの 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 のプロセス…

オペレーティングシステムとは? なぜオペレーティングシステムを学ぶのか?

OS

… ンティング(実行中プロセスの状態を退避する)ために,OSの仮想記憶が使わ れます.OSを学ぶと,素人(失礼!)にとっては「摩訶不思議な」機能の実装 方法を理解することが出来ます. セキュリティは,オペレーティングシステムのにならず様々なソフトウェ ア(時にはハードウェア)の連携により実現されるものですが,どのような役 割分担がされていることを知ることは,将来新たな提案をするための第一歩と いえるでしょう. 並列・分散計算は,ネットワーキングやセキュリティなどの技術を組み合 …

「テキトーーク!!(TechyTalk) Vol.2 低レイヤー芸人」で話したこと

…ダウン方法 コア別、プロセス別、スレッド別、カーネル(sys,irq,soft...) or ユーザー(usr,nice...)、システムコール別、ライブラリ関数別、ユーザー関数別、 いろいろコマンドはあるが、実体はカーネルの構造体から取得している。 Oracle Database で言うと、V$→X$→共有メモリの構造体を見ているのと同じ サマリ iowait の割合が高い場合、CPU は忙しいのか暇なのか? dstat、htop、perf、crash などのコマンドの紹介…

libaio の aio コンテキスト数を調べる

…ブラリ関数がカレントプロセスの子スレッドを作る。 その子スレッドが同期な read()、write() システムコールを呼出す。 子スレッドが発行した同期I/O操作を待たずに aio_read(), aio_write() ライブラリ関数は終了する。 カーネルレベルで実現する非同期I/Oに比べて遅い。 libaio カーネルレベルの非同期I/O。 io_setup、io_submit、io_getevents、io_cancel、io_destroy システムコールを提供する…

ファイルシステムとは

OS

…を指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。 より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。 ファイルシステム - Wikipedia モダン オペ…

sysのCPU使用率が高い場合にその内訳を調べる方法

…perf は 特定のプロセスだけでなくOS全体の統計を見れる カーネル(sys)とユーザー(user)の両方を見れる ところが非常に便利だと思う*2。 準備 ひたすら write システムコールを発行し続けるプログラムを作成する $ cat write_loop.c #include <unistd.h> int main(void) { while(1) { write(1, "foo\n", 4); } } コンパイルする $ gcc write_loop.c -o wr…

libaioでの非同期I/O発行時にプロセスはブロックされるか

fio を実行して、 [yoheia@www****** ~]$ fio -rw=randwrite -bs=4k -size=100m -directory=/tmp -direct=1 -numjobs=2 -name=file1 -ioengine=libaio file1: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 file1: (g=0): rw=randwrite, …

実行中のプロセスのシェル制限を確認する

/proc//limits ってのを見つけた [yoheia@www****** ~]$ echo $$ 7292 [yoheia@www****** ~]$ cat /proc/7292/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited…

インターフェースを down するときのシステムコールを調べてみた

…を使って通信しているプロセスのソケットがクローズされると思ったが、/proc/PID/fd を観察してみたところ、down してもクローズされずにそのままだった。 [root@localhost ~]# ls -l /proc/3419/fd total 0 lr-x------ 1 oracle oracle 64 Apr 20 23:50 0 -> /dev/null l-wx------ 1 oracle oracle 64 Apr 20 23:50 1 -> /dev…

Oracle Database のサーバー・プロセスが通信する際にどのようなソケットオプションを使っているか調べる

…レースする リスナープロセスの PID を調べる。 [root@localhost ~]# ps -ef|grep [t]ns oracle 3249 1 0 19:35 ? 00:00:00 /home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/tnslsnr LISTENER -inherit strace でリスナープロセスと fork されるプロセスのシステムコールをトレースする。 [root@localhost ~]…

Oracle Netトレース・ファイルを出力する

…接続する。 サーバープロセスの PID を確認する。 $ ps auxw|grep [o]racleorcl oracle 3204 0.1 6.6 621024 60600 ? Ss 07:56 0:01 oracleorcl (LOCAL=NO) トレース・ファイルのパスを確認する。 $ ls -l /proc/3204/fd total 0 lr-x------ 1 oracle oracle 64 Apr 20 08:08 0 -> /dev/null l-wx---…

パイプライン表関数

…テージングなしで次のプロセスに直接送ることができます。テーブル・ファンクションから戻されたコレクションに含まれる行を、パイプライン化することもできます。つまり、テーブル・ファンクションの入力の処理がすべて完了した後にバッチで戻すかわりに、生成されるたびに反復的に戻すことができます。 (中略) スタンドアロン・ファンクションでは、CREATE FUNCTION文にPIPELINEDオプションを指定します(構文は、「CREATE FUNCTION文」を参照してください)。パッケー…

Linux でランキュー待ち時間がCPU時間にカウントされないことを確認した

…たときにその瞬間どのプロセスがCPUを使っていたかチェックしてそのプロセスにだけCPU時間を加算してそうな気がします。 run キューで待たされた時間は CPU Time にはカウントされない - ablog と書いたが検証してみた。想定通り、ランキュー待ち時間はCPU時間に含まれなかった。 1プロセスだけ実行する。 $ time perl -e 'for(1..10000){for(1..10000){}}' real 0m5.301s user 0m3.971s sys …

/proc/[pid]/stat の各フィールドの意味

…pid]/stat プロセスの状態についての情報。 これは ps(1) で使われ、 /usr/src/linux/fs/proc/array.c で定義されている。 Man page of PROC とのことなので、Linux Kernel 2.6.18 の fs/proc/array.c を見てみると以下の通り定義されていた。 res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \ %lu %lu %lu %lu …

Oracle Database や OS の性能統計情報と財務諸表の共通点

…、CPU使用率などがプロセス起動時から現在の平均になるのも納得がいくのではないでしょうか。累計値を取得して差分や平均を算出しているという点では、top、iostat なども同じと思われます。 少し脱線すると、Linux で strace コマンドでこれらのコマンドが発行しているシステムコールを調べるとプロセスファイルシステム(/proc)にアクセスしていることがわかります。プロセスファイルシステムにはディレクトリやファイルとしてアクセスできますが、実体はカーネル空間にある性能…

LINUXカーネルHACKS

…runq コマンドはプロセススケジューラのランキューに繋がっているプロセス(実行中プロセス)を表示します。 runq コマンドだけ試してみた。 crash> runq CPU 0 RUNQUEUE: c170e780 CURRENT: PID: 13000 TASK: e8c48aa0 COMMAND: "crash" ACTIVE PRIO_ARRAY: c170ec3c [115] PID: 13000 TASK: e8c48aa0 COMMAND: "crash" PI…

Oracle Database の CPU time には割込みで使われた時間は含まれなさそう

… 3164 サーバープロセスに strace をしかける [root@localhost ~]# /usr/bin/strace -p 3164 -o strace.log Process 3164 attached - interrupt to quit SQL を実行し、SQL*Plus を終了する SQL> select count(*) from agent; COUNT(*) ---------- 10000000 SQL> exit サーバープロセスが終了して、s…

run キューで待たされた時間は CPU Time にはカウントされない

…されているか区別されていないと思うので、run キュー待ちが長くなると CPU Time が長くなる気がする。OSの実装を意識して考えないといけないですね。と思ったが、定期的に割込みが入り、コア単位でチェックしたときにその瞬間どのプロセスがCPUを使っていたかチェックしてそのプロセスにだけCPU時間を加算してそうな気がします。 追記(2014.02.17): Linux でランキュー待ち時間がCPU時間にカウントされないことを確認した - ablog に検証結果を書いてます。

strace と ptrace システムコール

… Linux には、プロセスの動作を観察できるシステムコール、ptrace が備わっています。ptraceを簡単に利用できるコマンドとしてstraceがある 詳解 Linuxカーネル 第3版作者: Daniel P. Bovet,Marco Cesati,高橋浩和,杉田由美子,清水正明,高杉昌督,平松雅巳,安井隆宏出版社/メーカー: オライリー・ジャパン発売日: 2007/02/26メディア: 大型本購入: 9人 クリック: 269回この商品を含むブログ (73件) を見るP…

性能問題の切り分け方法について考えてみる

…+ I/O待ち*3のプロセス数*4の平均値。左から1分間、5分間、15分間の平均値。この数をCPUコア数で割って2以上だと待ちが発生している*5。例えると、load average はマック*6のレジに並んでいるお客さんの行列の人数。例えば、合計でお客さん3人並んでいても、レジが3台あれば待ちは発生していないので無問題。ちなみにこの環境は2コアなので、load average の直近1分間の平均が 3.78 は結構重い状態。2コアとも常に処理を実行中で1プロセスが待ちの状態が…

システムコールの先を追え

…ログインしてサーバープロセスの PID を確認して、 [oracle@localhost ~]$ sqlplus neo/zion SQL> select s.sid, s.serial#, p.spid from v$session s, v$process p where p.addr = s.paddr and s.sid = sys_context('USERENV','SID'); SID SERIAL# SPID ---------- ---------- ---…

SystemTap で特定のプロセスが発行したシステムコールを表示する

…る モニタリングするプロセスを起動する $ ping localhost モニタリングしたいプロセスのPIDを調べる。 $ ps -elf|grep [p]ing 4 S oracle 3198 3169 0 75 0 - 493 416062 00:44 pts/0 00:00:00 ping localhost SystemTap を使ってモニタリングしてみる。 # stap ./targeted.stp -x 3198 Syscall: gettimeofday Sys…

ハイパー・スレッディングとは

CPU

…ドは「ライトウェイトプロセス」(Light Weight Process)とも呼ばれ、親のメモリ空間を共用して動くのですが、マルチスレッドプロセッサはとくにこのような制約がなく、独立したメモリ空間を必要とするプログラムでも実行できるという構成が一般的です。 P.240 マルチスレッドの二つの方式 VMT(垂直マルチスレッド) - 複数のスレッドを切り替えて実行する ... この方式は完全に同時並行的に複数のプログラムを実行しているわけではないのですが、マルチプログラミングの場…

Solaris の ps コマンドで表示されるプロセス状態の"O"は何の略か

…コマンドで表示されるプロセスの状態の"O"は何の略かって聞かれたので調べてみた。 -bash-3.00$ cat /etc/release Solaris 10 11/06 s10s_u3wos_10 SPARC Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 14 November 2006 -bash-3.00$ ps…

「絵で見てわかるITインフラの仕組み」という本を書きました

…ューリング(いわゆるプロセススケジューラ)、仮想記憶、ファイルシステムなど実装は違いますが、過去から脈々と技術は受け継がれているのではないかと思います*1。で、それを知っていて何の役に立つかと言うと、本質を理解していると応用が利きます。例えば、あまり詳しくない商用UNIXでのI/O関連のトラブルシューティングをすることになった場合に、一般的にOSはこういうアーキテクチャになっているから、こことここのポイントで性能情報を取って、こうなっていれば、こうだなとかイメージができたりし…

Oracle Database for Windows の実行可能ファイルやサービスの名前

…ンポーネントは、自動的に起動されない場合があります。 Oracle Databaseの開始 [コントロールパネル]-[管理ツール]-[サービス]で確認できます。 表4-1 Windowsファイアウォール例外が必要なOracle実行可能ファイル ファイル名 実行プログラム名 oracle.exe Oracle Database tnslsnr.exe Oracle TNSリスナー Windowsでのインストール後の構成タスク タスクマネージャーの[プロセス]タブで確認できます。

UNIX System V IPC 共有メモリはページアウトされる

…stem V では、プロセス間通信(IPC)機構の一部として共有メモリ機構が提供されている(第6.3.4項参照)。 (中略) ただし、匿名オブジェクトは、それを構成するページに対してバッキング・ストアを提供していない。このため各ページは初回変更時に匿名ページに変更され、スワップ・デバイスにバックアップされるようになる。 Oracle8i&UNIXパフォーマンスチューニング―Oracle8i+UNIXのための最適化技法 (Database developer’s guide)作…

C10K問題とは

…超える接続に対応するプロセスやスレッドを生成するとメモリ上にプロセスやスレッドの管理領域が確保され、使われるメモリサイズもばかにならない。プロセスとスレッドでは差があり、1接続あたり1プロセス生成するほうがメモリやファイルディスクリプタなど使うリソースが大きくなるはず。 プロセス数、スレッド数、ファイルディスクリプタ数などの上限に達してしまうという問題もある。このあたりは実装依存だったり設定を変えれば増やせたりすると思う。数を設定で増やせても、大きくなると探索が遅くなったりし…

環境変数 TWO_TASK

…トとサーバーが一つのプロセスで動く SINGLE TASK というものがあったらしい。それと対比して、専用サーバー接続はクライアントとサーバーが別プロセスで動くため TWO TASK と呼んだようだ。 参考 環境変数 (NLS_LANG、ORACLE_HOME、etc) - オラクル・Oracleをマスターするための基本と仕組み Oracle Database Net Services管理者ガイド 11gリリース2(11.2) B56288-02 2 データベースの識別とアク…