Tệp lõi là hình ảnh của một quy trình được tạo bởi hệ điều hành khi quá trình kết thúc bất ngờ. Các tệp lõi được tạo khi chương trình hoạt động sai do lỗi hoặc vi phạm CPU hoặc cơ chế bảo vệ bộ nhớ. Hệ điều hành giết chương trình và tạo tập tin lõi.
Tập tin này có thể rất hữu ích trong việc xác định những gì đã xảy ra với một quy trình. Việc sản xuất các tệp lõi có thể được bật theo mặc định, tùy thuộc vào bản phân phối và phiên bản Linux mà bạn có.
Nếu bạn hoàn toàn không muốn tập tin lõi, hãy đặt "ulimit -c 0" trong tập tin khởi động của bạn. Đó là mặc định trên nhiều hệ thống; trong /etc/profile
bạn có thể tìm thấy
Vì các tệp bị cắt không sử dụng thực tế, hãy đặt kích thước của tệp lõi Linux thành "không giới hạn".
Usage of ulimit Action
ulimit -c # check the current corefile limit
ulimit -c 0 # turn off corefiles
ulimit -c x # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited # turn on corefiles with unlimited size
ulimit -n unlimited # allows an unlimited number of open file descriptors
ulimit -p # size of pipes
ulimit -s # maximum native stack size for a process
ulimit -u # number of user processes
help ulimit #list of other options
Tệp lõi được đặt vào thư mục làm việc hiện tại của quy trình, tùy thuộc vào quyền ghi cho quy trình JVM và không gian đĩa trống.
Tùy thuộc vào cấp độ kernel, một tùy chọn kernel hữu ích có sẵn để cung cấp cho corefiles nhiều tên có ý nghĩa hơn. Là người dùng root, tùy chọn sysctl -w kernel.core_usftimepid = 1 đảm bảo rằng các tệp lõi có tên của biểu mẫu "Core.PID".
ulimit -S -c 0 > /dev/null 2>&1
Nếu bạn muốn các tệp cốt lõi, bạn cần đặt lại tệp đó trong .bash_profile của riêng bạn:
ulimit -c 50000
sẽ cho phép các tệp lõi nhưng giới hạn chúng ở mức 50.000 byte.
Bạn có nhiều quyền kiểm soát các tập tin cốt lõi trong /proc/sys/kernel/
Ví dụ: bạn có thể loại bỏ việc gắn thẻ trên pid bằng cách
echo "0" > /proc/sys/kernel/core_uses_pid
Các tập tin lõi sau đó sẽ chỉ được đặt tên là "lõi". Mọi người làm những việc như vậy để người dùng có thể chọn đặt một tệp không thể ghi có tên là "lõi" trong các thư mục mà họ không muốn tạo các kết xuất lõi. Đó có thể là một thư mục (lõi mkdir) hoặc một tệp (lõi cảm ứng; lõi chmod 000).
Nhưng có lẽ thú vị hơn là bạn có thể làm:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
Tất cả các corefiles sau đó được chuyển sang /tmp/corefiles
(không thay đổi core_uses_pid nếu bạn làm điều này).
Kiểm tra điều này với một kịch bản đơn giản:
# script that dumps core
kill -s SIGSEGV $$
Trong Ubuntu, việc tạo các tệp lõi được kiểm soát thông qua tệp /etc/default/collectd
. Bạn có thể cho phép tạo các bãi chứa lõi bằng cách cài đặt:
ENABLE_COREFILES=1
Định vị tệp lõi
Khi daemon bị sập, một tệp sẽ được tạo trong thư mục làm việc hiện tại của nó. Theo mặc định, đây là pkglocalstatedir
, tức là prefix/var/lib/collectd
. Nếu bạn đã cài đặt một gói, thư mục này rất có thể /var/lib/collectd
.
Nguồn: AP Lawrence và IBM