Nhược điểm của kích thước lõi không giới hạn? Tập tin cốt lõi đi đâu?


8

Tôi có một công việc mới bắt đầu thỉnh thoảng gặp sự cố với lỗi phân khúc và tôi có một vài câu hỏi về các bãi rác cốt lõi.

Đầu tiên, tôi nên thêm một khổ thơ:

limit core unlimited unlimited

Có một nhược điểm để cho phép kích thước lõi không giới hạn? Một giới hạn hữu hạn sẽ tốt hơn?

Thứ hai, tập tin cốt lõi sẽ đi đâu? Nếu mặc định không phải là một nơi tiêu chuẩn hoặc hợp lý, làm thế nào để tôi làm cho nó hiển thị ở một nơi khác?


bạn vui lòng cập nhật cho chúng tôi công việc mới bắt đầu của bạn
Qasim

Câu trả lời:


6

Các bãi lõi không giới hạn không được khuyến khích trong hầu hết các tình huống, nhưng về mặt kỹ thuật thì tốt. Một bãi chứa lõi chỉ có "tất cả bộ nhớ" mà quy trình hiện tại có. Vì vậy, nhiều nhất nó chỉ có thể lớn như ram + hoán đổi của bạn. Hy vọng bạn có nhiều không gian trống hơn đó.

Trong cuộc sống thực, chúng phải là "nhỏ-ish" so với tổng ram + hoán đổi.

Tập tin "nên" kết thúc trong "thư mục hiện tại". Đối với các tác vụ mới bắt đầu mà chdir thường không /. Nếu họ thay đổi thư mục thì bạn tự mình săn lùng họ. Tuy nhiên, bạn có thể mã cứng một đường dẫn cho họ.

Bạn sẽ có thể kiểm tra /proc/sys/kernel/core_pattern"mẫu". Nếu bạn đặt mẫu thành một cái gì đó giống như vậy echo "/var/log/core" > /proc/sys/kernel/core_patternthì tất cả các lõi của bạn sẽ kết thúc bằng / var / log


5

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/profilebạ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

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.