0

Coldfire uCLinux システムで、以下のクラッシュ出力が表示されることがあります。問題の原因を突き止めるにはどうすればよいですか?

4 月 4 日 10:44:33 (なし) user.debug syslog: NTP の開始
sh: ページの割り当てに失敗しました。オーダー:8、モード:0xd0
41da5dcc からのスタック:
        4005b0f2 400553b6 40207431 406131f8 00000008 000000d0 00000008 00000000
        000000a2 000a2000 000a2000 0000000c 40544a14 00000000 405434fc 00000077
        41da5eac 00000000 00000010 00000000 41da5008 41da5000 00000000 00000100
        00000000 41da5000 00000000 000200d0 4024eecc 00000080 00000000 00000000
        4005de52 000000d0 00000008 4024eec8 00000000 00000001 00004d09 00079100
        00000004 00003f20 00013424 41cd7000 41da5fcc 41da5f2a 00015790 00000000
CONFIG_FRAME_POINTER を無効にしてトレースを呼び出します。

 [4005b0f2] [400553b6] [40207431] [4005de52] [40067d64]
 [40093892] [4004b15e] [400390d8] [40020e70] [400677d8]
 [40020e70] [401f0c92] [40068468] [4006aa4e] [40020ea0]
 [4002386c]
メモリ情報:
CPU あたりの DMA:
CPU 0: hi: 0、btch: 1 usd: 0
Active_anon:0 active_file:0 inactive_anon:0
 inactive_file:4484 ダーティ:0 書き戻し:0 不安定:0
 フリー:8806 スラブ:565 マップ:0 ページテーブル:0 バウンス:0
DMA フリー:35216kB 最小:1016kB 低:1268kB 高:1524kB 番号
lowmem_reserve[]: 0 0 0
DMA: 0*4kB 0*8kB 1*16kB 4*32kB 6*64kB 3*128kB 46*256kB 44*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB = 35216kB
合計 4484 ページキャッシュ ページ
0 ページ RAM
0 ページ予約済み
0 ページが共有されました
0 ページ非共有
プロセス 476 (sh) からの長さ 663552 の割り当てに失敗しました
CPU あたりの DMA:
CPU 0: hi: 0、btch: 1 usd: 0
Active_anon:0 active_file:0 inactive_anon:0
 inactive_file:4484 ダーティ:0 書き戻し:0 不安定:0
 フリー:8804 スラブ:567 マップ:0 ページテーブル:0 バウンス:0
DMA フリー:35216kB 最小:1016kB 低:1268kB 高:1524kB 番号
lowmem_reserve[]: 0 0 0
DMA: 0*4kB 0*8kB 1*16kB 4*32kB 6*64kB 3*128kB 46*256kB 44*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB = 35216kB
合計 4484 ページキャッシュ ページ
プロセス テキスト/データに RAM を割り当てることができません、errno 12
sh: ページの割り当てに失敗しました。オーダー:8、モード:0xd0
41ea6dcc からのスタック:
        4005b0f2 400553b6 40207431 40645848 00000008 000000d0 00000008 00000000
        000000a2 000a2000 000a2000 0000000c 40544a6c 00000000 405434fc 00000077
        41ea6eac 00000000 00000010 00000000 41ea6008 41ea6000 00000000 00000100
        00000000 41ea6000 00000000 000200d0 4024eecc 00000080 00000000 00000000
        4005de52 000000d0 00000008 4024eec8 00000000 00000001 00004d09 00079100
        00000004 00003f20 00013424 410ae600 41ea6fcc 41ea6f2a 00015790 00000000
CONFIG_FRAME_POINTER を無効にしてトレースを呼び出します。

 [4005b0f2] [400553b6] [40207431] [4005de52] [40067d64]
 [40093892] [4004b15e] [400390d8] [40020e70] [400677d8]
 [40020e70] [401f0c92] [40068468] [4006aa4e] [40020ea0]
 [400239c2] [4002386c]
メモリ情報:

4

1 に答える 1

1

システムの空きページが 1 MB 不足しています。アロケータの 2 乗では、663552 バイトを割り当てるにはサイズ 1 MB の空きページが必要です。これは、メモリの断片化が原因です。通常、MMU は空き領域を再編成して、新しい割り当てに対して連続して見えるようにします。

予防によって問題を解決するしかありません。663552 バイトが sh バイナリである場合、メモリに継続的に再ロードされないようにする必要があります。これは、XIP ファイル システムに配置することで実行できます。

シェルによって行われたヒープ割り当てである可能性があります。この場合、大規模な malloc の原因となっている処理を変更する必要があります。

システム レベルでは、どのプログラムが大きいか、または大規模な malloc を引き起こしているかを確認し、それ以上の断片化を引き起こさないように動作を変更する必要があります。

于 2012-06-07T19:22:40.783 に答える