2012-01-05 26 views
5

Tôi có một trang web đang được phục vụ bởi nginx và django.memcached làm chậm trang web

My staging.py chứa các cài đặt CACHE và phần mềm trung gian chính xác. Bạn có thể xem nginx.confnginx conf file related to the site. Tôi đã xác nhận rằng memcached đang chạy qua ngrep -d any port 11211.

Tôi bật bộ nhớ đệm cho toàn bộ trang web, và muốn để xem hiệu suất bằng cách làm ab -n 1000 -c 10 http://site.com

Với bộ nhớ đệm quay tắt, tôi nhận được:

Concurrency Level:  10 
Time taken for tests: 10.276 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 97.32 [#/sec] (mean) 
Time per request:  102.759 [ms] (mean) 
Time per request:  10.276 [ms] (mean, across all concurrent requests) 
Transfer rate:   1111.43 [Kbytes/sec] received 

Với bộ nhớ đệm bật, tôi nhận được :

Concurrency Level:  10 
Time taken for tests: 12.277 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 81.45 [#/sec] (mean) 
Time per request:  122.771 [ms] (mean) 
Time per request:  12.277 [ms] (mean, across all concurrent requests) 
Transfer rate:   930.26 [Kbytes/sec] received 

Trang web của tôi là một blog đang kéo bài đăng từ cơ sở dữ liệu - không có gì lạ.

Tôi rất biết ơn nếu ai đó có thể cho tôi biết lý do trang web thực sự chậm lại với memcached. Bạn có thể thấy rằng "Yêu cầu mỗi giây" thực sự giảm khi tôi sử dụng memcached!

Tuy nhiên, running memcached-top đã cho tôi no hits khi tôi chạy ab (mặc dù các bộ đọc và viết đã tăng lên trong khi thử nghiệm). Tôi có memory available và memcached là not hogging lên bộ nhớ.

EDIT
Tôi chạy memcached -vv và có some results. Bạn có thể thấy rằng memcached in ra một "STORED" lần đầu tiên, và sau đó dường như không gửi nó từ bộ nhớ cache (không chắc chắn về điều này). Bây giờ tôi thậm chí còn bối rối hơn. Có lẽ memcached & giao diện django đang làm việc, nhưng kết quả cuối cùng là nó tốt hơn để không chạy memcached?

+0

http://pastebin.com/sAksJTar trở lại dưới dạng bài đăng chưa rõ – ReadWriteCode

+0

xin lỗi .. các liên kết mới sẽ hoạt động ngay bây giờ. – Trewq

+1

Tôi không chắc chắn chính xác vấn đề ở đây là gì. Bạn đã thử xem tỷ lệ truy cập bộ nhớ cache chưa? Tôi nghĩ rằng nó có thể là một điều tốt để chia sẻ mintcache với bạn. http://djangosnippets.org/snippets/155/ –

Trả lời

1

Trewq, rất nhiều thứ khác nhau có thể xảy ra sai. Bạn nói máy của bạn không phân trang nhưng nhận được yêu cầu không trở lại mặc dù memcache STORED kết quả.

lý thuyết của tôi: quá ngắn timeout, người lái xe xấu, và có thể là sai vòm CPU (x86 vs _64)

Timeouts

Thông thường trong đầu ra -vv (có thể là -vvv) dòng SET sẽ có cú pháp như lệnh, khóa, giá trị và thời gian chờ. Thời gian chờ rất nhỏ có thể là vấn đề với lưu trữ memcache và sau đó gần như ngay lập tức xả giá trị ra.

< tên lệnh> < chìa khóa> < cờ> < exptime> < byte> [noreply] \ r \ n - https://github.com/memcached/memcached/blob/master/doc/protocol.txt

driver

Ngoài ra, có thể có một vấn đề với trình điều khiển memcache/api bạn đang sử dụng như mc không bao giờ nên chặn lâu. Bạn có thể kiểm tra trạng thái dịch vụ memcache của bạn bằng cách thực hiện một cái gì đó như thế này http://code.google.com/p/memcached/wiki/NewConfiguringServer#Inspecting_Running_Configuration trước và sau khi chạy bechmark.

kiểm toán chính

Một khi trở lại tôi đã viết kịch bản trong câu hỏi này Setting smaller buffer size for sys.stdin? kiểm toán đầu ra của -vv memcache để xem làm thế nào cân bằng được là vào tập hợp. Đã lâu rồi nhưng tôi tin rằng nó có thể hữu ích cho bạn với một số bản sửa lỗi.

Nó không được đề cập trong wiki cho stat nhưng có những giá trị chỉ số để giúp bạn tìm ra nếu bộ nhớ cache của bạn được cân bằng - https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L409

siêu lý tưởng là 9/10 yêu cầu là số truy cập vào 1 miss, thực tế có nhiều khả năng 6/10 lượt truy cập theo yêu cầu và bất kỳ điều gì dưới 60% đều làm lãng phí bộ nhớ.

+0

Tôi đồng ý - trong một thế giới hoàn hảo, tỷ lệ truy cập của bạn sẽ là 90% hoặc cao hơn. Nhưng bạn có thể chứng minh được yêu sách của mình rằng tỷ lệ truy cập 60% là ngưỡng của tiện ích không? Hay đó là một quan điểm chủ quan dựa trên kinh nghiệm cá nhân? –

+0

@Chris - Trải nghiệm nhân sự với một khách hàng có một vài mảng 12GB và xử lý 14-15 triệu lượt xem trang trong một ngày "internet" 16 giờ. Khi tỷ lệ hit/miss của bạn giảm xuống dưới 60% đối với môi trường HLA, đây là dấu hiệu cho thấy bạn đang vặn một số người dùng ở đâu đó (bị suy giảm/chậm dịch vụ) - Bên cạnh kịch bản python của tôi, một người bạn tốt của tôi đã viết https này : //github.com/nerdynick/MemcachedManager mặc dù một lời cảnh báo tôi không biết nếu nó ổn định. – David

+0

@Chris - Hầu như đã quên. Một thủ phạm khác cho phụ. 60% là quá ngắn thời gian hết hạn. Cách tiếp cận của tôi thường có tệp cấu hình trung tâm với danh sách thời gian hết hạn được phân loại theo danh mục (toàn cầu, mô-đun, tất cả người dùng, một số người dùng, một người dùng) và bắt đầu mọi thứ được đặt hết hạn một năm trong tương lai. – David

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