之前开发维护的一个系统,是用来管理 微信公众号 的,不过做成平台了,即多个公众号可以连这个平台,平台提供了小工具,用于公众号和粉丝的互动。
背景
其中有个互动工具,是用户在公众号上生成个人名片(一张图片,里面有头像和二维码),用户将名片分享给好友 扫描,好友关注这个公众号,两者均得到积分.积分到一定程度后,可以兑换奖品。这样一个功能,如果遇到一些大厂商想用,短时间内会出现爆发的情况。
情况一
某一天,一个国内知名品牌的华南分部使用我们这个平台,由于是大厂,推广很给力,一小段时间后,发现图片生成非常缓慢.
刚开始,我还以为是线程访问量大,想看一下gc的情况
如上图,情况良好,没啥特别.
我统计了下用户进入数(即扫码关注)
发现是这个级别.
我看了下服务,cpu 内存和系统自己的一些数据,都还算正常,不过我 直接访问 服务器,感觉都很卡,怀疑是带宽有点问题,因为业务中,有个 二维码图片,怀疑是这个图片 非常 频繁地 生成,传输,占用了很大的带宽,
用iftop查看了下带宽,发现果然如此。
于是解决方案就非常简单了,找领导 加带宽.
情况二
解决了带宽问题,这个世界清静了不少,但风雨总在阳光后.
过了不久,大厂的领导觉得,吸粉的效果还不错,趁快年底了,多搞点用户量出来!于是,又开始大搞了,比上次还要大量 。然后,瓶颈如约而至。
也是慢,不过症状不同,上次是图片生成慢,这次是所有请求都慢,流量没有达到最高,
jstack 看了下线程,也看不出所以然来(这一直不太知道jstack怎么分析问题,jmap的dump能分析些)
突然,我惊讶的发现mysql的cpu 达到了90%。这大概就是最大的原因吧!!于是就想着看看mysql的情况
查看了下连接数,select * from information_schema.PROCESSLIST
where db = ‘xxxx’;
设置了慢查询相关参数。看了下慢查询,发现有一条SQL非常地慢,达到10S,发现这是和用户相关的表,由于,近来做活动,用户数据上升得很快。然后把查询条件的字段加上索引,立杆见影!!! mysql 的cpu瞬间将到个位数,…
问题解决!解决后的情况
情况三
后来有一次服务 直接无响应了,简单了下服务器,发现硬盘不够。。。。
原来是生成的图片都放在服务器了,没有清除,图片如果要缓存,wechat 会存起来几天,所以服务器的是可以清除的。 清除掉即可。一步步清文件 了du -h –max-depth=1
(服务器是阿里云的,当时刚申请的时候,只当作简单的工具玩下,没考虑到大厂商会搞活动,只搞了40G的硬盘)
后记
微信公众号开发虽然遇到不少坑,但总的来感觉,还是很有意思的,tx的这个平台提供了很多的api,且开发的公众号自带超强社交功能,是个很有想象空间的事情。不过对于普通商家/个人,花几万开发一个公众号不太可行,所以才会有各种依赖微信平台的出现,如商城,如OA,如CMS。。。
不过公众号要开发完整的系统,用网页确实体验不好,或许也是微信小程序出现的其中一个比较大的原因吧,我在想微信小程序是不是也出现第三方平台了呢?
很好奇后续的发展!
上面提到的一些工具可查看http://blog.csdn.net/mingover/article/details/55106850