自己用 Django 写的一个爬虫网站访问经常会特别卡该如何查找原因呢?

2015-10-14 21:22:02 +08:00
 macleek

虽然接触网站开发不久了,但是感觉自己还是小白。
最近写了一个简单的小网站( http://dota.happylyang.com/ )抓取 Dota2 的直播比赛的信息和天梯积分,如下图:

celery(python)用的是默认的配置, broker 是 redis ,服务器配置是 DO 上的 2G RAM 2CPUs , gunicorn 运行了 4 个 worker ,静态文件都在七牛。
现在问题是经常加载的奇慢无比甚至超时无法访问, celery 的任务执行从 flower 上监控的情况来看失败的任务几乎没有,很正常。但是停掉 celery 和 mongodb 后访问速度就变快了。
想请教下大家我该从哪些方面检查原因呢?

3209 次点击
所在节点    Python
8 条回复
nooper
2015-10-14 22:26:52 +08:00
你可以用 django-debug-toolbar 分析一下。
ericls
2015-10-14 22:43:45 +08:00
请问如何用 Django 写爬虫
KotiyaSanae
2015-10-14 22:53:08 +08:00
恩,请 top 和 free 查一下内存占用和 cpu 负载。
经验来看,通常是由于内存问题……
macleek
2015-10-14 23:00:26 +08:00
@KotiyaSanae
开始的时候确实是内存问题啊 ,所以从 512M 升到了 2G ,泪
free -m
total used free shared buffers cached
Mem: 2001 1843 158 0 214 793
-/+ buffers/cache: 835 1166
Swap: 4095 53 4042

load average: 0.18, 0.16, 0.22

现在速度还算正常,内存占用率还行,特别慢的时候也差不多是这个占用率。。
macleek
2015-10-14 23:03:59 +08:00
@ericls 我表述的不清楚==
mutoulbj
2015-10-15 08:43:29 +08:00
mongodb 吃内存~
KotiyaSanae
2015-10-15 12:11:50 +08:00
@macleek 这个内存占用算是很糟了,本来就不会 100%占用,过了一定的阈值就会使用 swap 吧。我怀疑特别慢的时候就是内存和 swap 频繁换入换出的时候……
你看一下 mongodb 是否有堆积,如果有,请加大消耗的力度。
个人没有使用过 mongo ,既然有吃内存的意见,我觉得您可以试试 redis 看会不会有好转。
celery 之前我观察到,这玩意近乎会多消耗一倍的内存,如果内存吃紧,建议不要用。
macleek
2015-10-15 21:35:20 +08:00
@KotiyaSanae 这个内存还好吧,实际可以用的一半左右, cached 和 buffers 也算做可用内存哦。网站有时奇慢的原因我已经找到了,就是自己 Node 写的 server 太差了,超时的请求没有做处理,导致卡住,占用的资源也一直不能释放。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX