วิธีตั้งค่าตำแหน่งไฟล์ดัมพ์หลัก (และชื่อ)


17

ฉันใช้ CentOS 6 พยายามเปิดใช้งาน core dumps สำหรับแอปพลิเคชันที่ฉันกำลังพัฒนา ฉันได้ใส่:

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

ในโปรไฟล์ bash ของฉัน แต่การถ่ายโอนข้อมูลหลักยังไม่ได้สร้าง (ในเทอร์มินัลใหม่)

ฉันได้เปลี่ยน /etc/security/limits.conf ของฉันด้วยเพื่อให้ขีด จำกัด ซอฟต์เป็นศูนย์สำหรับผู้ใช้ทั้งหมด

ฉันจะตั้งค่าตำแหน่งของไฟล์แกนได้อย่างไร? ฉันต้องการระบุตำแหน่งและผนวกเวลาที่สร้างดัมพ์เป็นส่วนหนึ่งของชื่อไฟล์หรือไม่


1
สิ่งนี้อาจมีประโยชน์: stackoverflow.com/a/16048288/2808351
dhag

คำตอบ:


27

ในการตั้งค่าตำแหน่งของการทิ้งขยะหลักใน CentOS 6 คุณสามารถแก้ไข/etc/sysctl.confได้ ตัวอย่างเช่นหากคุณต้องการทิ้งขยะหลักใน/var/crash:

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

ตัวแปรอยู่ที่ไหน:

% eเป็นชื่อไฟล์
% gเป็น gid กระบวนการทำงานภายใต้
% pคือ pid ของกระบวนการ
% sเป็นสัญญาณที่ทำให้เกิดการถ่ายโอนข้อมูล
% tคือเวลาที่การถ่ายโอนข้อมูลเกิดขึ้น
% uคือ uid กระบวนการทำงานอยู่ภายใต้

นอกจากนี้คุณต้องเพิ่ม /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'

ตอนนี้ใช้การเปลี่ยนแปลงใหม่:

$ sysctl -p

แต่มีข้อแม้เล็กน้อยด้วยวิธีนี้ หากพารามิเตอร์เคอร์เนล kernel.core_pattern จะถูกรีเซ็ตและเขียนทับเมื่อรีบูตไปที่การกำหนดค่าต่อไปนี้แม้ว่าจะมีการระบุค่าด้วยตนเองใน /etc/sysctl.conf:

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

ในระยะสั้นเมื่อabrtd.serviceเริ่มต้นจะถูกเขียนทับโดยอัตโนมัติโดยระบบที่ติดตั้งkernel.core_pattern abrt-addon-ccppมีสองวิธีในการแก้ไขปัญหานี้:

  1. DumpLocationตัวเลือกการตั้งค่าใน/etc/abrt/abrt.confไฟล์กำหนดค่า ไดเรกทอรีปลายทางสามารถระบุได้โดยการตั้งค่า DumpLocation = /var/crashใน/etc/abrt/abrt.confแฟ้มการกำหนดค่าและsysctl kernel.core_pattern's ค่าที่แสดงเป็นไฟล์เหมือนกัน /var/crashแต่หลักจริงจะได้รับการสร้างขึ้นเพื่อไดเรกทอรีที่อยู่ภายใต้

    นอกจากนี้หากคุณเปิดใช้งาน SELinux คุณจะต้องเรียกใช้:

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

    และในที่สุดก็เริ่มต้นใหม่abrtd.service:

    $ service abrtd.service restart
    
  2. หยุดบริการ abrtd kernel.core_patternจะไม่ถูกเขียนทับ - (ฉันไม่เคยทดสอบ)


1
คำตอบที่ยอดเยี่ยม อาจเป็นเรื่องที่น่าสังเกตว่าในระบบ EFI คุณจะได้รับดัมพ์ในระบบแฟลช
mikeserv

0

เพื่อสร้าง core dump บน Busybox เราสามารถเพิ่มพารามิเตอร์ด้านล่างในสคริปต์เริ่มต้นซึ่งเรียกใช้ปฏิบัติการของเรา ดังนั้นเมื่อใดก็ตามที่เรากำหนดค่าเริ่มต้นซอฟต์แวร์และตัวแปรสภาพแวดล้อมการส่งออกเราสามารถคัดลอกบรรทัดด้านล่างไปยังสคริปต์เช่นกันเพื่อทิ้งแกนในกรณีที่เราเห็นความผิดพลาดใด ๆ

ในการตั้งค่าตำแหน่งของดัมพ์หลักใน Busybox คุณสามารถตั้งค่าพา ธ ไฟล์หลักโดยใช้ระบบไฟล์ 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      

ดังที่เราสามารถเห็นได้จากขนาดไฟล์ max core สูงสุดที่แสดงไว้ด้านบนถูกตั้งค่าเป็นไม่ จำกัด

สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชมลิงค์นี้ Linux Applications ดีบักเทคนิค / ไฟล์ Core

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.