Django - убивает мой сервер с помощью неэффективного кода или неправильной настройки Apache? - PullRequest
0 голосов
/ 06 июня 2011

Я тестировал свой рабочий сервер (он находится в бета-версии), и результаты были, по меньшей мере, неудовлетворительными.На страницах без динамического содержимого 1000 запросов с параллелизмом 1 вернули 73 запроса / сек.

Когда я начинаю добавлять запросы MYSQL к уравнению, все быстро выходит из-под контроля.Те же 1000 запросов на моей домашней странице дают следующие результаты:

Пики процессора до 50% Пики нагрузки до 3,7 (хотя это не всегда происходит)

complete request:1000
failed requests:0
write errors:0
requests/sec: 2.44
transfer rate: 113.26[Kbytes/sec]

90% of requests are served within 142ms.  
95% of requests are served within 3531ms (it just keeps getting worse after that). 

Взгляд сверхупока я запускаю тест

  mysqld runs as a process is consuming roughly 7% of memory and 2.5% cpu
  Apache seems to spawn 7 concurrent processes at times
  At other points, Apache does not show up in Top 

, я запускаю предварительно разветвленный Apache на экземпляре Micro AWS (ubuntu) и обновляюсь до более высокого экземпляра, но я боюсь, что здесь есть основная проблемакод или моя настройка Apache.

Я развертываю Django с Mod_WSGI, и я установил KeepAliveTimeout на 3, на случай, если пара медленных процессов облажали меня.

Мой код для домашней страницы, по-видимому, прост и хотя требует присоединений.

    def index(request):
         posts=Post.objects.filter(photo__isnull=False).order_by('date').distinct()[0:7]  
         ohouses=Open_House.objects.filter(post__photo__isnull=False).order_by('day').distinct()[0:4]

         return render_to_response("index.html", {'posts':posts,'ohouses':ohouses},context_instance=RequestContext(request))    

Я оставил конфигурацию по умолчанию для MYSQL.

Может ли все это быть связано с запуском микроэкземпляра?Может ли мой экземпляр быть несколько поврежден?Любые другие правдоподобные объяснения?

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Существует тонна , что позволяет быстро реагировать.Django довольно оптимизирован для того, что он есть, но опора только на фреймворк никогда не приведет вас туда, куда вы хотите.

Если вы собираетесь использовать Apache, используйте форк MPM и даже затем отключите всех модулей, которые вам абсолютно не нужны.Apache можно заставить быстро бегать, но это не самая быстрая лошадь.Вы будете лучше с чем-то вроде Nginx или ( cringe ) чероки.Cherokee - хороший веб-сервер, но индекс юзабилити равен нулю.

Любые статические ресурсы должны обслуживаться непосредственно вашим веб-сервером или, что еще лучше, вне CDN.

Предполагается, что вы оптимизировали свой собственныйВстроенный в Django автоматический кеширующий код код помогает избежать неэффективного использования запросов и позволяет сократить общее количество запросов, необходимых для базы данных.После этого вам нужно использовать что-то вроде memcached.

Тогда есть сам сервер.В зависимости от размера вашего сайта вам может не потребоваться много ОЗУ и ЦП, но всегда лучше иметь слишком много, чем недостаточно.Возможно, было бы полезно создать некоторую искусственную нагрузку на ваш сервер (автоматическое тестирование, паук на вашем сайте и т. Д.) И посмотреть, как удерживаются ваши системные ресурсы.Если вы почти достигли предела (я бы сказал, более 50% с такими простыми тестами), вам нужно добавить еще несколько в пул вашего экземпляра.

Поиск в Интернете статей о том, как оптимизировать MySQL.Из коробки он имеет тенденцию использовать намного больше ресурсов, чем ему действительно нужно;там много возможностей для улучшения.И, если он еще не находится на своем собственном сервере, рассмотрите возможность его разгрузки на свой собственный сервер.Если вы ожидаете большого трафика, тот же сервер, отвечающий на веб-запросы и извлекающий данные из базы данных, быстро станет узким местом.

1 голос
/ 06 июня 2011

Может ли все это быть связано с запуском микроинстанса?

Микроэкземпляры в течение короткого периода времени загружаются в 2 ЦП, после чего они серьезно ограничиваются в течение нескольких минут.По этой причине я бы не стал доверять никаким тестам, сделанным на экземпляре Micro EC2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...