Linux

缺少核心轉儲

  • July 25, 2019

我有一個崩潰的應用程序,它與輸出一起崩潰: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並查看您的位置是否設置正確。

引用自:https://unix.stackexchange.com/questions/231546