2010-04-08 25 views
6

Tôi đang chạy Django trên Linux bằng fcgi và Lighttpd. Mỗi lần này và một lần nữa (khoảng một lần một ngày) máy chủ chỉ chết. Tôi đang sử dụng bản phát hành ổn định mới nhất của Django, Python và Lighttpd.Tại sao Django fcgi lại chết? Làm thế nào tôi có thể tìm ra?

Điều duy nhất tôi có thể nghĩ là chương trình của tôi đang mở nhiều tệp và thực hiện nhiều quy trình bên ngoài, nhưng tôi khá chắc chắn rằng khía cạnh của mọi thứ không kín nước.

Nhìn vào lỗi và nhật ký truy cập, không có gì đặc biệt xảy ra (tức là tải không cao hơn mức bình thường). Vào những dịp mà tôi đã có ngoại lệ từ Python, những điều này đã xuất hiện trong error.log, nhưng khi sự cố này xảy ra, tôi chẳng nhận được gì cả.

Có cách nào để tìm hiểu lý do tại sao quá trình này bị chết? Viết ngắn gọn các câu lệnh đăng nhập trên mỗi dòng đơn? Rõ ràng là tôi không thể tái tạo điều này nên tôi không biết chính xác nơi cần tìm.

Sửa

Đó là quá trình django đó là chết. Tôi đang chạy máy chủ với manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345

+1

Bạn đã tìm kiếm tệp lõi chưa? Bạn đã thiết lập rlimits của bạn để cho phép các tập tin lõi? – jemfinch

+0

Bạn có thể chạy máy chủ từ dòng lệnh, trong chế độ gỡ lỗi không được sửa lỗi không? –

+0

Đọc câu hỏi một lần nữa, có một điều không hoàn toàn rõ ràng: liệu nó có phải là trình duyệt lighttpd daemon chết hay quá trình FastCGI của riêng bạn? – Thomas

Trả lời

2

Bạn có thể chỉnh sửa manage.py để chuyển hướng stderr vào một tập tin, giả sử runfcgi không làm điều đó bản thân:

import sys 
if sys.argv[1] == "runfcgi": 
    sys.stderr = open("/path/to/my/django-error.log", "a") 
+0

Cảm ơn bạn đã đề xuất. Tôi nghĩ rằng khi tôi nhận được nhiều ngoại lệ trong error.log của lighttpd (vì các lý do không liên quan), stderr đã được ghi lại. Đủ để nói, nhật ký trống khi quá trình chết. – Joe

0

Đây có phải là trên máy chủ của bạn? (Bạn có sở hữu hộp?). Tôi đã có vấn đề trên chia sẻ lưu trữ, và máy chủ đã chỉ giết chết các quy trình lâu dài. Bạn có biết nếu fcgi của bạn đang nhận được SIGTERM không?

+0

Bạn có biết quy trình nào sẽ gửi những tin nhắn đó không? Đó là hộp [ảo] của tôi. Tôi có một vài quy trình Django. Đây là người duy nhất chết. – Joe

0

Đã xảy ra sự cố tương tự. Không chỉ làm họ chết mà không cảnh báo hoặc lý do họ bị rò rỉ như điên quá với các chủ đề bị mắc kẹt mà không có một quá trình tổng thể. Chúng tôi đã giải quyết vấn đề này bằng cách chạy cronjob cứ 5 phút một lần để kiểm tra xem số cổng có đang hoạt động hay không và nếu không khởi động lại.

Nhân tiện, hiện tại chúng tôi đã chuyển từ từ sang fcgi và chuyển sang uwsgi.

+0

Tôi đã đi đến kết luận tương tự nhưng với khoảng thời gian 1 phút. Uwsgi có giải quyết được vấn đề của bạn không? – Joe

+0

Bạn chưa biết. Chưa thấy nó sụp đổ ít nhất. –

Các vấn đề liên quan