В одном из моих представлений у меня есть проблема, что вход в этот URL делает использование процессора 100% в течение 5-10 минут.Это означает, что в течение следующих 5-10 минут моя веб-страница будет бесполезной.
Моя ставка заключается в том, сколько запросов к базе данных я пытаюсь отправить.Views.py, который доставляет мне неприятности:
def guild_details(request, guild_name):
fixed_guild_name = urllib.parse.unquote(guild_name)
players = Player.objects.filter(guild=fixed_guild_name)
last_month = datetime.today() - timedelta(days=30)
deaths = reduce(QuerySetSequence, [Deaths.objects.filter(killed=player, date__gte=last_month) for player in players])
kills = reduce(QuerySetSequence, [Deaths.objects.filter(killer=player, date__gte=last_month) for player in players])
return render(request, 'guild.html', {'players': players,
'deaths': deaths.order_by('-date'),
'kills': kills.order_by('-date'),
'guild_name': guild_name})
Кажется, не так уж плохо , но учтите, что:
- База данных включает более 6000+ "игроков",(и растет)
- База данных включает в себя более 26000+ "Смертей".(и поднимается)
Сначала я думал о создании кэша для этой веб-страницы, но число смертей / убийств может меняться каждые 30 минут или около того, поэтому я не думаю, что это сильно поможет -учитывая, что у меня проблемы с доступом к этой странице в первый раз , если количество игроков велико (10+).Если количество игроков мало, у меня нет проблем с доступом к этой странице.Кроме того, я использую redis / celery с утилизацией на том же сервере.
Есть ли что-то, что я мог бы оптимизировать, чтобы он работал?Или мне просто нужно добавить больше CPU?
Моя команда "top":
last pid: 69974; load averages: 4.28, 4.78, 5.49 up 2+11:16:22 12:40:46
14 processes: 5 running, 9 sleeping
CPU: 33.1% user, 1.4% nice, 6.0% system, 0.0% interrupt, 59.4% idle
Mem: 8965M Active, 30G Inact, 112K Laundry, 82G Wired, 3594M Free
ARC: 64G Total, 41G MFU, 19G MRU, 17M Anon, 857M Header, 2934M Other
55G Compressed, 97G Uncompressed, 1.76:1 Ratio
Swap:
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
41281 xxxx 1 103 0 65500K 61516K CPU0 0 15:27 100.34% python3.6
42147 xxxx 1 103 0 52956K 48584K CPU1 1 6:33 99.98% python3.6
41637 xxxx 1 103 0 56284K 52352K CPU9 9 14:44 96.18% python3.6
44812 xxxx 1 35 15 65132K 57864K CPU3 3 0:05 0.05% python3.6
51296 xxxx 4 35 15 12444K 7880K kqread 3 0:03 0.03% redis-server
69122 xxxx 1 35 15 7920K 3236K CPU5 5 0:00 0.02% top
40866 xxxx 1 35 15 13192K 8336K select 5 0:00 0.00% sshd
44823 xxxx 1 35 15 73836K 66868K select 2 1:03 0.00% python3.6
93909 xxxx 1 35 15 62060K 55860K select 5 0:04 0.00% python3.6
44811 xxxx 1 35 15 7668K 3688K select 4 0:01 0.00% screen
66149 xxxx 1 21 0 4691M 98M accept 3 0:00 0.00% php-fpm
93908 xxxx 1 35 15 7668K 3708K select 3 0:00 0.00% screen
40867 xxxx 1 35 15 8056K 4336K wait 3 0:00 0.00% bash
51295 xxxx 1 35 15 7668K 3656K select 1 0:00 0.00% screen
Первые 3 - passenger_wsgi, который включает manage.py ON.