在我的一个观点中,我遇到了问题,进入这个 url 会使 CPU 使用率 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 放入其中?
我的“顶部”命令:
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:
前 3 个是passenger_wsgi,它打开manage.py。
相关分类