私はbusyboxのバージョンを使って組み込みLinuxを開発しています。 Linuxコアダンプを生成するには、次のようにします。
ulimit -c unlimited
その後、巨大なコアファイル(〜1GB)を得たことを確認しました。私のアプリケーションは巨大で、あまりにも多くのメモリを割り当てているからです。
今、私はこの大容量コアファイルを最適化するソリューションを探しています。私が見つけた(http://man7.org/linux/man-pages/man5/core.5.html)コアダンプをプログラムにパイプできます。コアダンプの作成中に圧縮しようとしています。
つまり
cat /proc/sys/kernel/core_pattern
| /tmp/shellscript.sh /tmp/core.%p.gz
cat /tmp/shellscript.sh
#!/bin/sh
/bin/gzip > "$1"
今、「コアダンプをプログラムに転送する」は、次のように動作することに気づきました。一般的なデスクトップUbuntuシステム。
しかし、私たちの目標は、組み込みLinuxシステムのビジボックスバージョンを使用することです。 busyboxで「プログラムにコアダンプを送信する(この場合は圧縮)」と同じ手順を実行すると、コアダンプがまったく生成されないかどうか疑問に思います。
ただし、busyboxからパイプオプションを削除すると、コアダンプが表示されます。つまり
root@(none):~ cat /proc/sys/kernel/core_pattern
/tmp/core_top
ビジボックス版を含む組み込みLinuxでコアダンプをプログラムにパイピングするのがうまくいかない理由を知っている人はいますか?
ありがとう、
ベストアンサー1
man 5 core
* The program must be specified using an absolute pathname (or a
pathname relative to the root directory, /), and must immediately
follow the '|' character.
|
したがって、および間にはスペースを含めないでください/
。
/tmp
また、スクリプトがあるパーティションにスクリプトがインストールされている可能性がありますか-o noexec
?