1. 程式人生 > >ulimit和core檔案的使用方法

ulimit和core檔案的使用方法

摘要

  • ulimint -a 用來顯示當前的各種使用者程序限制。Linux對於每個使用者,系統限制其最大程序數,為提高效能,可以根據裝置資源情況,設定某個Linux使用者的最大程序數,一些時候需要設定為無限制
  • ulimit -d unlimited 資料段長度
  • ulimit -m unlimited 最大記憶體大小
  • ulimit -s unlimited 堆疊大小
  • ulimit -c unlimited 生成core檔案,就是程式執行發行段錯誤時的檔案
    Tips: 對於產生core檔案的一系列的流程
    ulimit -c unlimited --> cc -g hello.c --> ./a.out --> gdb a.out core

    ulimit命令

    示例

[[email protected] ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256465
max locked memory       (kbytes, -l)
64 max memory size (kbytes, -m) unlimited open files (-n) 1024 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) 256465 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

功能說明

控制shell程式的資源。

語 法:

ulimit [-aHS][-c <core檔案上限>][-d <資料節區大小>][-f <檔案大小>][-m <記憶體大小>][-n <檔案數目>][-p <緩衝區大小>][-s <堆疊大小>][-t <CPU時間>][-u <程式數目>][-v <虛擬記憶體大小>]

參 數:

-a 顯示目前資源限制的設定。
-c <core檔案上限> 設定core檔案的最大值,單位為區塊。
-d <資料節區大小> 程式資料節區的最大值,單位為KB。
-f <檔案大小> shell所能建立的最大檔案,單位為區塊。
-H 設定資源的硬性限制,也就是管理員所設下的限制。
-m <記憶體大小> 指定可使用記憶體的上限,單位為KB。
-n <檔案數目> 指定同一時間最多可開啟的檔案數。
-p <緩衝區大小> 指定管道緩衝區的大小,單位512位元組。
-s <堆疊大小> 指定堆疊的上限,單位為KB。
-S 設定資源的彈性限制。
-t <CPU時間> 指定CPU使用時間的上限,單位為秒。
-u <程式數目> 使用者最多可開啟的程式數目。
-v <虛擬記憶體大小> 指定可使用的虛擬記憶體上限,單位為KB

core檔案

什麼是Core Dump?

Core的意思是記憶體, Dump的意思是扔出來, 堆出來.

開發和使用Unix程式時, 有時程式莫名其妙的死了, 卻沒有任何的提示(有時候會提示core dumped). 這時候可以檢視一下有沒有形如core.程序號的檔案生成, 這個檔案便是作業系統把程式down掉時的記憶體內容扔出來生成的, 它可以做為除錯程式的參考.
core dump又叫核心轉儲, 當程式執行過程中發生異常, 程式異常退出時, 由作業系統把程式當前的記憶體狀況儲存在一個core檔案中, 叫core dump.

如何使用core檔案?

gdb -c core檔案路徑 [應用程式的路徑]

進去後輸入where回車, 就可以顯示程式在哪一行當掉的, 在哪個函式中.

為什麼沒有core檔案生成呢?

有時候程式down了, 但是core檔案卻沒有生成. core檔案的生成跟你當前系統的環境設定有關係, 可以用下面的語句設定一下, 然後再執行程式便成生成core檔案.

ulimit -c unlimited

core檔案生成的位置一般於執行程式的路徑相同, 檔名一般為core.程序號

設定Core Dump的核心轉儲檔案目錄和命名規則

在預設的情況下,很多系統的core檔案是生成在你執行程式的目錄下,或者你在程式中chdir後的那個目錄,然後在core檔案的後面加了一個 pid。在實際工作中,這樣可能會造成很多目錄下產生core檔案,不便於管理,實際上,在2.6下,core檔案的生成位置和檔名的命名都是可以配置 的。

  • /proc/sys/kernel/core_uses_pid 可以控制產生的core檔案的檔名中是否新增pid作為擴充套件,如果新增則檔案內容為1,否則為0
  • proc/sys/kernel/core_pattern 可以設定格式化的core檔案儲存位置或檔名,比如原來檔案內容是core-%e
    可以這樣修改:
echo "/tmp/core-%e-%p" > core_pattern

將會控制所產生的core檔案會存放到/corefile目錄下,產生的檔名為core-命令名-pid-時間戳
以下是引數列表:

%p - insert pid into filename 新增pid
%u - insert current uid into filename 添加當前uid
%g - insert current gid into filename 添加當前gid
%s - insert signal that caused the coredump into the filename 新增導致產生core的訊號
%t - insert UNIX time that the coredump occurred into filename 新增core檔案生成時的unix時間
%h - insert hostname where the coredump happened into filename 新增主機名
%e - insert coredumping executable name into filename 新增命令名

Fromhttps://www.aliyun.com/jiaocheng/204409.html