ไฟล์แกนคือภาพของกระบวนการที่สร้างขึ้นโดยระบบปฏิบัติการเมื่อกระบวนการยุติลงโดยไม่คาดคิด ไฟล์หลักถูกสร้างขึ้นเมื่อโปรแกรมทำงานผิดพลาดเนื่องจากข้อผิดพลาดหรือการละเมิด CPU หรือกลไกการป้องกันหน่วยความจำ ระบบปฏิบัติการจะฆ่าโปรแกรมและสร้างไฟล์แกน
ไฟล์นี้มีประโยชน์มากในการพิจารณาว่ามีอะไรผิดปกติกับกระบวนการ การผลิตไฟล์หลักสามารถเปิดใช้งานได้ตามค่าเริ่มต้นขึ้นอยู่กับรุ่นและรุ่นของ Linux ที่คุณมี
หากคุณไม่ต้องการไฟล์หลักเลยให้ตั้งค่า "ulimit -c 0" ในไฟล์เริ่มต้นของคุณ นั่นเป็นค่าเริ่มต้นในหลาย ๆ ระบบ ใน/etc/profile
คุณอาจพบ
เนื่องจากไฟล์ที่ถูกตัดทอนนั้นไม่มีประโยชน์ในทางปฏิบัติให้ตั้งขนาดของไฟล์ core Linux เป็น "unlimited"
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
ไฟล์แกนจะถูกวางไว้ในไดเรกทอรีการทำงานปัจจุบันของกระบวนการภายใต้การเขียนสิทธิ์สำหรับกระบวนการ JVM และพื้นที่ว่างในดิสก์
ขึ้นอยู่กับระดับเคอร์เนลตัวเลือกเคอร์เนลที่มีประโยชน์มีอยู่ที่ให้ชื่อ corefiles มีความหมายมากขึ้น ในฐานะผู้ใช้รูทตัวเลือก sysctl -w kernel.core_users_pid = 1 ทำให้แน่ใจว่าไฟล์หลักมีชื่อของรูปแบบ "Core.PID"
ulimit -S -c 0 > /dev/null 2>&1
หากคุณต้องการไฟล์หลักคุณต้องรีเซ็ตไฟล์นั้นใน. bash_profile ของคุณเอง:
ulimit -c 50000
อาจอนุญาตไฟล์หลัก แต่ จำกัด ไว้ที่ 50,000 ไบต์
คุณสามารถควบคุมไฟล์หลักได้มากขึ้น /proc/sys/kernel/
ตัวอย่างเช่นคุณสามารถกำจัดแท็กบน pid โดย
echo "0" > /proc/sys/kernel/core_uses_pid
ไฟล์หลักจะถูกตั้งชื่อว่า "core" ผู้คนทำสิ่งต่าง ๆ เช่นนั้นเพื่อให้ผู้ใช้สามารถเลือกที่จะวางไฟล์ที่ไม่สามารถเขียนได้ชื่อ "core" ในไดเรกทอรีที่พวกเขาไม่ต้องการสร้างทิ้งหลัก ซึ่งอาจเป็นไดเรกทอรี (mkdir core) หรือไฟล์ (touch core; chmod 000 core)
แต่ที่น่าสนใจกว่านั้นก็คือคุณสามารถทำได้:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
จากนั้น corefiles ทั้งหมดจะถูกโยนไปที่/tmp/corefiles
(อย่าเปลี่ยน core_uses_pid หากคุณทำเช่นนี้)
ทดสอบสิ่งนี้ด้วยสคริปต์ง่ายๆ:
# script that dumps core
kill -s SIGSEGV $$
ภายใต้อูบุนตู, /etc/default/collectd
การสร้างไฟล์หลักถูกควบคุมผ่านทางไฟล์ คุณสามารถเปิดใช้งานการสร้างทิ้งหลักโดยการตั้งค่า:
ENABLE_COREFILES=1
ค้นหาไฟล์หลัก
เมื่อ daemon ขัดข้องไฟล์จะถูกสร้างในไดเรกทอรีการทำงานปัจจุบัน โดยค่าเริ่มต้นนี้เป็นเช่นpkglocalstatedir
หากคุณติดตั้งแพคเกจไดเรกทอรีนี้มีแนวโน้มมากที่สุดprefix/var/lib/collectd
/var/lib/collectd
แหล่งที่มา: AP Lawrence และ IBM