トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-アプリケーションのコアダンプを取る

技術的雑談-アプリケーションのコアダンプを取る


 環境

Linux Fedoracore3で確認

 目的

指定したプロセス(アプリケーション)のdump(core)をshell scriptなどから取得する

 方法

UNIXで実行中のプロセス(≒プログラム)のメモリーダンプをデバッグなどの用途で取りたい場合、UNIX標準の以下のコマンドを使えば取得できます。

gcore -s -c [ダンプの保存先ファイル名] [pid]
 [ダンプの保存先ファイル名] -- メモリー状態のファイルをどこに出力するか 
 [pid] -- メモリダンプを取りたいプロセスのプロセスID

尚、-sは「プロセスを一時停止し、コアダンプ取得後に再開する」というオプションです。

プロセスID(pid)は

  1. 「ps」コマンドで探す
  2. /proc/〜 以下を探す
  3. /var/run/〜 以下を探す

の方法で取得できます。 (多分psコマンドで探すのが人間の一般、プログラムが特定できている場合は/var/run以下で探すのがshell scriptでの一般)

ちなみに、psコマンドを叩くと、そのユーザ権限で起動しているプロセスの一覧が表示されます。

[ahouser@localhost ~]$ ps
  PID TTY          TIME CMD
10204 pts/1    00:00:00 bash
10245 pts/1    00:00:00 ps
[ahouser@localhost ~]$

また、「ps ax」とやると、そのマシン全体のプロセス一覧が取れます。

同じく、/var/runの様子の例は

[ahouser@localhost run]$ ls -l
合計 100
-rw-r--r--    1 root     root            5  5月 13 10:09 apmd.pid
-rw-r--r--    1 root     root            5  5月 13 10:12 atd.pid
drwxr-xr-x    2 root     root         4096  5月 13 10:13 console
-rw-------    1 root     nwops           9  5月 13 10:13 console.lock
-rw-r--r--    1 root     root            5  5月 13 10:12 crond.pid
drwxr-xr-x    2 root     root         4096  5月 13 10:12 dbus
-rw-r--r--    1 root     root            5  5月 13 10:12 gdm.pid
-rw-r--r--    1 root     root            5  5月 13 10:12 gpm.pid
-rw-------    1 root     root            5  5月 13 10:08 klogd.pid
-rw-r--r--    1 root     root            5  5月 13 10:12 messagebus.pid
drwxrwx---    2 named    named        4096 10月 18  2003 named
drwxrwxr-x    2 root     root         4096 10月 29  2003 netreport
-rw-r--r--    1 root     root            4  5月 13 10:09 ntpd.pid
-rw-r--r--    1 rpcuser  rpcuser         5  5月 13 10:09 rpc.statd.pid
drwxr-xr-x    2 root     root         4096 10月 24  2003 saslauthd
-rw-------    1 root     smmsp          33  5月 13 10:11 sendmail.pid
-rw-r--r--    1 smmsp    smmsp          50  5月 13 10:12 sm-client.pid
-rw-r--r--    1 root     root            5  5月 13 10:09 sshd.pid
drwx------    5 root     root         4096  3月 23 15:47 sudo
-rw-------    1 root     root            5  5月 13 10:08 syslogd.pid
-rw-rw-r--    1 root     utmp        11136  5月 15 17:25 utmp
-rw-r--r--    1 root     root            6  5月 13 10:12 xfs.pid
-rw-r--r--    1 root     root            5  5月 13 10:09 xinetd.pid
[ahouser@localhost run]$

です。 UNIXの礼儀正しいプログラミングスタイルで書かれたプログラム(主に、マシンで1つだけ起動されていることが望まれるデーモンなど)は/var/runに「自分の名前.pid」というテキストファイルに自分のプロセスIDを書き込んで起動します。

/proc/以下で探す方法は良くわかりませんが、cd /procしてlsで見ると、プロセスIDでディレクトリが掘れています。その下に「cmdline」というファイルがあるので、その中身がそのプロセスのプログラム名っぽいです。
(まあ、あんまり使わないと思われますので省略)


 履歴

2005/7/14 -- 初版

技術的雑談へ戻る

 突っ込み

name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2D%A5%A2%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%CE%A5%B3%A5%A2%A5%C0%A5%F3%A5%D7%A4%F2%BC%E8%A4%EB

技術的雑談へ戻る

最終更新日時:最終更新時間:2005年07月14日 14時18分12秒
トップページに戻る