Linux
缺少核心轉儲
我有一個崩潰的應用程序,它與輸出一起崩潰:
Aborted (core dumped)
.現在,當我查看包含二進製文件的目錄時,沒有崩潰轉儲。
- 沒有
core
目錄。- 文件系統上有可用空間
- 使用者可以在目錄中創建文件。
ulimit -a
印刷core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 31845 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 31845 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
cat /proc/sys/kernel/core_pattern
印刷core
cat /proc/sys/fs/suid_dumpable
印刷2
還有什麼我可以檢查的嗎?我沒主意了。
我在 Ubuntu 15.04 上執行。
- 一些作業系統允許配置一個系統範圍的目錄來放置核心文件
- 該程序可能已更改其工作目錄。核心文件位於轉儲核心的程序的工作目錄中
- 如果發出了 ulimit -c 0,則 shell 消息不應列印“core dumped”,除非作業系統有錯誤
要在 Linux 上生成核心轉儲,我們可以在執行執行檔的初始化腳本中添加以下參數。因此,每當我們初始化軟體或執行我們的應用程序並導出環境變數時,我們也可以將以下幾行複製到腳本中以轉儲核心,以防萬一我們看到任何崩潰。
要設置核心轉儲的位置,您可以使用 proc 文件系統設置核心文件路徑。
例如,如果您想在
/tmp/crash/corefiles
. 這將確保您的核心文件生成路徑對於您使用腳本執行的程序保持不變。mkdir -p /tmp/crash/corefiles chmod 775 /tmp/crash/corefiles echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern
其中變數是:
%e是文件名
%g是程序執行的 gid
%p是程序的 pid
%s是導致轉儲的信號
%t是轉儲發生的時間
%u是程序執行的 uid
此外,您必須設置核心文件大小,下面的命令將核心文件大小設置為無限制
ulimit -c unlimited
現在要檢查為程序中每個執行緒設置的核心文件大小,我們可以使用
cat /proc/<PID>/limits
上述命令的輸出:
Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max open files 10000 10000 files Max address space unlimited unlimited bytes Max resident set unlimited unlimited bytes Max processes 31868 31868 processes Max locked memory 65536 65536 bytes Max file locks unlimited unlimited locks Max pending signals 31868 31868 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
從上面的輸出中我們可以看出,最大核心文件大小設置為無限制。
在您的情況下,您可以按照以下步驟操作。
- 創建一個包含所有環境導出以及上述核心文件生成相關更改的初始化腳本。
- 從初始化腳本觸發您的應用程序。
- 當發生崩潰時,您應該能夠根據您設置的核心文件位置看到核心文件。
- 您可以使用以下方法驗證 core_pattern:
cat /proc/sys/kernel/core_pattern
並查看您的位置是否設置正確。