Có thể làm bất cứ điều gì hữu ích với một lõi bị cắt ngắn?


7

Chúng tôi có các quy trình được viết bằng hỗn hợp Python, Java và C ++ mà kết xuất lõi theo thời gian. Họ phân bổ nhiều bộ nhớ hơn trong các khối khi cần thiết trong thời gian chạy và được biết là gặp sự cố khi mẹo phân bổ của họ qua 4G (tôi đoán giá trị trả về của malloc()không được kiểm tra).

Tuy nhiên, các bãi chứa lõi được sản xuất bị cắt ngắn, theo GDB - chúng không giới hạn kích thước trong HĐH và trên đĩa chúng có kích thước khác nhau giữa 2-3,8G.

GDB quan sát rằng kích thước không khớp với những gì nó mong đợi (có lẽ bao gồm cả phân bổ thất bại?) Và bỏ cuộc - nhưng trong 3,8G dữ liệu chắc chắn phải có điều gì đáng quan tâm? Thậm chí có thể là toàn bộ stack tôi cần cho một backtrace!

Làm cách nào tôi có thể thuyết phục GDB ít nhất là thử, hoặc có một công cụ thay thế nào có thể trích xuất thứ gì đó từ lõi bị cắt không?


Mục đích của bạn ở đây là gì? Bạn sẽ không tốt hơn khi trực tiếp gỡ lỗi quá trình? Ví dụ, tôi đã nghe tin đồn người ta có thể đính kèm gdb vào một quy trình đang chạy. Làm thế nào thường làm những tai nạn xảy ra?
Faheem Mitha

Có lẽ không thể dự đoán được, vì bộ nhớ thực sự cần thiết phụ thuộc vào bộ dữ liệu đang được xử lý và không có mối quan hệ tuyến tính giữa kích thước của dữ liệu và bộ nhớ cần thiết để xử lý nó. Động lực của tôi ở đây là cung cấp cho người dùng của tôi nhiều sự trợ giúp nhất có thể khi công việc hàng loạt của họ thất bại, tất cả những gì tôi có thể nói với họ ngay bây giờ là bạn đang cố gắng sử dụng quá nhiều bộ nhớ nhưng tôi không thể giúp họ theo dõi chính xác chức năng nào làm điều đó (nhiều thư viện C ++ và Java đến từ nơi khác, người dùng của tôi chủ yếu viết mã keo Python).
Gaius

Tôi hiểu rồi. Bạn không tự chạy hay viết mã? Khi bạn nói "người dùng của tôi", vai trò / chức năng của bạn trong việc này là gì? Không có liên hệ thực hành, tôi nghĩ những vấn đề này có thể khó giải quyết. Cân nhắc đi chơi trong phòng chat. Đây có thể là một nơi hợp lý để thảo luận về các vấn đề; khi mọi người xung quanh và chú ý, đó là
Faheem Mitha

Tôi là một sysadmin, người dùng của tôi đang viết chủ yếu là mã số; họ giỏi toán nhưng không nhất thiết phải là "kỹ thuật". Mã được chạy bằng hệ thống tệp phân tán và bộ lập lịch công việc. Vấn đề tôi đang hỏi ở đây là, có gì hữu ích tôi có thể nhận được từ một bãi chứa lõi 3,8G không, khi GDB nghĩ rằng nó bị cắt ngắn? Tôi đủ thoải mái để viết C cho mình nếu cần thiết.
Gaius

Bản thân tôi không quen thuộc với các tập tin cốt lõi, vì vậy tôi không thể đưa ra một gợi ý nào ở đó. Tôi đã đề xuất phương pháp gỡ lỗi thay thế. Nói chung có thể tránh cạn kiệt bộ nhớ bằng cách giải phóng bộ nhớ theo định kỳ. Có thể tìm ra vấn đề nằm ở đâu mà không cần phải xem xét các bãi rác cốt lõi, trừ khi nó rất phức tạp. Một lần nữa, hãy ghé qua phòng trò chuyện của chúng tôi, đến, er, trò chuyện. Stack Overflow có thể có nhiều chuyên môn lập trình hơn, nhưng chúng ta có thể thân thiện hơn. :-)
Faheem Mitha

Câu trả lời:


5

Sự phô trương này trên trang web của Sun Studio 12 dường như ngụ ý rằng về cơ bản chúng vô dụng.

đoạn trích - http://docs.oracle.com/cd/E19205-01/819-5257/blabs/index.html

Nếu tập tin cốt lõi của bạn bị cắt ngắn

Nếu bạn gặp sự cố khi tải tệp lõi, hãy kiểm tra xem bạn có tệp lõi bị cắt không. Nếu bạn có kích thước tối đa cho phép của các tệp lõi được đặt quá thấp khi tệp lõi được tạo, thì dbx không thể đọc tệp lõi bị cắt bớt. Trong trình bao C, bạn có thể đặt kích thước tệp lõi tối đa cho phép bằng cách sử dụng lệnh giới hạn (xem trang man giới hạn (1)). Trong shell Bourne và Korn shell, sử dụng lệnh ulimit (xem trang man giới hạn (1)). Bạn có thể thay đổi giới hạn về kích thước tệp lõi trong tệp khởi động shell của mình, nguồn lại tệp khởi động và sau đó chạy lại chương trình đã tạo tệp lõi để tạo tệp lõi hoàn chỉnh.

Nếu tệp lõi không đầy đủ và phân đoạn ngăn xếp bị thiếu, thì thông tin theo dõi ngăn xếp không có sẵn. Nếu thông tin liên kết thời gian chạy bị thiếu, thì danh sách các loadobject không có sẵn. Trong trường hợp này, bạn nhận được thông báo lỗi về librtld_db.so không được khởi tạo. Nếu danh sách các LWP bị thiếu, thì không có thông tin luồng, thông tin lwp hoặc thông tin theo dõi ngăn xếp nào khả dụng. Nếu bạn chạy lệnh where, bạn sẽ gặp lỗi khi nói rằng chương trình không hoạt động.


Điều này có vẻ là cảnh báo quan trọng mà phân đoạn ngăn xếp bị thiếu, sau đó thông tin theo dõi ngăn xếp không có sẵn. Nếu thiếu thông tin liên kết thời gian chạy, thì danh sách các loadobject không khả dụng <--- chỉ bằng xác suất tuyệt đối nên có một số thông tin này trong tệp lõi 3,8G!
Gaius
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.