web-dev-qa-db-ja.com

Linuxで実行中のプロセスのダンプファイルを作成する方法はありますか

Linuxで制御不能になっているプロセスがあります。開発マシンに取得できるダンプファイルを作成し、そこで調べたいと思います。

Windowsでは、[プロセス]タブに移動して[ダンプファイルの作成]を右クリックすることで、ADVPlusやWindowsタスクマネージャーなど、いくつかの異なる方法で実行中のプログラムの「ミニダンプ」を作成できます。

Linuxでこれを達成する方法はありますか?

コールスタック、ヒープ、スタックメモリ(特にスタック)、例外、その他すべてが必要です。

10
John Dibling

ダンプファイルを作成する方法は次のとおりです。

   gcore - Generate a core file for a running process

構文gcore [-oファイル名] pid

13
HackerBaloo
pmap <PID>

または

strace -f -o xxx -p <PID> 

あなたが探しているツールかもしれません。

pmapは、提供されたプロセスのメモリ使用量に関する概要を示します。 straceは、プロセスが実行するすべてのアクションを追跡します。 -fを使用すると、straceに子プロセスの監視も考慮するように指示し、-o xxxを指定すると、straceに出力をファイルに書き込むよう指示します。 straceを使用して新しいプロセスを開始することもできます。と

strace cat /etc/passwd

開かれたファイルなど、特定の情報のみに関心がある場合は、それに応じてstraceを起動できます。

strace -f -o xxx -e trace=open -p <PID>
7
Valentin

これを試して:

cat /proc/<pid>/smaps > mem.txt

これ リンクも役立つかもしれません。

4

一方、 Sysinternals Suite のProcDumpも、非常に自由なMIT それぞれのGitHubページ)からのライセンス の下で利用できるようになりました。

Usage: procdump [OPTIONS...] TARGET
   OPTIONS
      -C          CPU threshold at which to create a dump of the process from 0 to 100 * nCPU
      -c          CPU threshold below which to create a dump of the process from 0 to 100 * nCPU
      -M          Memory commit threshold in MB at which to create a dump
      -m          Trigger when memory commit drops below specified MB value.
      -n          Number of dumps to write before exiting
      -s          Consecutive seconds before dump is written (default is 10)
   TARGET must be exactly one of these:
      -p          pid of the process

したがって、コマンドライン引数から推測できるので、後でgdbなどを使用して分析するために、不必要な量のリソースを取得することで、正常に動作しないことがわかっているプロセスの「スナップショット」を簡単に取得できます。

ただし、このLinux用のProcDumpは、Windowsのいとこと比較して機能が完全ではありません。

1
0xC0000022L