1

私はOS X 10.11で作業しており、次の方法でダンプファイルを生成しました:

1. ulimit -c unlimited
2. kill -10 5228 (process pid)

ローリング属性を持つダンプファイルを取得しました:642M Jun 26 15:00 core.5228

その直前に、vmmapコマンドを使用してプロセスの合計メモリ容量を確認し、予想されるダンプ サイズを推定してみました。

ただし、見積もり (238.7Mb) は、実際のサイズ (642Mb) よりもはるかに小さかった。

このギャップは説明できますか?

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Activity Tracing                  2048K        2 
Kernel Alloc Once                    4K        2 
MALLOC guard page                   16K        4 
MALLOC metadata                    180K        6 
MALLOC_SMALL                      56.0M        4         see MALLOC ZONE table below
MALLOC_SMALL (empty)              8192K        2         see MALLOC ZONE table below
MALLOC_TINY                       8192K        3         see MALLOC ZONE table below
STACK GUARD                       56.0M        2 
Stack                             8192K        2 
__DATA                            1512K       44 
__LINKEDIT                        90.9M        4 
__TEXT                            8336K       44 
shared memory                       12K        4 
===========                     =======  ======= 
TOTAL                            238.7M      110 

                                 VIRTUAL ALLOCATION      BYTES          REGION
MALLOC ZONE                         SIZE      COUNT  ALLOCATED  % FULL   COUNT
===========                      =======  =========  =========  ======  ======
DefaultMallocZone_0x100e42000      72.0M       7096       427K      0%       6
4

1 に答える 1

1

coredump は、プロセス メモリをフィルター処理できます。コアのマニュアル ページを参照してください。

コア ダンプに書き込まれるマッピングの制御

カーネル 2.6.23 以降、Linux 固有の /proc/PID/coredump_filter ファイルを使用して、対応するプロセス ID を持つプロセスに対してコア ダンプが実行される場合に、コア ダンプ ファイルに書き込まれるメモリ セグメントを制御できます。

ファイル内の値は、メモリ マッピング タイプのビット マスクです (mmap(2) を参照)。マスクにビットが設定されている場合、対応するタイプのメモリ マッピングがダンプされます。それ以外の場合、それらはダンプされません。このファイルのビットには、次の意味があります。

      bit 0  Dump anonymous private mappings.
      bit 1  Dump anonymous shared mappings.
      bit 2  Dump file-backed private mappings.
      bit 3  Dump file-backed shared mappings.
      bit 4 (since Linux 2.6.24)
             Dump ELF headers.
      bit 5 (since Linux 2.6.28)
             Dump private huge pages.
      bit 6 (since Linux 2.6.28)
             Dump shared huge pages.
      bit 7 (since Linux 4.4)
             Dump private DAX pages.
      bit 8 (since Linux 4.4)
             Dump shared DAX pages.

デフォルトでは、次のビットが設定されています: 0、1、4 (CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERSカーネル構成オプションが有効な場合)、および 5。このデフォルトは、起動時に coredump_filter 起動オプションを使用して変更できます。

OS Xも同様に動作すると思います。

于 2016-06-26T12:27:35.427 に答える