Làm cách nào để đặt vị trí tệp kết xuất lõi (và tên)?


16

Tôi đang sử dụng CentOS 6, đang cố gắng kích hoạt các kết xuất cốt lõi cho một ứng dụng mà tôi đang phát triển. Tôi vừa đặt:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

trong hồ sơ bash của tôi, nhưng kết xuất lõi vẫn không tạo ra (trong một thiết bị đầu cuối mới).

Tôi cũng đã thay đổi /etc/security/limits.conf để giới hạn mềm bằng không cho tất cả người dùng.

Làm cách nào để đặt vị trí của các tệp lõi là đầu ra? Tôi muốn chỉ định vị trí và nối thời gian kết xuất được tạo, như là một phần của tên tệp?


1
Điều này có thể hữu ích: stackoverflow.com/a/16048288/2808351
dhag

Câu trả lời:


26

Để đặt vị trí của các bãi chứa lõi trong CentOS 6, bạn có thể chỉnh sửa /etc/sysctl.conf. Ví dụ: nếu bạn muốn kết xuất lõi trong /var/crash:

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

Các biến là:

% e là tên tệp
% g là gid mà quá trình đang chạy dưới
% p là pid của tiến trình
% s là tín hiệu gây ra kết xuất
% t là thời gian kết xuất xảy ra
% u là quá trình uid đang chạy

Ngoài ra, bạn phải thêm /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

Bây giờ áp dụng những thay đổi mới:

$ sysctl -p

Nhưng có một cảnh báo trắng theo cách này. Nếu tham số kernel kernel.core_potype luôn được đặt lại và ghi đè khi khởi động lại vào cấu hình sau ngay cả khi một giá trị được chỉ định thủ công trong /etc/sysctl.conf:

|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

Nói tóm lại khi abrtd.servicebắt đầu kernel.core_patternđược ghi đè tự động bởi hệ thống được cài đặt abrt-addon-ccpp. Có hai cách để giải quyết vấn đề này:

  1. DumpLocationTùy chọn cài đặt trong /etc/abrt/abrt.conftệp cấu hình. Thư mục đích có thể được chỉ định bằng cách đặt DumpLocation = /var/crashtrong /etc/abrt/abrt.conftệp cấu hình và sysctl kernel.core_patterngiá trị được hiển thị là giống nhau nhưng thực sự tệp lõi sẽ được tạo cho thư mục bên dưới /var/crash.

    Ngoài ra, nếu bạn đã bật SELinux, bạn phải chạy:

    $ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"  
    $ setsebool -P abrt_anon_write 1
    

    Và cuối cùng khởi động lại abrtd.service:

    $ service abrtd.service restart
    
  2. Dừng dịch vụ abrtd. kernel.core_patternsẽ không bị ghi đè. - (Tôi chưa bao giờ thử nghiệm).


1
Câu trả lời tuyệt vời. Có thể đáng chú ý rằng trên các hệ thống EFI, bạn cũng nhận được một kết xuất trong flash hệ thống.
mikeerv

0

Để tạo kết xuất lõi trên Busybox, chúng ta có thể thêm các tham số bên dưới vào tập lệnh khởi chạy để thực thi. Vì vậy, bất cứ khi nào chúng tôi khởi tạo phần mềm và xuất các biến môi trường, chúng tôi có thể sao chép các dòng dưới đây vào tập lệnh để chuyển lõi trong trường hợp nếu chúng tôi thấy bất kỳ sự cố nào.

Để đặt vị trí của các bãi chứa lõi trong Busybox, bạn có thể đặt đường dẫn tệp lõi bằng hệ thống tệp Proc. Ví dụ: nếu bạn muốn kết xuất lõi /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

Các biến là:

% e là tên tệp
% g là gid mà quá trình đang chạy dưới
% p là pid của tiến trình
% s là tín hiệu gây ra kết xuất
% t là thời gian kết xuất xảy ra
% u là quá trình uid đang chạy

Ngoài ra, bạn phải đặt kích thước tệp lõi, bên dưới lệnh sẽ đặt kích thước tệp lõi thành không giới hạn

ulimit -c unlimited

Bây giờ để kiểm tra kích thước tệp lõi được đặt cho từng luồng trong một quy trình, chúng ta có thể kiểm tra bằng cách sử dụng

cat /proc/<PID>/limits

Đầu ra của lệnh trên:

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      

Như chúng ta có thể thấy từ kích thước tệp tối đa đầu ra ở trên được đặt thành không giới hạn.

Để biết thêm thông tin xin vui lòng truy cập liên kết này. Các ứng dụng Linux Kỹ thuật gỡ lỗi / Tập tin lõi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.