2010-02-19 25 views
24

Tôi đã chuyển dự án Django đầu tiên của mình từ DjangoEurope sang Webfaction và bắt đầu một vấn đề giống như rò rỉ bộ nhớ. Với mỗi yêu cầu sử dụng bộ nhớ duy nhất của quá trình máy chủ đi lên khoảng 500kb. Nó không bao giờ đi xuống. Điều này xảy ra cho đến khi Webfaction giết nó để sử dụng quá nhiều bộ nhớ.Mức sử dụng bộ nhớ Django tăng lên theo mọi yêu cầu

Tôi có thể thấy rõ điều này khi tôi làm mới giao diện quản trị của Django trong trình duyệt của tôi (mặc dù điều này xảy ra với mỗi trang, không chỉ với giao diện quản trị - mặc dù giao diện quản trị sẽ là một trường hợp thử nghiệm tốt đẹp, vì không có mã trực tiếp ở đó). Với mỗi trình duyệt tải lại việc sử dụng bộ nhớ tăng lên vài trăm kilobyte.

tôi thử nghiệm bộ nhớ sử dụng một lệnh được đề xuất bởi Webfaction:

ps -u publica -o rss,etime,pid,command 

Thông tin thêm về thiết lập của tôi:

  • Django 1.1 (ổn định)
  • Mặc định Webfaction Django thiết lập sử dụng Apache và mod_wsgi
  • DEBUG đặt thành False
  • MySQLdb 1.2.2 từ Webfaction, nhưng sau khi nghe nó có một số vấn đề tôi đã thử phiên bản 1.2.3c. Không giúp được gì.

Edit: Tôi tạo ra một dự án Django trống - cấu hình mặc định Django cộng django.contrib.admin và cơ sở dữ liệu rỗng tươi (thử cả với mysql và postgresql). Tôi bắt đầu tải lại trình quản trị Django trong trình duyệt của mình và xem mức sử dụng bộ nhớ. Lúc đầu, tôi thấy vấn đề xảy ra - sử dụng bộ nhớ tăng sau mỗi lần tải lại. Nhưng rồi nó ổn định và ngừng phát triển. Đó là nhất quán với cách dự án ban đầu của tôi cư xử trên Django châu Âu. Thật không may trên Webfaction nó không bao giờ có vẻ ổn định (hoặc ít nhất là không nằm trong giới hạn của bộ nhớ có sẵn cho tài khoản của tôi). Lời khuyên nào?

+0

Nếu bạn đang làm một cái gì đó bị rò rỉ trong các mô hình của bạn, nó chắc chắn sẽ hiển thị trong admin, vì vậy tôi không chắc bạn đã loại bỏ mã của bạn là thủ phạm.Đối với những gì nó có giá trị, tôi đã chạy một ứng dụng Django trên Webfaction trong hơn một năm và đã không có một vấn đề như thế này. –

Trả lời

12

Tôi e rằng mình không có bất kỳ câu trả lời rõ ràng nào. Lời khuyên của Graham Dumpleton rất hữu ích, nhưng tiếc là anh ta không trả lời (chỉ là bình luận), nên không có cách nào để chấp nhận câu trả lời của anh ta.

Mặc dù tôi vẫn chưa được giải quyết hoàn toàn vấn đề này, sau đây là một số lời khuyên cơ bản cho những người khác gặp phải vấn đề tương tự:

  • tài liệu về đọc Webfaction:
  • Hãy chắc chắn rằng các thiết lập DEBUG được thiết lập để False
  • Không sử dụng mod_python, sử dụng mod_wsgi
  • Hãy chắc chắn rằng bạn sử dụng phiên bản mới nhất od mod_wsgi (Webfaction có xu hướng cài đặt phiên bản cũ)
  • Don't use Django to serve static content
  • Thử chạy mod_wsgi trong chế độ daemon (Webfaction cài đặt nó ở chế độ nhúng theo mặc định) [nhờ Graham Dumpleton cho mẹo]
  • Nếu bạn chạy ở chế độ được nhúng, bạn có thể chỉ định "không hoạt động-timeout = [giây s] "tùy chọn. Nó sẽ khởi động lại quá trình sau [giây] không hoạt động, giúp tăng mức sử dụng bộ nhớ. Read this forum post for detailed instructions.
  • This script sẽ giúp bạn theo dõi việc sử dụng bộ nhớ của bạn dễ dàng hơn và chính xác hơn [nhờ ClaudioA for the tip]
+0

Liên kết đến bài đăng của webfaction bị hỏng – Olli

+1

@Olli cảm ơn bạn. Tôi đã cập nhật (và mở rộng) liên kết đến Webfaction. –

1

Tôi gặp vấn đề tương tự với tính năng web.

Phương pháp tôi sử dụng và webfaction cho tôi biết tôi nên tiếp tục sử dụng, chạy một công việc định kỳ kiểm tra bộ nhớ sau mỗi 5 phút và khởi động lại mọi ứng dụng không thể kiểm soát được.

Trong số 4 ứng dụng python trên webfaction, tôi trung bình 4 lần khởi động lại mỗi ngày.

+0

Điều đó thật tệ. Trên DjangoEurope tất cả mọi thứ đã làm việc tốt. Phải có một giải pháp thực sự ... –

+2

Âm thanh như một điều gì đó có vấn đề với môi trường của họ nếu họ đề xuất người dùng tự khởi động lại các quy trình đang hoạt động. – jathanism

0

Tôi cũng gặp sự cố với bộ nhớ trên Webfaction - chúng không thực sự cắt cho đến khi tôi thêm ứng dụng thứ năm của mình. Tôi đã thử một vài chỉnh sửa để cấu hình apache của tôi, nhưng những gì cuối cùng đã làm việc cho tôi đã chỉ chuyển sang mod_wsgi.

+0

Tôi sử dụng mod_wsgi :( –

+2

Nhưng bạn đang sử dụng chế độ daemon của mod_wsgi, hay bạn đang cố gắng chạy mọi thứ trong chế độ nhúng của mod_wsgi? Ngay cả với cấu hình WebFaction giữ cho quá trình con máy chủ Apache xuống còn 2, nếu sử dụng chế độ nhúng sẽ vẫn mất nhiều bộ nhớ hơn chế độ daemon với một tiến trình cho cá thể Django –

+0

@Graham - cảm ơn. Tôi đã nâng cấp mod_wsgi lên 3.1 (từ 2.5 được cung cấp bởi webfaction) và dường như giúp một chút (lần đầu tiên tôi thấy trường hợp sử dụng bộ nhớ thực sự Sau đó, tôi chuyển sang chế độ daemon, nhưng không nhận thấy nhiều sự khác biệt. Tôi cảm thấy hơi bị đe dọa bởi các tùy chọn cấu hình. Tôi đã đặt 'ServerLimit' thành" 2 ",' MaxRequestsPerChild' thành " 500 ",' WSGIDaemonProcess' vào "[mydomain] processes = 2 không hoạt động-timeout = 1800 threads = 15" và 'WSGIRestrictEmbedded' được bật. Cấu hình này có hợp lý không? –

0
+0

Tôi đã bắt đầu bằng cách phân tích cẩn thận các mẹo đó. Tôi phục vụ các tệp tĩnh theo cách chúng được khuyến nghị (tôi đã kiểm tra ít nhất năm lần trong hai ngày qua;]). Tôi không biết về kịch bản. Cảm ơn. –

+0

Nếu bạn chỉ có một ứng dụng đang chạy, nó khá dễ dàng để tránh các vấn đề. Tôi nghĩ rằng họ thực sự khởi động lại ứng dụng của bạn mỗi lần trong một thời gian. Nhưng khi bạn nhận được bốn ứng dụng trong một tài khoản, thì khá dễ dàng để bắt đầu đạt đến giới hạn của bạn - đặc biệt khi webfaction là keo kiệt với bộ nhớ và sẽ không cho phép bạn mua hơn 240 MB cho mỗi tài khoản. –

+0

Mm .. không biết rằng webfaction đã hạn chế bộ nhớ mà bạn có thể mua ... cảm ơn. –

1

tôi muốn đề nghị không để đoán.

Hãy xem http://code.google.com/p/django-dowser/, đây là một ứng dụng rất hữu ích để phát hiện rò rỉ bộ nhớ và tìm ra những phần nào trong mã của bạn chịu trách nhiệm về mức tiêu thụ bộ nhớ.

0

Cả hai mô đun mod_python và mod_wsgi đều được tải vào apache chưa?

Tôi biết mod_wsgi không thích có mod_python trong tòa nhà của nó. Kiểm tra nó không được tải.

+1

Người ta có thể sử dụng mod_python và mod_wsgi cùng nhau tốt, nó không phải là mod_wsgi không thích nó. Bạn chỉ mất một vài tùy chọn cấu hình cho mod_wsgi vì mod_python chịu trách nhiệm khởi tạo Python, chứ không phải mod_wsgi. Ngoài ra, mod_python có rò rỉ bộ nhớ ngay cả khi được kích hoạt trong Apache nhưng không được sử dụng. Rò rỉ bộ nhớ đó chỉ trở thành một vấn đề nếu thực hiện rất nhiều lần khởi động lại Apache và không phải là một vấn đề xảy ra trên mọi yêu cầu. –

1

Kiểm tra xem phụ trợ bộ nhớ cache trong bộ nhớ có được bật hay không, nếu có, đó có thể là sự cố (mục nhập bộ nhớ cache mới theo từng yêu cầu).

+0

Nó không phải là. Tôi sử dụng memcached bây giờ (nó sử dụng quá trình riêng của nó, mà phát triển một cách riêng biệt), nhưng tắt bộ nhớ đệm không bộ nhớ đệm bất cứ điều gì. –

2

Chúng tôi đã có một vấn đề tương tự trên Webfaction, nhưng nó bật ra đó không phải là vì họ ở tất cả . Có một lỗi trong Django về mức sử dụng bộ nhớ cao khi sử dụng sơ đồ trang web với nhiều yếu tố: http://code.djangoproject.com/ticket/11572

Khi chúng tôi xóa sơ đồ trang web, nó không quay lên 90 Mb vào thời gian đó nữa. Chỉ cần nghĩ rằng tôi nên đề cập đến nó vì nó mất một thời gian dài để sử dụng để khắc phục sự cố.

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